УСОВЕРШЕНСТВОВАННАЯ СИГНАЛИЗАЦИЯ ИДЕНТИФИКАТОРОВ СЛОЕВ ДЛЯ РАБОЧИХ ТОЧЕК ВИДЕОКОДЕРА
IMPROVED SIGNALING OF THE LAYER IDENTIFIERS FOR THE WORKING POINTS OF THE VIDEO CODER

По данной заявке испрашивается приоритет на основании предварительной заявки на патент США №61/709,094, поданной 2 октября 2012 г., все содержимое которой включено в настоящий документ путем ссылки.
Область техники, к которой относится изобретение
Настоящее изобретение относится в общем к обработке видеоданных и более конкретно к обработке рабочих точек, используемых в видеоданных.
Уровень техники
Возможности цифрового видео могут встраиваться в широкий спектр устройств, включая цифровые телевизоры, системы цифрового прямого вещания, системы беспроводного вещания, карманные персональные компьютеры (PDA), переносные или настольные компьютеры, планшетные компьютеры, электронные книги, цифровые камеры, цифровые записывающие устройства, цифровые мультимедийные проигрыватели, видеоигровые устройства, игровые приставки, сотовые или спутниковые радиотелефоны, так называемые «смартфоны», устройства для видеоконференцсвязи, устройства для потокового видео и т.п. Цифровые видеоустройства реализуют методики кодирования видео, например описанные в стандартах, заданных MPEG-2, MPEG-4, H.263 ITU-T, H.264/MPEG-4 ITU-T, часть 10, Улучшенное кодирование видео (AVC), стандартом Высокоэффективного кодирования видео (HEVC), в настоящее время находящимся в разработке, и расширениях таких стандартов. Видеоустройства могут эффективнее передавать, принимать, кодировать, декодировать и/или хранить цифровую видеоинформацию с помощью реализации таких методик кодирования видео.
Методики кодирования видео включают в себя пространственное (внутреннее) прогнозирование и/или временное (внешнее) прогнозирование для уменьшения или устранения избыточности, присущей видеопоследовательностям. Для блочного кодирования видео серия последовательных макроблоков видео (например, видеокадр или часть видеокадра) может разбиваться на видеоблоки, которые также могут называться блоками дерева, единицами кодирования (CU) и/или узлами кодирования. Видеоблоки в серии последовательных макроблоков с внутренним кодированием (I) изображения кодируются с использованием пространственного прогнозирования относительно эталонных выборок в соседних блоках в том же изображении. Видеоблоки в серии последовательных макроблоков с внешним кодированием (P или B) изображения могут использовать пространственное прогнозирование относительно эталонных выборок в соседних блоках в том же изображении или временное прогнозирование относительно эталонных выборок в других эталонных изображениях. Изображения могут называться кадрами, а эталонные изображения могут называться эталонными кадрами.
Пространственное или временное прогнозирование приводит к блоку с прогнозированием для блока, который будет кодироваться. Остаточные данные представляют собой разности пикселей между исходным блоком, который будет кодироваться, и блоком с прогнозированием. Блок с внешним кодированием кодируется в соответствии с вектором движения, который указывает на блок эталонных выборок, образующих блок с прогнозированием, и остаточными данными, указывающими разность между кодированным блоком и блоком с прогнозированием. Блок с внутренним кодированием кодируется в соответствии с режимом внутреннего кодирования и остаточными данными. Для дополнительного сжатия остаточные данные могут быть преобразованы из области пикселей в область преобразования, что приводит к остаточным коэффициентам преобразования, которые затем можно квантовать. Квантованные коэффициенты преобразования, организованные первоначально в двумерный массив, можно сканировать для создания одномерного вектора коэффициентов преобразования, и может применяться энтропийное кодирование для достижения еще большего сжатия.
Раскрытие изобретения
Настоящее изобретение в общем описывает методики для сигнализации идентификаторов слоев для рабочих точек при кодировании видео.
В одном примере способ обработки видеоданных включает в себя прием указания максимального значения идентификатора (ID) слоя для битового потока; прием флага для первого слоя со значением ID слоя меньше максимального значения ID слоя; и определение на основании значения флага, включен ли первый слой в рабочую точку.
В другом примере устройство для обработки видеоданных включает в себя один или более процессоров, выполненных с возможностью приема указания максимального значения идентификатора (ID) слоя для битового потока; приема флага для первого слоя со значением ID слоя меньше максимального значения ID слоя; и определения на основании значения флага, включен ли первый слой в рабочую точку.
В другом примере устройство для обработки видеоданных включает в себя средство для приема указания максимального значения идентификатора (ID) слоя для битового потока; средство для приема флага для первого слоя со значением ID слоя меньше максимального значения ID слоя; и средство для определения на основании значения флага, включен ли первый слой в рабочую точку.
В другом примере постоянный машиночитаемый носитель информации хранит команды, которые при исполнении одним или более процессорами побуждают один или более процессоров принять указание максимального значения идентификатора (ID) слоя для битового потока; принять флаг для первого слоя со значением ID слоя меньше максимального значения ID слоя; и определить на основании значения флага, включен ли первый слой в рабочую точку.
В другом примере способ кодирования видеоданных включает в себя формирование указания максимального значения идентификатора (ID) слоя для битового потока; и формирование флага для первого слоя со значением ID слоя меньше максимального значения ID слоя, где значение для флага сигнализирует, включен ли первый слой в рабочую точку.
В другом примере устройство кодирования видео включает в себя видеокодер, выполненный с возможностью формирования указания максимального значения идентификатора (ID) слоя для битового потока; и формирования флага для первого слоя со значением ID слоя меньше максимального значения ID слоя, где значение для флага сигнализирует, включен ли первый слой в рабочую точку.
В другом примере устройство для кодирования видео включает в себя средство для формирования указания максимального значения идентификатора (ID) слоя для битового потока, и средство для формирования флага для первого слоя со значением ID слоя меньше максимального значения ID слоя, где значение для флага сигнализирует, включен ли первый слой в рабочую точку.
В другом примере постоянный машиночитаемый носитель хранит команды, которые при исполнении одним или более процессорами побуждают один или более процессоров сформировать указание максимального значения идентификатора (ID) слоя для битового потока и сформировать флаг для первого слоя со значением ID слоя меньше максимального значения ID слоя, причем значение для флага сигнализирует, включен ли первый слой в рабочую точку.
Подробности одного или более примеров излагаются на прилагаемых чертежах и в описании ниже. Другие аспекты, задачи и преимущества станут очевидны из описания, чертежей и из формулы изобретения.
Краткое описание чертежей
Фиг. 1 - блок-схема, иллюстрирующая примерную систему кодирования и декодирования видео, которая может использовать методики, описанные в данном описании изобретения.
Фиг. 2 - блок-схема, иллюстрирующая примерный видеокодер, который может реализовать методики, описанные в данном описании изобретения.
Фиг. 3 - блок-схема, иллюстрирующая примерный видеодекодер, который может реализовать методики, описанные в данном описании изобретения.
Фиг. 4 - блок-схема, иллюстрирующая примерный набор устройств, которые образуют часть сети.
Фиг. 5 - блок-схема алгоритма, иллюстрирующая примерный способ для кодирования видеоданных в соответствии с методиками, описанными в данном описании изобретения.
Фиг. 6 - блок-схема алгоритма, иллюстрирующая примерный способ для обработки видеоданных в соответствии с методиками, описанными в данном описании изобретения.
Осуществление изобретения
Данное изобретение относится к кодированию видео (то есть кодированию и/или декодированию видеоданных) и обработке видео, а конкретнее, к синтаксису рабочих точек, используемому при обработке видео. Вообще данное изобретение описывает методики для сигнализации идентификаторов слоев для рабочих точек при кодировании видео. Рабочие точки относятся к битовым субпотокам, которые могут извлекаться из исходного битового потока, который является масштабируемым во времени и/или имеет несколько слоев либо видов. Битовые субпотоки могут извлекаться из битового потока на основании значений идентификаторов слоев (то есть ID слоев) и идентификаторов временных подслоев (то есть временных ID), которые идентифицируют рабочую точку битового потока. В общем данное изобретение использует термины «идентификаторы слоев» и «ID слоев» для обозначения идентификаторов пространственных слоев и/или видов, тогда как термины «идентификаторы временных подслоев» и «временные ID» относятся к идентификаторам временных подслоев.
Рабочие точки могут сигнализироваться, например, в наборе параметров, таком как набор параметров видео (VPS), в битовом потоке. Для каждой из рабочих точек сформированная видеокодером структура синтаксиса рабочих точек задает, например, набор идентификаторов слоев, используемых для идентификации единиц на слое абстракции сети (NAL) в битовом потоке, которые принадлежат битовому субпотоку данной рабочей точки. Таким образом, некий сетевой объект, например информированный о среде сетевой объект (MANE), может проанализировать заголовки единиц NAL для извлечения из исходного битового потока единиц NAL, которые составляют битовый субпоток данной рабочей точки. Каждая единица NAL в битовом потоке может включать в себя ID слоя и временной ID, и MANE может идентифицировать единицы NAL для конкретной рабочей точки путем анализа ID слоя и временного ID.
Методики настоящего изобретения могут повысить эффективность сигнализации информации, ассоциированной с рабочими точками, путем усовершенствования сигнализации ID слоев для рабочих точек. В соответствии с одной примерной методикой настоящего изобретения, которая подробнее будет объясняться ниже, можно сигнализировать значение идентификатора слоя (то есть ID слоя) для наибольшего ID слоя, и наличие дополнительных ID слоев можно сигнализировать в виде последовательности флагов. Например, предположим, что битовый поток включает в себя шесть субпотоков с различными временными и пространственными разрешениями, при этом каждый субпоток имеет ID слоя. Наибольшее значение ID слоя можно сигнализировать в битовом потоке. Для этого примера предположим, что наибольшее значение ID слоя равно 9, означая, что теоретически имеется десять слоев с ID слоев от 0 до 9, которые могут включаться в рабочую точку. Оставшиеся значения ID слоев для рабочей точки можно сигнализировать с использованием девяти флагов, где первый флаг указывает, присутствует ли значение ID слоя 0, второй флаг указывает, присутствует ли значение ID слоя 1, и так далее, вплоть до заключительного флага, который указывает, присутствует ли значение ID слоя 8. Таким образом, чтобы сигнализировать значения ID слоев 2, 5 и 9, можно сначала сигнализировать значение 9 с последующими последовательностями флагов 001001000, где 1 для третьего разряда указывает, что присутствует значение ID слоя 2, а 1 для шестого разряда указывает, что присутствует значение ID слоя 5. В данном описании изобретения также будут описаны другие методики сигнализации ID слоев.
В данном описании, как правило, будет использоваться термин «кодирование видео» для обозначения любого из кодирования видео и декодирования видео. В данном описании также используется термин «обработка видео», который обычно подразумевается включающим в себя кодирование видео, но также включает в себя другие виды обработки видео, например анализ видеоданных, маршрутизацию видеоданных, конкатенацию битовых потоков видео и другие такие процессы. Видеокодер можно в общем рассматривать как устройство, которое кодирует и/или декодирует видеоданные, тогда как видеопроцессор или устройство обработки видео можно рассматривать как устройство, которое кодирует видеоданные, но также как устройство, которое выполняет и другие процессы над видеоданными.
Фиг. 1 - блок-схема, иллюстрирующая примерную систему 10 кодирования и декодирования видео, которая может использовать методики для сигнализации ID слоев, описанные в данном описании. Как показано на фиг. 1, система 10 включает в себя устройство-источник 12, которое формирует кодированные видеоданные, которые позднее будут декодированы устройством-адресатом 14. Кодированные видеоданные могут направляться из устройства-источника 12 в устройство-адресат 14 посредством сетевого устройства 13, которое может быть частью более крупной сети из сетевых устройств. Устройство-источник 12 и устройство-адресат 14 могут быть выполнены в виде любого из широкого диапазона устройств, включающего в себя настольные компьютеры, блокнотные (например, переносные) компьютеры, планшетные компьютеры, телевизионные приставки, портативные телефоны, например так называемые «интеллектуальные» телефоны, так называемые «интеллектуальные» планшеты, телевизоры, камеры, устройства отображения, цифровые мультимедийные проигрыватели, игровые приставки, устройство для потокового видео или т.п. В некоторых случаях устройство-источник 12 и устройство-адресат 14 могут быть оборудованы для беспроводной связи.
В примере из фиг. 1 устройство-источник 12 включает в себя источник 18 видео, видеокодер 20 и интерфейс 22 вывода. Устройство-адресат 14 включает в себя интерфейс 28 ввода, видеодекодер 30 и устройство 32 отображения. В других примерах устройство-источник 12 и устройство-адресат 14 могут включать в себя другие компоненты или компоновки. Например, устройство-источник 12 может принимать видеоданные из внешнего источника 18 видео, например внешней камеры. Также устройство-адресат 14 может взаимодействовать с внешним устройством отображения вместо включения в себя встроенного устройства отображения.
Проиллюстрированная система 10 из фиг. 1 является всего лишь одним примером. Методики настоящего изобретения могут выполняться любым устройством кодирования и/или обработки цифрового видео. Хотя методики выполняются, как правило, устройством кодирования видео или устройством декодирования видео, методики также могут выполняться видеокодером/декодером, обычно называемым «кодеком». Кроме того, методики настоящего изобретения также могут выполняться препроцессором видео. Устройство-источник 12 и устройство-адресат 14 являются всего лишь примерами таких устройств кодирования, в которых устройство-источник 12 формирует кодированные видеоданные для передачи устройству-адресату 14. В некоторых примерах устройства 12, 14 могут работать практически симметричным образом, так что каждое из устройств 12, 14 включает в себя компоненты кодирования и декодирования видео. Поэтому система 10 может поддерживать однонаправленную или двунаправленную передачу видео между видеоустройствами 12, 14, например для потоковой передачи видео, воспроизведения видео, телевизионного вещания или видеотелефонии.
В одном примере видеокодер 20 в устройстве-источнике 12 может формировать битовый поток видеоданных. VPS для видеоданных может задавать несколько рабочих точек, соответствующих битовым субпотокам в битовом потоке. Видеокодер 20 может включать в себя синтаксис рабочих точек, идентифицирующий слои и временные подслои, которые будут включены в конкретные рабочие точки. Синтаксис рабочих точек в VPS может включать в себя указание максимального значения ID слоя для рабочей точки, а также один или более флагов. Флаги указывают, включаются ли в рабочую точку слои с ID слоев меньше максимального ID слоя. Таким образом, после приема VPS с максимальным ID слоя и флагами сетевое устройство 13 может идентифицировать единицы NAL для рабочей точки и направить те единицы NAL устройству-адресату 14. После приема единиц NAL видеодекодер 30 в устройстве-адресате 14 может декодировать кодированные видеоданные. Видеодекодер 30 теоретически может анализировать синтаксис рабочих точек, содержащийся в VPS, таким же образом, как и сетевое устройство 13. Например, видеодекодер 30 может проанализировать синтаксис рабочих точек для проверки, принимаются ли все предполагаемые слои, или для определения набора параметров гипотетического эталонного декодера (HRD) для применения.
Источник 18 видео в устройстве-источнике 12 может включать в себя устройство видеозахвата, например видеокамеру, видеоархив, содержащий ранее захваченное видео, и/или интерфейс источника видеосигнала для приема видео от поставщика видеоконтента. В качестве дополнительной альтернативы источник 18 видео может формировать основанные на компьютерной графике данные в качестве исходного видео, или сочетание «реального» видео, архивного видео и сформированного компьютером видео. В некоторых случаях, если источником 18 видео является видеокамера, то устройство-источник 12 и устройство-адресат 14 могут образовывать так называемые камерофоны или видеотелефоны. Однако, как упоминалось выше, описанные в данном описании методики могут быть применимы к кодированию видео в общем и могут применяться к беспроводным и/или проводным применениям.
В каждом случае захваченное, ранее захваченное или сформированное компьютером видео может кодироваться видеокодером 20. Кодированные видеоданные могут передаваться напрямую устройству-адресату 14 через интерфейс 22 вывода устройства-источника 12. Кодированные видеоданные также (или в качестве альтернативы) могут сохраняться в запоминающем устройстве для последующего обращения устройства-адресата 14 или других устройств, для декодирования и/или воспроизведения.
Линия 16 связи может включать в себя кратковременные носители, например беспроводную широковещательную или проводную сетевую передачу, или носители информации (то есть постоянные носители информации), например жесткий диск, флеш-накопитель, компакт-диск, цифровой видеодиск, диск Blu-ray или другие машиночитаемые носители. В некоторых примерах сетевой сервер может принимать кодированные видеоданные от устройства-источника 12 и передавать кодированные видеоданные устройству-адресату 14, например, посредством сетевой передачи. Аналогичным образом вычислительное устройство из оборудования по производству носителей, например оборудования по штамповке оптических дисков, может принять кодированные видеоданные от устройства-источника 12 и произвести диск, содержащий кодированные видеоданные. Поэтому в различных примерах линия 16 связи может подразумеваться включающей в себя один или более машиночитаемых носителей различных видов. Линия 16 связи может быть выполнена в виде любого типа носителя или устройства, допускающего перемещение кодированных видеоданных от устройства-источника 12 к устройству-адресату 14. В одном примере линия 16 связи может быть выполнена в виде средства связи, чтобы дать устройству-источнику 12 возможность передавать кодированные видеоданные непосредственно к устройству-адресату 14 в реальном масштабе времени. Кодированные видеоданные могут модулироваться в соответствии со стандартом связи, например протоколом беспроводной связи, и передаваться устройству-адресату 14. Средство связи может быть выполнено в виде любого средства беспроводной или проводной связи, например радиочастотного (RF) спектра или одной или более физических линий передачи. Средство связи может образовывать часть пакетной сети, например локальной сети, региональной сети или глобальной сети, такой как Интернет. Средство связи может включать в себя маршрутизаторы, коммутаторы, базовые станции или любое другое оборудование, которое может быть полезно для упрощения связи от устройства-источника 12 к устройству-адресату 14.
Интерфейс 28 ввода в устройстве-адресате 14 принимает информацию из линии 16 связи, которая может быть машиночитаемым носителем. Информация из линии 16 связи может включать в себя синтаксическую информацию, заданную видеокодером 20, которая также используется видеодекодером 30, которая включает в себя синтаксические элементы, которые описывают характеристики и/или обработку блоков и других кодированных единиц, например GOP. Устройство 32 отображения может объединяться с устройством-адресатом 14 или быть внешним по отношению к нему. Устройство 32 отображения отображает пользователю декодированные видеоданные и может быть выполнено в виде любого из ряда устройств отображения, таких как электронно-лучевая трубка (CRT), жидкокристаллический дисплей (LCD), плазменный дисплей, дисплей на органических светоизлучающих диодах (OLED) или другой тип устройства отображения.
В качестве альтернативы кодированные данные могут выводиться из интерфейса 22 вывода в запоминающее устройство 34. Аналогичным образом к кодированным данным можно обращаться из запоминающего устройства 34 с помощью интерфейса ввода. Запоминающее устройство 34 может включать в себя любой из ряда распределенных или локально доступных носителей информации, например жесткий диск, диски Blu-ray, DVD, CD-ROM, флэш-память, энергозависимое или энергонезависимое запоминающее устройство либо любые другие подходящие цифровые носители информации для хранения кодированных видеоданных. В дополнительном примере запоминающее устройство 34 может соответствовать файловому серверу или другому промежуточному запоминающему устройству, которое может хранить кодированное видео, сформированное устройством-источником 12. Устройство-адресат 14 может обращаться к сохраненным видеоданным из запоминающего устройства 34 посредством потоковой передачи или загрузки. Файловый сервер может быть любым типом сервера, допускающим хранение кодированных видеоданных и передачу тех кодированных видеоданных устройству-адресату 14. Примерные файловые серверы включают в себя веб-сервер (например, для веб-сайта), FTP-сервер, сетевые устройства хранения (NAS) или локальный накопитель на дисках. Устройство-адресат 14 может обращаться к кодированным видеоданным посредством любого стандартного информационного соединения, включая Интернет-соединение. Это соединение может включать в себя радиоканал (например, соединение Wi-Fi), проводное соединение (например, DSL, кабельный модем и т. п.) или сочетание их обоих, которое подходит для обращения к кодированным видеоданным, сохраненным на файловом сервере. Передача кодированных видеоданных из запоминающего устройства 34 может быть потоковой передачей, загрузкой или их сочетанием.
Методики настоящего изобретения не обязательно ограничиваются беспроводными применениями или средами. Методики могут применяться к кодированию видео в поддержку любого из ряда мультимедийных приложений, таких как эфирные телевизионные передачи, кабельные телевизионные передачи, спутниковые телевизионные передачи, передачи потокового видео, например по Интернету, кодирование цифрового видео для сохранения на носитель информации, декодирование цифрового видео, сохраненного на носителе информации, или других приложений. В некоторых примерах система 10 может быть выполнена с возможностью поддержки однонаправленной или двунаправленной передачи видео для поддержки таких приложений, как потоковая передача видео, воспроизведение видео, телевизионное вещание и/или видеотелефония.
Видеокодер 20 и видеодекодер 30 могут быть реализованы в виде любой из ряда подходящих схем кодера или декодера, например, одного или более микропроцессоров, цифровых процессоров сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем вентильных матриц (FPGA), дискретных логических схем, программного обеспечения, аппаратных средств, микропрограммного обеспечения или любых их сочетаний. Когда методики реализуются частично в программном обеспечении, устройство может хранить команды для программного обеспечения на подходящем постоянном машиночитаемом носителе и исполнять команды на аппаратных средствах, использующих один или более процессоров, для выполнения методик настоящего изобретения. Каждый из видеокодера 20 и видеодекодера 30 может включаться в один или более кодеров или декодеров, любой из которых может встраиваться как часть объединенного кодера/декодера (кодека) в соответствующем устройстве. Устройство, включающее в себя видеокодер 20 и/или видеодекодер 30, может содержать интегральную схему, микропроцессор и/или устройство беспроводной связи, например сотовый телефон.
Видеокодер 20 и видеодекодер 30 могут работать в соответствии с неким стандартом кодирования видео, например стандартом HEVC, в настоящее время находящимся в разработке, и могут соответствовать испытательной модели HEVC (HM). Вариант предстоящего стандарта HEVC, называемый "HEVC Working Draft 8" или "WD8", описан в документе JCTVC-J1003_d7 под авторством Бросс (Bross) и др., "High efficiency video coding (HEVC) text specification draft 8", Объединенная команда по кодированию видео (JCT-VC) из SG16 WP3 ITU-T и JTC1/SC29/WG11 ISO/IEC, 10-ое заседание в Стокгольме, Швеция, июль 2012 г. Рабочий вариант 8 стандарта HEVC настоящим полностью включен в данный документ путем ссылки. Другой последний вариант стандарта HEVC, называемый "HEVC Working Draft 10" или "WD10", описан в документе JCTVC-L1003v34 под авторством Бросс (Bross) и др., "High efficiency video coding (HEVC) text specification draft 10 (for FDIS & Last Call)", Объединенная команда по кодированию видео (JCT-VC), SG16 WP3 ITU-T и JTC1/SC29/WG11 ISO/IEC, 12-ое заседание в Женеве, Швейцария, 14-23 января 2013 г. WD10 настоящим полностью включен в данный документ путем ссылки.
В качестве альтернативы видеокодер 20 и видеодекодер 30 могут работать в соответствии с другими собственными или промышленными стандартами, например стандартом H.264 ITU-T, в качестве альтернативы называемым MPEG-4, часть 10, Улучшенное кодирование видео (AVC), или расширениями таких стандартов. Однако методики настоящего изобретения не ограничены каким-либо конкретным стандартом кодирования. Другие примеры стандартов кодирования видео включают в себя MPEG-2 и H.263 ITU-T. В некоторых аспектах видеокодер 20 и видеодекодер 30 могут быть объединены со звуковым кодером и декодером и могут включать в себя подходящие модули мультиплексирования-демультиплексирования или другие аппаратные средства и программное обеспечение, чтобы справляться с кодированием звука и видео в общем потоке данных или в отдельных потоках данных. Если применимо, то модули мультиплексирования-демультиплексирования могут соответствовать протоколу мультиплексора H.223 ITU или другим протоколам, например протоколу дейтаграмм пользователя (UDP).
Стандарт H.264/MPEG-4 (AVC) ITU-T был сформулирован Экспертной группой в области кодирования видео (VCEG) ITU-T вместе с Экспертной группой по движущимся изображениям (MPEG) ISO/IEC как результат коллективного сотрудничества, известного как Объединенная команда по видео (JVT). В некоторых аспектах описанные в данном описании методики могут применяться к устройствам, которые в общем соответствуют стандарту H.264. Стандарт H.264 описан Исследовательской группой ITU-T в Рекомендации H.264 ITU-T, Advanced Video Coding for generic audiovisual services, датирован мартом 2005 года и в этом документе может называться стандартом H.264 или спецификацией H.264 либо стандартом или спецификацией H.264/AVC. Объединенная команда по видео (JVT) продолжает работать над расширениями к H.264/MPEG-4 AVC.
JCT-VC работает над развитием стандарта HEVC. Работа по стандартизации HEVC основывается на развивающейся модели устройства кодирования видео, называемой испытательной моделью HEVC (HM). HM предполагает несколько дополнительных возможностей у устройств кодирования видео по сравнению с существующими устройствами, соответствующими, например, H.264/AVC ITU-T. Например, тогда как H.264 обеспечивает девять режимов кодирования с внутренним прогнозированием, HM может обеспечить целых тридцать три режима кодирования с внутренним прогнозированием.
Рабочая модель HM в общем описывает, что видеокадр или изображение можно разделить на последовательность блоков дерева или наибольших единиц кодирования (LCU), которые включают в себя выборки яркости и цветности. Синтаксические данные в битовом потоке могут задавать размер для LCU, которая является наибольшей единицей кодирования в показателях количества пикселей. Серия последовательных макроблоков включает в себя некоторое количество последовательных блоков дерева в порядке кодирования. Видеокадр или изображение может разбиваться на одну или более серий последовательных макроблоков. Каждый блок дерева можно разделить на единицы кодирования (CU) в соответствии с квадродеревом. Обычно структура данных квадродерева включает в себя один узел на CU, причем корневой узел соответствует блоку дерева. Если CU разделяется на четыре суб-CU, то узел, соответствующий CU, включает в себя четыре листа, каждый из которых соответствует одной из суб-CU.
Каждый узел в структуре данных квадродерева может обеспечивать синтаксические данные для соответствующей CU. Например, узел в квадродереве может включать в себя флаг разделения, указывающий, разделяется ли соответствующая узлу CU на суб-CU. Синтаксические элементы для CU можно задать рекурсивно, и они могут зависеть от того, разделяется ли CU на суб-CU. Если CU больше не разделяется, то она называется конечной («листовой») CU. В данном описании четыре суб-CU в конечной CU также будут называться конечными CU, даже если отсутствует явное разделение исходной конечной CU. Например, если CU с размером 16×16 больше не разделяется, то четыре суб-CU 8×8 также будут называться конечными CU, хотя CU 16×16 никогда не разделялась.
CU имеет задачу, сходную с макроблоком из стандарта H.264, за исключением того, что CU не имеет отличия в размере. Например, блок дерева можно разделить на четыре дочерних узла (также называемых суб-CU), и каждый дочерний узел, в свою очередь, может быть родительским узлом и разделяться на четыре других дочерних узла. Конечный, неразделенный дочерний узел, называемый листом квадродерева, содержит узел кодирования, также называемый конечной CU. Синтаксические данные, ассоциированные с кодированным битовым потоком, могут задавать максимальное количество раз, которое можно делить блок дерева, называемое максимальной глубиной CU, а также могут задавать минимальный размер узлов кодирования. Соответственно, битовый поток также может задавать наименьшую единицу кодирования (SCU). В данном описании используется термин «блок» для обозначения любой из CU, PU или TU применительно к HEVC или аналогичных структур данных применительно к другим стандартам (например, макроблоков и их субблоков в H.264/AVC).
CU включает в себя узел кодирования и единицы прогнозирования (PU) и единицы преобразования (TU), ассоциированные с узлом кодирования. Размер CU соответствует размеру узла кодирования и должен иметь квадратную форму. Размер CU может варьироваться от 8x8 пикселей до размера блока дерева с максимальным количеством 64x64 пикселей или больше. Каждая CU может содержать одну или более PU и одну или более TU. Синтаксические данные, ассоциированные с CU, могут описывать, например, разбиение CU на одну или более PU. Режимы разбиения могут отличаться между тем, кодируется ли CU в режиме пропуска или в прямом режиме, режиме внутреннего прогнозирования или режиме внешнего прогнозирования. PU могут разбиваться, чтобы иметь неквадратную форму. Синтаксические данные, ассоциированные с CU, также могут описывать, например, разбиение CU на одну или более TU в соответствии с квадродеревом. TU может иметь квадратную или неквадратную (например, прямоугольную) форму.
Стандарт HEVC допускает преобразования в соответствии с TU, которые могут отличаться для разных CU. TU обычно имеют размер на основании размера PU в данной CU, заданной для разделенной LCU, хотя это не всегда может быть так. TU обычно имеют такой же размер или меньше, чем PU. В некоторых примерах остаточные выборки, соответствующие CU, можно подразделить на меньшие единицы, используя структуру квадродерева, известную как «остаточное квадродерево» (RQT). Листы RQT могут называться единицами преобразования (TU). Значения разности пикселей, ассоциированные с TU, можно преобразовать для создания коэффициентов преобразования, которые можно квантовать.
Конечная CU может включать в себя одну или более единиц прогнозирования (PU). Обычно PU представляет пространственную область, соответствующую всей или части соответствующей CU, и может включать в себя данные для извлечения эталонной выборки для PU. Кроме того, PU включает в себя данные, связанные с прогнозированием. Например, когда PU кодируется во внутреннем режиме, данные для PU могут включаться в остаточное квадродерево (RQT), которое может включать в себя данные, описывающие режим внутреннего прогнозирования для TU, соответствующей PU. В качестве другого примера, когда PU кодируется во внешнем режиме, PU может включать в себя данные, задающие один или более векторов движения для PU. Данные, задающие вектор движения для PU, могут описывать, например, горизонтальную составляющую вектора движения, вертикальную составляющую вектора движения, разрешение для вектора движения (например, точность в одну четверть пикселя или точность в одну восьмую пикселя), эталонное изображение, на которое указывает вектор движения, и/или список эталонных изображений (например, Список 0, Список 1 или Список C) для вектора движения.
Конечная CU, имеющая одну или более PU, также может включать в себя одну или более единиц преобразования (TU). Единицы преобразования можно задавать с использованием RQT (также называемого структурой квадродерева TU), как обсуждалось выше. Например, флаг разделения может указывать, разделяется ли конечная CU на четыре единицы преобразования. Затем каждую единицу преобразования можно дальше разделить на дополнительные суб-TU. Когда TU больше не разделяется, она может называться конечной («листовой») TU. Как правило, для внутреннего кодирования все конечные TU, принадлежащие конечной CU, совместно используют один и тот же режим внутреннего прогнозирования. То есть один и тот же режим внутреннего прогнозирования применяется, как правило, для вычисления прогнозированных значений для всех TU в конечной CU. Для внутреннего кодирования видеокодер может вычислять остаточное значение для каждой конечной TU, используя режим внутреннего прогнозирования, в качестве разности между частью CU, соответствующей TU, и исходным блоком. TU не обязательно ограничивается размером PU. Таким образом, TU могут быть больше или меньше PU. Для внутреннего кодирования PU может соотноситься с соответствующей конечной TU для одной и той же CU. В некоторых примерах максимальный размер конечной TU может соответствовать размеру соответствующей конечной CU.
Кроме того, TU в конечных CU также могут ассоциироваться с соответствующими структурами данных квадродерева, называемыми остаточными квадродеревьями (RQT). То есть конечная CU может включать в себя квадродерево, указывающее, как конечная CU разбивается на TU. Корневой узел квадродерева TU, как правило, соответствует конечной CU, тогда как корневой узел квадродерева CU, как правило, соответствует блоку дерева (или LCU). TU в RQT, которые не разделяются, называются конечными TU. Вообще в данном описании используются термины "CU" и "TU" для обозначения листовой CU и листовой TU соответственно, пока не указано иное.
Видеопоследовательность, как правило, включает в себя последовательность видеокадров или изображений. Группа изображений (GOP), как правило, содержит последовательность из одного или более видеоизображений. GOP может включать в себя синтаксические данные в заголовке GOP, заголовке одного или более изображений или где-либо в другом месте, которые описывают количество изображений, включенных в GOP. Каждая серия последовательных макроблоков изображения может включать в себя синтаксические данные серии последовательных макроблоков, которые описывают режим кодирования для соответствующей серии последовательных макроблоков. Видеокодер 20 обычно действует на видеоблоки в отдельных сериях последовательных макроблоков видео, чтобы кодировать видеоданные. Видеоблок может соответствовать узлу кодирования в CU. Видеоблоки могут иметь фиксированные или изменяющиеся размеры и могут отличаться по размеру в соответствии с заданным стандартом кодирования.
В качестве примера HM поддерживает прогнозирование в различных размерах PU. Предполагая, что размер конкретной CU равен 2N×2N, HM поддерживает внутреннее прогнозирование в размерах PU 2N×2N или N×N и внешнее прогнозирование в симметричных размерах PU 2N×2N, 2N×N, N×2N или N×N. HM также поддерживает асимметричное разбиение для внешнего прогнозирования в размерах PU 2N×nU, 2N×nD, nL×2N и nR×2N. При асимметричном разбиении одно направление CU не разбивается, тогда как другое направление разбивается на 25% и 75%. Часть CU, соответствующая разбиению 25%, указывается с помощью "n" с последующим указанием «Сверху», «Снизу», «Слева» или «Справа». Таким образом, например, "2N×nU" означает CU 2N×2N, которая разбивается горизонтально с PU 2N×0,5N сверху и PU 2N×1.5N снизу.
В данном описании "N×N" и "N на N" могут использоваться взаимозаменяемо для обозначения размеров пикселя видеоблока с точки зрения вертикального и горизонтального размеров, например 16×16 пикселей или 16 на 16 пикселей. Обычно блок 16×16 будет иметь 16 пикселей в вертикальном направлении (y=16) и 16 пикселей в горизонтальном направлении (x=16). Также блок N×N, как правило, имеет N пикселей в вертикальном направлении и N пикселей в горизонтальном направлении, где N представляет неотрицательное целое значение. Пиксели в блоке могут располагаться в строках и столбцах. Кроме того, блокам не обязательно иметь такое же количество пикселей в горизонтальном направлении, как и в вертикальном направлении. Например, блоки могут содержать N×M пикселей, где M не обязательно равно N.
После кодирования с внутренним прогнозированием или внешним прогнозированием, использующего PU в CU, видеокодер 20 может вычислить остаточные данные для TU в CU. PU могут содержать синтаксические данные, описывающие способ или режим формирования данных пикселя с прогнозированием в пространственной области (также называемой областью пикселей), а TU могут содержать коэффициенты в области преобразования после применения преобразования, например дискретного косинусного преобразования (DCT), целочисленного преобразования, вейвлет-преобразования или концептуально сходного преобразования к остаточным видеоданным. Остаточные данные могут соответствовать разностям пикселей между пикселями некодированного изображения и значениями прогнозирования, соответствующими PU. Видеокодер 20 может образовать TU, включающие в себя остаточные данные для CU, а затем преобразовать TU для создания коэффициентов преобразования для CU.
После любых преобразований для создания коэффициентов преобразования видеокодер 20 может выполнить квантование коэффициентов преобразования. Квантование в общем относится к процессу, в котором коэффициенты преобразования квантуются, чтобы уменьшить по возможности объем данных, используемый для представления коэффициентов, обеспечивая дополнительное сжатие. Процесс квантования может уменьшить разрядную глубину, ассоциированную с некоторыми или всеми коэффициентами. Например, n-разрядное значение во время квантования можно округлить в меньшую сторону до m-разрядного значения, где n больше m.
После квантования видеокодер может сканировать коэффициенты преобразования, создавая одномерный вектор из двумерной матрицы, включающей в себя квантованные коэффициенты преобразования. Сканирование может быть предназначено для помещения коэффициентов с большей энергией (и поэтому с меньшей частотой) впереди массива и помещения коэффициентов с меньшей энергией (и поэтому большей частотой) сзади массива. В некоторых примерах видеокодер 20 может использовать предопределенный порядок сканирования, чтобы сканировать квантованные коэффициенты преобразования для создания сериализованного вектора, который можно энтропийно кодировать. В других примерах видеокодер 20 может выполнять адаптивное сканирование. После сканирования квантованных коэффициентов преобразования для образования одномерного вектора видеокодер 20 может энтропийно кодировать одномерный вектор, например, в соответствии с контекстно-адаптивным кодированием с переменной длиной (CAVLC), контекстно-адаптивным двоичным арифметическим кодированием (CABAC), синтаксическим контекстно-адаптивным двоичным арифметическим кодированием (SBAC), энтропийным кодированием с разбиением на интервалы вероятности (PIPE) или другой методологией энтропийного кодирования. Видеокодер 20 также может энтропийно кодировать синтаксические элементы, ассоциированные с кодированными видеоданными для использования видеодекодером 30 при декодировании видеоданных.
Для выполнения CABAC видеокодер 20 может назначить контекст в рамках контекстной модели символу, который будет передан. Контекст может относиться, например, к тому, являются ли соседние значения символа ненулевыми. Для выполнения CAVLC видеокодер 20 может выбрать код переменной длины для символа, который будет передан. Кодовые слова при VLC могут быть построены так, что относительно более короткие коды соответствуют более вероятным символам, тогда как более длинные коды соответствуют менее вероятным символам. Таким образом, использование VLC может добиться экономии разрядов по сравнению, например, с использованием кодовых слов равной длины для каждого символа, который будет передан. Определение вероятности может основываться на контексте, назначенном символу.
Видеокодер 20 дополнительно может отправлять видеодекодеру 30 синтаксические данные, например блочные синтаксические данные, кадровые синтаксические данные и основанные на GOP синтаксические данные, например, в заголовке кадра, заголовке блока, заголовке серии последовательных макроблоков или заголовке GOP. Синтаксические данные GOP могут описывать количество кадров в соответствующей GOP, а синтаксические данные кадра могут указывать режим кодирования/прогнозирования, используемый для кодирования соответствующего кадра.
HEVC проектируется универсальным в том смысле, что оно предназначено для обслуживания широкого диапазона приложений, скоростей передачи разрядов, разрешений, качества и услуг, например, чтобы оно было совместимым с ними. Приложения, теоретически обслуживаемые HEVC, включают в себя в том числе цифровые носители информации, телевизионное вещание и связь в реальном времени. В ходе создания HEVC рассмотрены различные требования от типичных приложений, разработаны необходимые алгоритмические элементы, и все это объединено в единый синтаксис. Поэтому HEVC должно упростить обмен видеоданными между разными приложениями. Однако, принимая во внимание практичность реализации полного синтаксиса HEVC, ограниченное количество поднаборов синтаксиса также устанавливается посредством «профилей» и «уровней».
«Профиль» задается в качестве поднабора всего синтаксиса битового потока, который задается посредством HEVC. В границах, установленных синтаксисом заданного профиля, все же можно требовать очень большого разброса в производительности кодеров и декодеров в зависимости от значений, принимаемых синтаксическими элементами в битовом потоке, например, заданного размера декодированных изображений. Во многих приложениях в настоящее время не практично и не экономно реализовывать декодер, допускающий работу со всеми гипотетическими использованиями синтаксиса в конкретном профиле.
Чтобы справиться с этой проблемой, в рамках каждого профиля можно задать «классы» и «уровни». Уровень класса является заданным набором ограничений, наложенных на значения синтаксических элементов в битовом потоке. Эти ограничения могут быть простыми пределами значений. В качестве альтернативы они могут принимать вид ограничений арифметических сочетаний значений (например, ширина изображения, умноженная на высоту изображения, умноженная на количество изображений, декодированных в секунду). Уровень, заданный для более низкого класса, является более ограниченным, нежели уровень, заданный для более высокого класса. Один и тот же набор уровней задается для всех профилей, причем большинство аспектов определения каждого уровня является общим для разных профилей. Отдельные реализации в рамках заданных ограничений могут поддерживать разный уровень для каждого поддерживаемого профиля. В другом контексте уровень является значением коэффициента преобразования перед масштабированием. Профили и уровни подробнее описываются в Приложении A к Рабочему варианту 8 (WD8) Высокоэффективного кодирования видео (HEVC).
Кодированный видеоконтент, соответствующий WD8 HEVC, использует общий синтаксис. Чтобы получить поднабор полного синтаксиса, в битовый поток включены флаги, параметры и другие синтаксические элементы, которые сигнализируют наличие или отсутствие синтаксических элементов, которые возникают позже в битовом потоке.
WD8 HEVC задает подслой в качестве временного масштабируемого слоя во временном масштабируемом битовом потоке, состоящего из единиц слоя абстракции сети (NAL) на слое видеокодирования (VCL) с конкретным значением переменной TemporalId и ассоциированных единиц NAL не на VCL. WD8 HEVC дополнительно задает представление подслоя в качестве поднабора битового потока, состоящего из единиц NAL конкретного подслоя и более низких подслоев.
Подпункт 10.1 в HEVC 8 описывает поднаборы битового потока и процесс извлечения для формирования битовых субпотоков. Подпункт 10.1 приведен ниже.
10.1 Процесс извлечения битовых субпотоков
Требованием соответствия битового потока является то, что любой битовый субпоток, который включен в результат заданного в этом подпункте процесса, при tIdTarget, равном любому значению в диапазоне от 0 до 6 включительно, и при targetDecLayerIdSet, содержащем значение 0, должен соответствовать этой Рекомендации Международному стандарту.
ПРИМЕЧАНИЕ - Соответствующий битовый поток содержит одну или более единиц NAL кодированной серии последовательных макроблоков с равным 0 nuh_reserved_zero_6bits и равным 0 TemporalId.
Входами в этот процесс являются переменная tIdTarget и список targetDecLayerIdSet.
Результатом этого процесса является битовый субпоток.
Битовый субпоток выводится путем удаления из битового потока всех единиц NAL с TemporalId больше tIdTarget или с nuh_reserved_zero_6bits, не входящим в значения в targetDecLayerIdSet.
Вообще WD8 HEVC описывает извлечение битовых субпотоков из битового потока на основании значений идентификаторов слоев и идентификаторов временных подслоев, которые идентифицируют рабочую точку битового потока.
Рабочая точка идентифицируется, как правило, набором значений nuh_reserved_zero_6bits, обозначенным как OpLayerIdSet, и значением TemporalId, обозначенным как OpTid, и ассоциированный поднабор битового потока, выведенный в качестве результата процесса извлечения битовых субпотоков, который задан в подпункте 10.1 в WD8 HEVC, с OpTid и OpLayerIdSet в качестве входов, является независимо декодируемым. Простой режим рабочей точки в общем рассматривается как режим рабочей точки, в котором для каждой рабочей точки OpLayerIdSet включает в себя и только включает в себя конкретное значение nuh_reserved_zero_6bits и все другие значения nuh_reserved_zero_6bits меньше того конкретного значения nuh_reserved_zero_6bits.
Таблица 1 ниже показывает пример синтаксиса и семантики полезной нагрузки необработанной последовательности байтов (RBSP).
Синтаксический элемент "vps_simple_op_mode_flag[i]", установленный равным 1, задает, что используется простой режим рабочей точки для i-ой синтаксической структуры operation_point_layer_ids(). Синтаксический элемент "vps_simple_op_mode_flag[i]", равный 0, задает, что простой режим рабочей точки не используется для i-ой синтаксической структуры operation_point().
Любые два экземпляра синтаксической структуры hrd_parameters(i, vps_max_sub_layers_minus1) и hrd_parameters(j, vps_max_sub_layers_minus1), где i не равно j, могут не иметь одинакового содержимого.
Таблица 2 ниже показывает пример синтаксиса и семантики профиля, класса и уровня.
Синтаксический элемент "sub_layer_profile_present_flag[i ]", установленный равным 1, когда ProfilePresentFlag равен 1, задает, что информация о профиле присутствует в синтаксической структуре profile_tier_level() для представления подслоя с TemporalId, равным i. Равный 0 sub_layer_profile_present_flag[i] задает, что информация о профиле отсутствует в синтаксической структуре profile_tier_level() для представлений подслоя с TemporalId, равным i. Когда отсутствует, значение sub_layer_profile_present_flag[i] подразумевается равным 0.
Синтаксический элемент "sub_layer_level_present_flag[i]", установленный равным 1, задает, что информация об уровне присутствует в синтаксической структуре profile_tier_level() для представления подслоя с TemporalId, равным i. Равный 0 sub_layer_level_present_flag[i] задает, что информация об уровне отсутствует в синтаксической структуре profile_tier_level() для представления подслоя с TemporalId, равным i.
Синтаксические элементы "sub_layer_profile_idc[i]" и "sub_layer_level_idc[i]" имеют такую же семантику, как и general_profile_idc и general_level_idc соответственно, но применяются к представлению подслоя с TemporalId, равным i.
Таблица 3 ниже показывает пример синтаксиса и семантики рабочих точек.
Синтаксическая структура operation_point( opIdx ) задает набор значений nuh_reserved_zero_6bits, включенных в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео.
Синтаксический элемент "op_first_present_layer_id[ opIdx ]", когда vps_simple_op_mode_flag[opIdx] устанавливается равным 0, задает первое (то есть 0-е) значение nuh_reserved_zero_6bits, включенного в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. Когда vps_simple_op_mode_flag[opIdx] равен 1, op_first_present_layer_id[opIdx] задает наибольшее значение nuh_reserved_zero_6bits, включенного в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters( ) в наборе параметров видео.
Синтаксический элемент "op_num_layer_id_values_minus1[opIdx]" плюс 1, когда vps_simple_op_mode_flag[ opIdx ] равен 0, задает количество значений nuh_reserved_zero_6bits, включенных в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. op_num_layer_id_values_minus1[ opIdx ] меньше либо равно 63.
Синтаксический элемент "op_layer_id_delta_minus1[opIdx][i]" плюс 1, когда vps_simple_op_mode_flag[ opIdx ] равен 0, задает разницу между i-ым значением nuh_reserved_zero_6bits и (i−1)-ым значением nuh_reserved_zero_6bits, включенными в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. Значение op_layer_id_delta_minus1[opIdx][i] находится в диапазоне от 0 до 63 включительно.
Переменная NumOpLayerIdsMinus1[ opIdx ] выводится следующим образом.
if(vps_simple_op_mode_flag[opIdx])
NumOpLayerIdsMinus1[opIdx]=op_first_present_layer_id[opIdx]
else
NumOpLayerIdsMinus1[opIdx]=op_num_layer_id_values_minus1[opIdx]
NumOpLayerIdsMinus1[0] подразумевается равной 0.
Переменные OpLayerId[opIdx][i] для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно выводятся следующим образом.
OpLayerId[opIdx][0]=vps_simple_op_mode_flag[opIdx]?0:op_first_present_layer_id[opIdx]
for(i=1; i<=NumOpLayerIdsMinus1[ opIdx ]; i++)
if(vps_simple_op_mode_flag[opIdx])
OpLayerId[opIdx][i]=i
else
OpLayerId[opIdx][i]=OpLayerId[opIdx][i−1]+op_layer_id_delta_minus1[opIdx][i]+1
Значение OpLayerId[0][0] подразумевается равным 0.
Никакое значение OpLayerId[opIdx][i] не равно OpLayerId[opIdx][j], когда i не равно j, и i и j находятся в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно.
Никакие два набора OpLayerId[opIdx1] и OpLayerId[opIdx2], где opIdx1 не равно opIdx2, не включают в себя одинаковые наборы значений nuh_reserved_zero_6bits.
OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео, устанавливается включающим в себя и только включающим в себя значения nuh_reserved_zero_6bits, равные OpLayerId[ opIdx ][i], для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно.
Альтернативные синтаксис и семантика рабочих точек описываются в Таблице 4 и ниже.
Синтаксическая структура operation_point(opIdx) задает набор значений nuh_reserved_zero_6bits, включенных в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters( ) в наборе параметров видео.
Синтаксический элемент "op_num_layer_id_values_minus1[opIdx]" плюс 1 задает количество значений nuh_reserved_zero_6bits, включенных в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. op_num_layer_id_values_minus1[opIdx] меньше либо равно 63. Когда отсутствует, значение op_num_layer_id_values_minus1[opIdx] подразумевается равным 0.
В битовых потоках, соответствующих настоящему изобретению, op_num_layer_id_values_minus1[opIdx] равен 0. Хотя в этой версии Описания изобретения необходимо, чтобы значение op_num_layer_id_values_minus1[opIdx] было равно 0, декодеры позволяют появляться и другим значениям в синтаксисе op_num_layer_id_values_minus1[opIdx].
Синтаксический элемент "op_layer_id[opIdx][i]" задает i-ое значение nuh_reserved_zero_6bits, включенного в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео.
Переменная NumOpLayerIdsMinus1[opIdx] выводится следующим образом.
if(vps_simple_op_mode_flag[opIdx])
NumOpLayerIdsMinus1[opIdx]=op_layer_id[opIdx][0]
else
NumOpLayerIdsMinus1[opIdx]=op_num_layer_id_values_minus1[opIdx]
NumOpLayerIdsMinus1[0] подразумевается равной 0.
Переменные OpLayerId[opIdx][i] для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно выводятся следующим образом.
for(i=0; i<=NumOpLayerIdsMinus1[opIdx ]; i++)
OpLayerId[opIdx][i]=vps_simple_op_mode_flag[opIdx]?i:op_layer_id[opIdx][i]
Значение OpLayerId[0][0] подразумевается равным 0.
Никакое значение OpLayerId[opIdx][i] не равно OpLayerId[opIdx][j], когда i не равно j, и i и j находятся в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно.
Никакие два набора OpLayerId[opIdx1] и OpLayerId[opIdx2], где opIdx1 не равно opIdx2, не включают в себя одинаковые наборы значений nuh_reserved_zero_6bits.
OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео, устанавливается включающим в себя и только включающим в себя значения nuh_reserved_zero_6bits, равные OpLayerId[opIdx ][i], для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно.
JCTVC-K0204 (который включен в настоящий документ путем ссылки и доступен по адресу http://phenix.int-evry.fr/jct/doc_end_user/documents/11_Shanghai/wg11/JCTVC-K0204-v1.zip) обеспечил переработанную сигнализацию рабочей точки, которая описана нижеследующими синтаксисом и семантикой:
Синтаксический элемент "layer_present_in_op_flag[opIdx][i]", установленный равным 1, задает, что слой i присутствует в рабочей точке opIdx, а равным 0 задает, что слой i отсутствует в рабочей точке opIdx.
Существующие способы для сигнализации рабочих точек могут обладать некоторыми возможными недостатками. Например, существующие способы для сигнализации рабочих точек могут либо иметь энтропийно кодированные синтаксические элементы, использующие кодирование ue(v), которое задано в WD8 HEVC, либо не поддерживают сигнализацию значений nuh_reserved_zero_6bits (то есть ID слоев) больше max_num_layers_minus1, которое сигнализируется в наборе параметров видео (VPS).
N
Данное изобретение предлагает различные методики, которые теоретически могут решить некоторые из этих возможных недостатков. В одной такой методике сначала сигнализируется наибольшее значение nuh_reserved_zero_6bits (то есть наибольшее значение ID слоя) с последующим списком флагов, причем каждый задает, включен ли слой с конкретным значением ID слоя меньше наибольшего значения ID слоя в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. В другой методике сигнализируется список из M флагов, причем каждый задает, включен ли слой с конкретным возможным значением ID слоя в OpLayerIdSet рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. Значение M равно общему количеству возможных разных ID слоев в любых битовых потоках. Например, M может быть равно 2, где N - количество разрядов, используемых для представления nuh_reserved_zero_6bits (то есть ID слоя). В еще одной методике сигнализируется наибольшее значение nuh_reserved_zero_6bits (то есть наибольшее значение ID слоя). Если не используется простой режим рабочей точки, то сигнализируется список флагов, причем каждый задает, включен ли слой с конкретным значением ID слоя меньше наибольшего значения ID слоя в OpLayerIdSet рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters( ) в наборе параметров видео.
Теперь будут описаны некоторые подробные примеры вышеупомянутых методик. Описанные ниже примеры в общем соответствуют WD8 HEVC, а поэтому аспекты, не полностью описанные ниже, можно предполагать такими же, как в WD8 HEVC.
Синтаксис и семантика рабочих точек для первого примера показаны в Таблице 6 ниже.
Синтаксическая структура operation_point(opIdx) задает набор значений nuh_reserved_zero_6bits, включенных в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео.
Синтаксический элемент "op_max_layer_id[opIdx]" задает наибольшее значение nuh_reserved_zero_6bits, включенного в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. Хотя Таблица 6 показывает синтаксический элемент "op_max_layer_id[opIdx]", сигнализируемый для каждой рабочей точки, он также может сигнализироваться где-либо в другом месте в кодированном битовом потоке, например в наборе параметров последовательности или VPS.
Синтаксический элемент "op_layer_id_incuded_flag[opIdx][i]", установленный равным 0, задает, что значение nuh_reserved_zero_6bits, равного i, не включено в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. op_layer_id_incuded_flag[ opIdx ][ i ], равный 1, задает, что значение nuh_reserved_zero_6bits, равного i, включено в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. Сумма всех op_layer_id_incuded_flag[opIdx][i] для i от 0 до op_max_layer_id[opIdx]−1 включительно меньше либо равна max_num_layers_minus1.
Переменная NumOpLayerIdsMinus1[opIdx] и переменные OpLayerId[opIdx][i] для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно выводятся следующим образом.
for(i=0, j=0; i<op_max_layer_id[opIdx]; i++)
if( op_layer_id_incuded_flag[opIdx][i])
OpLayerId[opIdx][j++]=i
OpLayerId[opIdx][j]=op_max_layer_id[opIdx]
NumOpLayerIdsMinus1[opIdx]=j
NumOpLayerIdsMinus1[0] подразумевается равной 0. Значение OpLayerId[0][0] подразумевается равным 0.
Никакие два набора OpLayerId[opIdx1] и OpLayerId[ opIdx2], где opIdx1 не равно opIdx2, не включают в себя одинаковый набор значений nuh_reserved_zero_6bits.
OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео, устанавливается включающим в себя и только включающим в себя значения nuh_reserved_zero_6bits, равные OpLayerId[opIdx][i], для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно.
Обращаясь к вышеприведенному примеру, предположим, что битовый поток включает в себя шесть субпотоков с различными временными и пространственными разрешениями, при этом каждый субпоток имеет ID слоя. Для рабочей точки, идентифицированной с помощью opIdx, наибольшее значение ID слоя можно сигнализировать в битовом потоке в качестве значения синтаксического элемента "op_max_layer_id[opIdx]". Для этого примера предположим, что наибольшее значение ID слоя равно 9, так что op_max_layer_id[opIdx] равен 9. Оставшиеся значения ID слоев можно сигнализировать с использованием девяти флагов, где первый флаг указывает, присутствует ли значение ID слоя 0, второй флаг указывает, присутствует ли значение ID слоя 1, и так далее. Таким образом, чтобы сигнализировать значения ID слоев 2, 5 и 10, можно сначала сигнализировать значение 10 с последующими последовательностями флагов 001001000, где 1 для третьего разряда указывает, что присутствует значение ID слоя 2, а 1 для шестого разряда указывает, что присутствует значение ID слоя 5. С использованием синтаксиса из Таблицы 6 последовательности флагов 001001000 получаются следующим образом. Для i=0 значение флага для op_layer_id_included_flag[opIdx][i] равно 0. Для i=1 значение флага для op_layer_id_included_flag[opIdx][i] равно 0. Для i=3 значение флага для op_layer_id_included_flag[opIdx][i] равно 0. Для i=4 значение флага для op_layer_id_included_flag[opIdx][i] равно 0. Для i=5 значение флага для op_layer_id_included_flag[opIdx][i] равно 1. Для i=6 значение флага для op_layer_id_included_flag[opIdx][i] равно 0. Для i=7 значение флага для op_layer_id_included_flag[opIdx][i] равно 0. Для i=8 значение флага для op_layer_id_included_flag[opIdx][i] равно 0. Для i=9 значение i не меньше op_max_layer_id[opIdx], которое также равно 9. Поэтому видеодекодер может определить, что был принят последний флаг.
Синтаксис и семантика рабочих точек для вторых примерных методик показаны в Таблице 7 ниже.
Синтаксическая структура operation_point(opIdx) задает набор значений nuh_reserved_zero_6bits, включенных в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео.
Синтаксический элемент "op_layer_id_incuded_flag[opIdx][i]", установленный равным 0, задает, что значение nuh_reserved_zero_6bits, равного i, не включено в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. op_layer_id_incuded_flag[opIdx][i], равный 1, задает, что значение nuh_reserved_zero_6bits, равного i, включено в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. Сумма всех op_layer_id_incuded_flag[opIdx][i] для i от 0 до 63 включительно меньше либо равна max_num_layers_minus1.
Переменная NumOpLayerIdsMinus1[opIdx] и переменные OpLayerId[opIdx][i] для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно выводятся следующим образом.
for(i=0, j=0; i<64; i++)
if(op_layer_id_incuded_flag[opIdx][i])
OpLayerId[ opIdx][j++]=i
NumOpLayerIdsMinus1[opIdx]=j
NumOpLayerIdsMinus1[0] подразумевается равной 0. Значение OpLayerId[ 0 ][ 0 ] подразумевается равным 0.
Никакие два набора OpLayerId[ opIdx1 ] и OpLayerId[opIdx2], где opIdx1 не равно opIdx2, не включают в себя одинаковый набор значений nuh_reserved_zero_6bits.
OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео, устанавливается включающим в себя и только включающим в себя значения nuh_reserved_zero_6bits, равные OpLayerId[opIdx][i], для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно.
Синтаксис и семантика рабочих точек для третьего примера показаны в Таблице 8 ниже. В этом примере также изменяются синтаксис и семантика VPS, как показано в Таблице 8 и как описано ниже.
Синтаксический элемент "vps_simple_op_mode_flag[i]", установленный равным 1, задает, что используется простой режим рабочей точки для i-ой синтаксической структуры operation_point(). vps_simple_op_mode_flag[i], равный 0, задает, что простой режим рабочей точки не используется для i-ой синтаксической структуры operation_point().
Любые два экземпляра синтаксической структуры hrd_parameters(i, vps_max_sub_layers_minus1) и hrd_parameters(j, vps_max_sub_layers_minus1), где i не равно j, не имеют одинакового содержимого.
Показанная в Таблице 9 синтаксическая структура operation_point(opIdx) задает набор значений nuh_reserved_zero_6bits, включенных в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео.
Синтаксический элемент "op_max_layer_id[opIdx]" задает наибольшее значение nuh_reserved_zero_6bits, включенного в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео.
Синтаксический элемент "op_layer_id_incuded_flag[opIdx][i]", установленный равным 0, когда vps_simple_op_mode_flag[opIdx] равен 0, задает, что значение nuh_reserved_zero_6bits, равного i, не включено в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. op_layer_id_incuded_flag[opIdx][i], равный 1, когда vps_simple_op_mode_flag[opIdx] равен 0, задает, что значение nuh_reserved_zero_6bits, равного i, включено в OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео. Сумма всех op_layer_id_incuded_flag[opIdx][i] для i от 0 до op_max_layer_id[opIdx]−1 включительно меньше либо равна max_num_layers_minus1.
Переменная NumOpLayerIdsMinus1[opIdx] и переменные OpLayerId[ opIdx ][i] для i в диапазоне от 0 до NumOpLayerIdsMinus1[ opIdx ] включительно выводятся следующим образом.
if(vps_simple_op_mode_flag[opIdx]){
for(i=0; i<=op_max_layer_id[opIdx ]; i++)
OpLayerId[opIdx][i]=i
NumOpLayerIdsMinus1[opIdx]=op_max_layer_id[opIdx]
} else {
for(i=0, j=0; i<op_max_layer_id[opIdx]; i++)
if(op_layer_id_incuded_flag[opIdx][i])
OpLayerId[opIdx][j++]=i
OpLayerId[opIdx][j]=max_layer_id[opIdx]
NumOpLayerIdsMinus1[opIdx]=j
}
NumOpLayerIdsMinus1[ 0 ] подразумевается равной 0. Значение OpLayerId[0][0] подразумевается равным 0.
Никакие два набора OpLayerId[opIdx1] и OpLayerId[ opIdx2], где opIdx1 не равно opIdx2, не включают в себя одинаковый набор значений nuh_reserved_zero_6bits.
OpLayerIdSet у рабочих точек, к которым применяется opIdx-ая синтаксическая структура hrd_parameters() в наборе параметров видео, устанавливается включающим в себя и только включающим в себя значения nuh_reserved_zero_6bits, равные OpLayerId[opIdx][i], для i в диапазоне от 0 до NumOpLayerIdsMinus1[opIdx] включительно.
Фиг. 2 - блок-схема, иллюстрирующая пример видеокодера 20, который может реализовать методики, описанные в данном описании. Видеокодер 20 может выполнять внутреннее и внешнее кодирование видеоблоков в сериях последовательных макроблоков видео. Внутреннее кодирование использует пространственное прогнозирование, чтобы уменьшить или устранить пространственную избыточность в видео в данном видеокадре или изображении. Внешнее кодирование опирается на временное прогнозирование, чтобы уменьшить или устранить временную избыточность в видео в соседних кадрах или изображениях видеопоследовательности. Внутренний режим (I-режим) может относиться к любому из нескольких режимов пространственного кодирования. Внешние режимы, например однонаправленное прогнозирование (P-режим) или двунаправленное прогнозирование (B-режим), могут относиться к любому из нескольких режимов временного кодирования.
Как показано на фиг. 2, видеокодер 20 принимает текущий видеоблок в видеокадре, который будет кодироваться. В примере из фиг. 2 видеокодер 20 включает в себя модуль 40 выбора режима, запоминающее устройство 64 эталонных кадров, сумматор 50, модуль 52 обработки с преобразованием, модуль 54 квантования и модуль 56 энтропийного кодирования. Модуль 40 выбора режима в свою очередь включает в себя модуль 44 компенсации движения, модуль 42 оценки движения, модуль 46 обработки с внутренним прогнозированием и модуль 48 разбиения. Для восстановления видеоблока видеокодер 20 также включает в себя модуль 58 обратного квантования, модуль 60 обработки с обратным преобразованием и сумматор 62. Также может включаться антиблоковый фильтр для фильтрации границ блока, чтобы удалить артефакты блочности из восстановленного видео. При необходимости антиблоковый фильтр обычно фильтрует вывод сумматора 62. Также могут использоваться дополнительные фильтры (в цикле или после цикла) в дополнение к антиблоковому фильтру. Такие фильтры для краткости не показаны, но при необходимости могут фильтровать вывод сумматора 50 (в качестве фильтра в цикле).
Во время процесса кодирования видеокодер 20 принимает видеокадр или серию последовательных макроблоков, которые будут кодироваться. Кадр или серию последовательных макроблоков можно разделить на несколько видеоблоков. Модуль 42 оценки движения и модуль 44 компенсации движения выполняют кодирование с внешним прогнозированием принятого видеоблока относительно одного или более блоков в одном или более эталонных кадрах, чтобы обеспечить временное прогнозирование. Модуль 46 обработки с внутренним прогнозированием в качестве альтернативы может выполнять кодирование с внутренним прогнозированием принятого видеоблока относительно одного или более соседних блоков в том же кадре или серии последовательных макроблоков в качестве блока, который будет кодироваться, чтобы обеспечить пространственное прогнозирование. Видеокодер 20 может выполнять несколько проходов кодирования, например, для выбора подходящего режима кодирования для каждого блока видеоданных.
Кроме того, модуль 48 разбиения может разбить блоки видеоданных на субблоки на основании оценки предыдущих схем разбиения в предыдущих проходах кодирования. Например, модуль 48 разбиения может сначала разбить кадр или серию последовательных макроблоков на LCU, и разбить каждую из LCU на суб-CU на основании анализа искажения в зависимости от скорости передачи (например, оптимизации искажения в зависимости от скорости передачи). Модуль 40 выбора режима дополнительно может создать структуру данных квадродерева, указывающую разбиение LCU на суб-CU. CU листа в квадродереве могут включать в себя одну или более PU и одну или более TU.
Модуль 40 выбора режима может выбрать один из режимов кодирования, внутренний или внешний, например, на основании ошибочных результатов и обеспечивает результирующий блок с внутренним или внешним кодированием сумматору 50, чтобы сформировать данные остаточного блока, и сумматору 62, чтобы восстановить кодированный блок для использования в качестве эталонного кадра. Модуль 40 выбора режима также обеспечивает синтаксические элементы, например векторы движения, индикаторы внутреннего режима, информацию о разбиении и другую такую синтаксическую информацию, модулю 56 энтропийного кодирования.
Модуль 42 оценки движения и модуль 44 компенсации движения могут быть существенно объединены, но иллюстрируются отдельно с концептуальной целью. Оценка движения, выполняемая модулем 42 оценки движения, является процессом формирования векторов движения, которые оценивают движение для видеоблоков. Вектор движения может указывать, например, смещение PU видеоблока в текущем видеокадре или изображении относительно блока с прогнозированием в эталонном кадре (или другой кодированной единице) относительно текущего блока, кодируемого в текущем кадре (или другой кодированной единице). Блок с прогнозированием является блоком, который признан точно совпадающим с блоком, который будет кодироваться, в показателях разности пикселей, которая может определяться с помощью суммы абсолютных разностей (SAD), суммы квадратов разностей (SSD) или других показателей разности. В некоторых примерах видеокодер 20 может вычислять значения для положений субцелого пикселя в эталонных изображениях, сохраненных в запоминающем устройстве 64 эталонных кадров. Например, видеокодер 20 может интерполировать значения положений одной четверти пикселя, положений одной восьмой пикселя или других положений дробного пикселя в эталонном изображении. Поэтому модуль 42 оценки движения может выполнить поиск движения относительно положений полного пикселя и положений дробного пикселя и вывести вектор движения с точностью до дробного пикселя.
Модуль 42 оценки движения вычисляет вектор движения для PU видеоблока в серии последовательных макроблоков с внешним кодированием путем сравнения положения PU с положением блока с прогнозированием в эталонном изображении. Эталонное изображение может выбираться из первого списка эталонных изображений (Список 0) или второго списка эталонных изображений (Список 1), каждый из которых идентифицирует одно или более эталонных изображений, сохраненных в запоминающем устройстве 64 эталонных кадров. Модуль 42 оценки движения отправляет вычисленный вектор движения модулю 56 энтропийного кодирования и модулю 44 компенсации движения.
Компенсация движения, выполняемая модулем 44 компенсации движения, может включать в себя выборку или формирование блока с прогнозированием на основании вектора движения, определенного модулем 42 оценки движения. Снова в некоторых примерах модуль 42 оценки движения и модуль 44 компенсации движения могут быть объединены функционально. После приема вектора движения для PU текущего видеоблока модуль 44 компенсации движения может найти блок с прогнозированием, на который указывает вектор движения, в одном из списков эталонных изображений. Сумматор 50 образует остаточный видеоблок путем вычитания значений пикселей блока с прогнозированием из значений пикселей текущего кодируемого видеоблока, образуя значения разности пикселей, которые обсуждаются ниже. Обычно модуль 42 оценки движения выполняет оценку движения относительно компонентов яркости, а модуль 44 компенсации движения использует векторы движения, вычисленные на основании компонентов яркости, для компонентов цветности и компонентов яркости. Модуль 40 выбора режима также может формировать синтаксические элементы, ассоциированные с видеоблоками и серией последовательных макроблоков видео, для использования видеодекодером 30 при декодировании видеоблоков в серии последовательных макроблоков видео.
Модуль 46 обработки с внутренним прогнозированием может внутренне прогнозировать текущий блок в качестве альтернативы внешнему прогнозированию, выполняемому модулем 42 оценки движения и модулем 44 компенсации движения, как описано выше. В частности, модуль 46 обработки с внутренним прогнозированием может определить режим внутреннего прогнозирования, чтобы использовать его для кодирования текущего блока. В некоторых примерах модуль 46 обработки с внутренним прогнозированием может кодировать текущий блок с использованием различных режимов внутреннего прогнозирования, например, во время отдельных проходов кодирования, а модуль 46 обработки с внутренним прогнозированием (или модуль 40 выбора режима в некоторых примерах) может выбирать подходящий режим внутреннего прогнозирования для использования из проверенных режимов.
Например, модуль 46 обработки с внутренним прогнозированием может вычислить значения искажения в зависимости от скорости передачи, используя анализ искажения в зависимости от скорости передачи для различных проверенных режимов внутреннего прогнозирования, и выбрать режим внутреннего прогнозирования, имеющий наилучшие характеристики искажения в зависимости от скорости передачи среди проверенных режимов. Анализ искажения в зависимости от скорости передачи, как правило, определяет величину искажения (или ошибки) между кодированным блоком и исходным, некодированным блоком, который кодировался для создания кодированного блока, а также скорость передачи разрядов (то есть количество разрядов), используемую для создания кодированного блока. Модуль 46 обработки с внутренним прогнозированием может вычислить отношения из искажений и скоростей для различных кодированных блоков, чтобы определить, какой режим внутреннего прогнозирования демонстрирует наилучшее значение искажения в зависимости от скорости передачи для блока.
После выбора режима внутреннего прогнозирования для блока модуль 46 обработки с внутренним прогнозированием может обеспечить модулю 56 энтропийного кодирования информацию, указывающую выбранный режим внутреннего прогнозирования для блока. Модуль 56 энтропийного кодирования может кодировать информацию, указывающую выбранный режим внутреннего прогнозирования. Видеокодер 20 может включить в передаваемый битовый поток конфигурационные данные, которые могут включать в себя множество таблиц индексов режимов внутреннего прогнозирования и множество таблиц индексов измененных режимов внутреннего прогнозирования (также называемых таблицами отображения кодовых слов), определения контекстов кодирования для различных блоков и указания наиболее вероятного режима внутреннего прогнозирования, таблицы индексов режимов внутреннего прогнозирования и таблицы индексов измененных режимов внутреннего прогнозирования для использования для каждого из контекстов.
Видеокодер 20 образует остаточный видеоблок путем вычитания данных прогнозирования от модуля 40 выбора режима из исходного кодируемого видеоблока. Сумматор 50 представляет собой компонент или компоненты, которые выполняют эту операцию вычитания. Модуль 52 обработки с преобразованием применяет к остаточному блоку преобразование, например дискретное косинусное преобразование (DCT) или концептуально сходное преобразование, создавая видеоблок, содержащий значения остаточных коэффициентов преобразования. Модуль 52 обработки с преобразованием может выполнять и другие преобразования, которые концептуально сходны с DCT. Также могли бы использоваться вейвлет-преобразования, целочисленные преобразования, преобразования поддиапазонов или другие типы преобразований. В любом случае модуль 52 обработки с преобразованием применяет преобразование к остаточному блоку, создавая блок остаточных коэффициентов преобразования. Преобразование может преобразовывать остаточную информацию из области значений пикселей в область преобразования, например частотную область. Модуль 52 обработки с преобразованием может отправить результирующие коэффициенты преобразования модулю 54 квантования.
Модуль 54 квантования квантует коэффициенты преобразования для дополнительного уменьшения скорости передачи разрядов. Процесс квантования может уменьшить разрядную глубину, ассоциированную с некоторыми или всеми коэффициентами. Степень квантования можно изменять путем регулирования параметра квантования. В некоторых примерах модуль 54 квантования затем может выполнить сканирование матрицы, включающей в себя квантованные коэффициенты преобразования. В качестве альтернативы сканирование может выполнить модуль 56 энтропийного кодирования.
После квантования модуль 56 энтропийного кодирования энтропийно кодирует квантованные коэффициенты преобразования. Например, модуль 56 энтропийного кодирования может выполнять контекстно-адаптивное кодирование с переменной длиной (CAVLC), контекстно-адаптивное двоичное арифметическое кодирование (CABAC), синтаксическое контекстно-адаптивное двоичное арифметическое кодирование (SBAC), энтропийное кодирование с разбиением на интервалы вероятности (PIPE) или другую методику энтропийного кодирования. В случае контекстного энтропийного кодирования контекст может основываться на соседних блоках. После энтропийного кодирования с помощью модуля 56 энтропийного кодирования кодированный битовый поток может передаваться другому устройству (например, видеодекодеру 30) или архивироваться для последующей передачи или извлечения.
Модуль 58 обратного квантования и модуль 60 обработки с обратным преобразованием применяют обратное квантование и обратное преобразование соответственно, чтобы восстановить остаточный блок в области пикселей, например, для последующего использования в качестве эталонного блока. Модуль 44 компенсации движения может вычислить эталонный блок путем добавления остаточного блока к блоку с прогнозированием в одном из кадров в запоминающем устройстве 64 эталонных кадров. Модуль 44 компенсации движения также может применить один или более интерполирующих фильтров к восстановленному остаточному блоку, чтобы вычислить значения субцелых пикселей для использования при оценке движения. Сумматор 62 добавляет восстановленный остаточный блок к блоку прогнозирования с компенсированным движением, созданному модулем 44 компенсации движения, чтобы создать восстановленный видеоблок для сохранения в запоминающем устройстве 64 эталонных кадров. Восстановленный видеоблок может использоваться модулем 42 оценки движения и модулем 44 компенсации движения в качестве эталонного блока, чтобы внешне кодировать блок в последующем видеокадре.
Фиг. 3 - блок-схема, иллюстрирующая примерный видеодекодер 30, который может реализовать методики, описанные в данном описании. В примере из фиг. 3 видеодекодер 30 включает в себя модуль 70 энтропийного декодирования, модуль 72 компенсации движения, модуль 74 обработки с внутренним прогнозированием, модуль 76 обратного квантования, модуль 78 обработки с обратным преобразованием, запоминающее устройство 82 эталонных кадров и сумматор 80. Видеодекодер 30 в некоторых примерах может выполнять проход декодирования, в общем обратный по отношению к проходу кодирования, описанному по отношению к видеокодеру 20, который показан на фиг. 2.
Во время процесса декодирования видеодекодер 30 принимает от видеокодера 20 битовый поток кодированного видео, который представляет собой видеоблоки кодированной серии последовательных макроблоков видео и ассоциированные синтаксические элементы. Видеодекодер 30 может принимать битовый поток кодированного видео от сетевого объекта 29. Сетевой объект 29 может быть, например, сервером, информированным о среде сетевым элементом (MANE), пультом видеомонтажа или другим таким устройством, выполненным с возможностью реализации одной или более описанных выше методик. Сетевой объект 29 может включать в себя внешнее средство, выполненное с возможностью выполнения методик настоящего изобретения. Как описано выше, некоторые из методик, описанных в данном описании, можно реализовать с помощью сетевого объекта 29 перед тем, как сетевой объект 29 передает видеодекодеру 30 битовый поток кодированного видео. В некоторых системах декодирования видео сетевой объект 29 и видеодекодер 30 могут быть частями отдельных устройств, тогда как в иных случаях функциональные возможности, описанные по отношению к сетевому объекту 29, могут выполняться тем же устройством, что содержит видеодекодер 30.
В одном примере сетевой объект 29 может хранить или принимать исходный битовый поток видеоданных, который является масштабируемым и/или включает в себя несколько слоев либо видов. В исходном битовом потоке набор параметров, например VPS, может включать в себя рассмотренный выше синтаксис рабочих точек. Синтаксис рабочих точек может использоваться сетевым объектом 29 для идентификации того, какие слои присутствуют в рабочей точке. В исходном битовом потоке сетевой объект 29 может выбрать одну из нескольких рабочих точек (то есть битовых субпотоков) на основании синтаксиса рабочих точек, включенного в VPS, и на основании того, что желательно для видеодекодера 30 или что им запрашивалось. Для битового субпотока, соответствующего выбранной рабочей точке, сетевой объект 29 может перенаправить видеодекодеру 30 единицы NAL на VCL и единицы NAL не на VCL, которые содержат тот битовый поток, но не перенаправить другие единицы NAL.
Для конкретной рабочей точки, идентифицированной в VPS, сетевой объект 29 может принять указание максимального значения ID слоя для битового потока и принять последовательность флагов для слоев со значением ID слоя меньше максимального значения ID слоя. На основании значений тех флагов сетевой объект 29 может определить, какие слои включаются в рабочую точку. Например, если значением максимального ID слоя является M, то слой M включен в рабочую точку. Для слоя M-1 сетевой объект 29 принимает флаг, где первое значение (например, 1 или 0) флага указывает, что слой M-1 включен в рабочую точку, а второе значение (например, 0 или 1) флага указывает, что слой M-1 не включен в рабочую точку. Для слоя M-2 сетевой объект 29 принимает второй флаг, где первое значение (например, 1 или 0) второго флага указывает, что слой M-2 включен в рабочую точку, а второе значение (например, 0 или 1) второго флага указывает, что слой M-2 не включен в рабочую точку. Сетевой объект 29 также может принять флаги для всех оставшихся слоев вплоть до слоя 0. Таким образом, если значением максимального ID слоя является M, то сетевой объект 29 может принимать флаги для всех слоев от 0 до M-1.
Модуль 70 энтропийного декодирования в видеодекодере 30 энтропийно декодирует битовый поток, обеспеченный сетевым объектом 29, чтобы сформировать квантованные коэффициенты, векторы движения или индикаторы режима внутреннего прогнозирования и другие синтаксические элементы, например, описанный выше синтаксис рабочих точек. Модуль 70 энтропийного декодирования перенаправляет векторы движения и другие синтаксические элементы в модуль 72 компенсации движения. Видеодекодер 30 может принимать разные синтаксические элементы в разных частях кодированного битового потока. Например, некоторые синтаксические элементы могут приниматься на уровне VPS, уровне SPS или уровне APS, тогда как другие синтаксические элементы принимаются на уровне серии последовательных макроблоков видео и/или уровне видеоблока.
Когда серия последовательных макроблоков видео кодируется в виде серии последовательных макроблоков с внутренним кодированием (I), модуль 74 обработки с внутренним прогнозированием может сформировать данные прогнозирования для видеоблока текущей серии последовательных макроблоков видео на основании сигнализированного режима внутреннего прогнозирования и данных из ранее декодированных блоков текущего кадра или изображения. Когда видеокадр кодируется в виде серии последовательных макроблоков с внешним кодированием (то есть, B, P или GPB), модуль 72 компенсации движения создает блоки с прогнозированием для видеоблока текущей серии последовательных макроблоков видео на основании векторов движения и других синтаксических элементов, принятых от модуля 70 энтропийного декодирования. Блоки с прогнозированием могут создаваться из одного из эталонных изображений в одном из списков эталонных изображений. Видеодекодер 30 может построить списки эталонных кадров, Список 0 и Список 1, используя методики построения по умолчанию на основании эталонных изображений, сохраненных в запоминающем устройстве 82 эталонных кадров.
Модуль 72 компенсации движения определяет информацию прогнозирования для видеоблока текущей серии последовательных макроблоков видео путем синтаксического анализа векторов движения и других синтаксических элементов и использует информацию прогнозирования для создания блоков с прогнозированием для текущего декодируемого видеоблока. Например, модуль 72 компенсации движения использует некоторые из принятых синтаксических элементов для определения режима прогнозирования (например, внутреннее или внешнее прогнозирование), используемого для кодирования видеоблоков в серии последовательных макроблоков видео, типа серии последовательных макроблоков с внешним прогнозированием (например, серия последовательных макроблоков B или серия последовательных макроблоков P), информации построения для одного или более списков эталонных изображений для серии последовательных макроблоков, векторов движения для каждого видеоблока с внешним кодированием в серии последовательных макроблоков, состояния внешнего прогнозирования для каждого видеоблока с внешним кодированием в серии последовательных макроблоков и другой информации для декодирования видеоблоков в текущей серии последовательных макроблоков видео.
Модуль 72 компенсации движения также может выполнить интерполяцию на основании интерполирующих фильтров. Модуль 72 компенсации движения может использовать интерполирующие фильтры, которые использовались видеокодером 20 во время кодирования видеоблоков, чтобы вычислить интерполированные значения для субцелых пикселей эталонных блоков. В этом случае модуль 72 компенсации движения может определить интерполирующие фильтры, используемые видеокодером 20, из принятых синтаксических элементов и использовать интерполирующие фильтры для создания блоков с прогнозированием.
Y
Модуль 76 обратного квантования обратно квантует, то есть деквантует, квантованные коэффициенты преобразования, обеспеченные в битовом потоке и декодированные модулем 70 энтропийного декодирования. Процесс обратного квантования может включать в себя использование параметра QP квантования, вычисленного видеодекодером 30 для каждого видеоблока в серии последовательных макроблоков видео, чтобы определить степень квантования, а также степень обратного квантования, которое следует применить. Модуль 78 обработки с обратным преобразованием применяет к коэффициентам преобразования обратное преобразование, например обратное DCT, обратное целочисленное преобразование или концептуально сходный процесс обратного преобразования, чтобы создать остаточные блоки в области пикселей.
После того, как модуль 72 компенсации движения сформирует блок с прогнозированием для текущего видеоблока на основании векторов движения и других синтаксических элементов, видеодекодер 30 образует декодированный видеоблок путем суммирования остаточных блоков от модуля 78 обработки с обратным преобразованием с соответствующими блоками с прогнозированием, сформированными модулем 72 компенсации движения. Сумматор 90 представляет собой компонент или компоненты, которые выполняют эту операцию суммирования. При необходимости также можно применить антиблоковый фильтр для фильтрации декодированных блоков, чтобы удалить артефакты блочности. Другие фильтры цикла (либо в цикле кодирования, либо после цикла кодирования) также могут использоваться для сглаживания переходов пикселей или иного повышения качества видео. Декодированные видеоблоки в заданном кадре или изображении затем сохраняются в запоминающем устройстве 82 эталонных кадров, которое хранит эталонные изображения, используемые для последующей компенсации движения. Запоминающее устройство 82 эталонных кадров также хранит декодированное видео для последующего представления на устройстве отображения, например устройстве 32 отображения из фиг. 1.
Фиг. 4 - блок-схема, иллюстрирующая примерный набор устройств, которые образуют часть сети 100. В этом примере сеть 100 включает в себя маршрутизаторы 104A, 104B (маршрутизаторы 104) и транскодирующее устройство 106. Маршрутизаторы 104 и транскодирующее устройство 106 предназначены для представления небольшого количества устройств, которые могут образовывать часть сети 100. В сеть 100 также могут включаться другие сетевые устройства, например коммутаторы, концентраторы, шлюзы, брандмауэры, мосты и другие такие устройства. Кроме того, на сетевом тракте между серверным устройством 102 и клиентским устройством 108 могут быть предусмотрены дополнительные сетевые устройства. В некоторых примерах серверное устройство 102 может соответствовать устройству-источнику 12 (фиг. 1), тогда как клиентское устройство 108 может соответствовать устройству-адресату 14 (фиг. 1).
Обычно маршрутизаторы 104 реализуют один или более протоколов маршрутизации для обмена сетевыми данными по сети 100. В некоторых примерах маршрутизаторы 104 могут быть выполнены с возможностью выполнения посреднических операций либо операций кэширования. Поэтому в некоторых примерах маршрутизаторы 104 могут называться устройствами-посредниками. Обычно маршрутизаторы 104 исполняют протоколы маршрутизации для обнаружения маршрутов в сети 100. Путем исполнения таких протоколов маршрутизации маршрутизатор 104B может обнаружить сетевой маршрут от себя до серверного устройства 102 через маршрутизатор 104A.
Маршрутизаторы 104 и транскодирующее устройство 106 являются примерами устройств, которые могут реализовать методики, описанные в описании. Например, маршрутизаторы 104 и/или транскодирующее устройство 106 могут принимать синтаксис VPS, который включает в себя синтаксис рабочих точек, как часть маршрутизации видеоданных от серверного устройства 102 к клиентскому устройству 108. Синтаксис рабочих точек может включать в себя, например, максимальное значение ID слоя для битового потока. Маршрутизаторы 104 и транскодирующее устройство 106 дополнительно могут принимать в синтаксисе рабочих точек один или более флагов для слоев с ID слоев меньше максимального значения ID слоя. На основании максимального значения ID слоя и тех флагов маршрутизаторы 104 и транскодирующее устройство 106 могут определять слои, включенные в рабочую точку, и соответственно могут идентифицировать единицы NAL, которые содержат битовый субпоток рабочей точки.
Фиг. 5 показывает примерный способ кодирования видеоданных в соответствии с методиками настоящего изобретения. Методики по фиг. 5 будут описаны в отношении видеокодера, например видеокодера 20. Видеокодер 20 может сформировать в битовом потоке кодированных видеоданных указание максимального значения ID слоя для битового потока (152). Видеокодер 20 также может сформировать флаг для первого слоя со значением ID слоя меньше максимального значения ID слоя (154). Указание максимального ID слоя и флаг могут быть, например, частью синтаксиса рабочих точек, содержащегося в VPS.
Фиг. 6 показывает примерный способ обработки видеоданных в соответствии с методиками настоящего изобретения. Методики по фиг. 6 будут описаны в отношении устройства обработки видео, которое может соответствовать видеодекодеру, например видеодекодеру 30 по фиг. 1 и фиг. 3, или которое может соответствовать сетевому устройству или сетевому объекту, например сетевому устройству 13 из фиг. 1, сетевому объекту 29 из фиг. 3 либо маршрутизаторам 104 или транскодирующему устройству 106 из фиг. 4. Устройство обработки видео может принять в битовом потоке кодированных видеоданных указание максимального значения ID слоя для битового потока (162). Устройство обработки видео также может принять флаг для первого слоя со значением ID слоя меньше максимального значения ID слоя (164). На основании значения флага устройство обработки видео может определить, включен ли первый слой в рабочую точку, на основании значения флага (166).
Следует понимать, что в зависимости от примера некоторые действия или события в любой из методик, описанных в этом документе, могут выполняться в иной последовательности, могут добавляться, объединяться или полностью пропускаться (например, не все описанные действия или события необходимы для применения методик на практике). Кроме того, в некоторых примерах действия или события могут выполняться одновременно, например, посредством многопоточной обработки, обработки прерываний или более процессоров, а не последовательно.
В одном или более примерах описываемые функции могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или любом их сочетании. Если они реализованы в программном обеспечении, то функции могут храниться или передаваться в виде одной или более команд либо кода на машиночитаемом носителе и исполняться аппаратным модулем обработки. Машиночитаемые носители могут включать в себя машиночитаемые носители информации, которые соответствуют материальному носителю, такому как носители информации, или средства связи, включающие в себя любой носитель, который облегчает перенос компьютерной программы из одного места в другое, например, в соответствии с неким протоколом связи. Таким образом, машиночитаемые носители в общем могут соответствовать (1) материальным машиночитаемым носителям информации, которые являются постоянными, или (2) средству связи, такому как сигнал или несущая. Носители информации могут быть любыми доступными носителями, к которым можно обращаться с помощью одного или более компьютеров либо одного или более процессоров для извлечения команд, кода и/или структур данных для реализации методик, описанных в данном описании. Компьютерный программный продукт может включать в себя машиночитаемый носитель.
В качестве примера, но не ограничения, такие машиночитаемые носители информации могут быть выполнены в виде RAM, ROM, EEPROM, компакт-диска или другого накопителя на оптических дисках, накопителя на магнитных дисках или других магнитных запоминающих устройств, флэш-памяти или любого другого носителя, который может использоваться для хранения нужного программного кода в виде команд или структур данных и к которому [носителю] можно обращаться с помощью компьютера. Также любое соединение корректно называть машиночитаемым носителем. Например, если команды передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, например ИК-связи, радиочастотной связи и СВЧ-связи, то коаксиальный кабель, оптоволоконный кабель, витая пара, DSL или беспроводные технологии, например ИК-связь, радиочастотная связь и СВЧ-связь, включаются в определение носителя. Однако следует понимать, что машиночитаемые носители информации и носители информации не включают в себя соединения, несущие, сигналы или другие кратковременные носители, а вместо этого ориентированы на постоянные, материальные носители информации. Диски при использовании в данном документе включают в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), гибкий диск и диск Blu-ray, причем одни диски обычно воспроизводят данные магнитным способом, тогда как другие диски воспроизводят данные оптически с помощью лазеров. Сочетания вышеперечисленного также следует включить в область машиночитаемых носителей.
Команды могут исполняться одним или более процессорами, например одним или более цифровыми процессорами сигналов (DSP), универсальными микропроцессорами, специализированными интегральными схемами (ASIC), программируемыми пользователем логическими матрицами (FPGA) или другими эквивалентными интегральными либо дискретными логическими схемами. Соответственно, термин «процессор» при использовании в данном документе может относиться к любой вышеупомянутой структуре или к любой другой структуре, подходящей для реализации описанных в этом документе методик. К тому же в некоторых аспектах функциональные возможности, описанные в этом документе, могут быть предусмотрены в специализированных аппаратных и/или программных модулях, выполненных с возможностью кодирования и декодирования, или встроены в объединенный кодек. Также методики можно было бы полностью реализовать в одной или более схемах либо логических элементах.
Методики настоящего изобретения могут быть реализованы в широком спектре устройств, включая беспроводное устройство связи, интегральную схему (ИС) или набор ИС (например, набор микросхем). Различные компоненты, модули или блоки описаны в настоящем описании, чтобы подчеркнуть функциональные аспекты устройств, выполненных с возможностью выполнения раскрытых методик, но не обязательно требуют реализации с помощью разных аппаратных модулей. Точнее, как описано выше, различные модули могут объединяться в аппаратный модуль кодека или обеспечиваться совокупностью взаимодействующих аппаратных модулей, включающих в себя один или более процессоров, как описано выше, в сочетании с подходящим программным обеспечением и/или микропрограммным обеспечением.
Описаны различные примеры. Эти и другие примеры входят в объем нижеследующей формулы изобретения.