ВИДЕООБРАБОТКА С МАСШТАБИРУЕМОСТЬЮ
VIDEO PROCESSING WITH SCALABILITY

Испрашивание приоритета согласно Своду законов США 35 U.S.C. §119
Настоящая заявка испрашивает приоритет предварительной заявки США №60/787310, поданной 29 марта 2006 года, предварительной заявки США №60/789320, поданной 29 марта 2006 года, и предварительной заявки США №60/833445, поданной 25 июля 2006 года, содержание каждой из которых целиком включено по ссылке.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
Настоящее изобретение относится к обработке цифровых видеоданных и, в частности, к способам обработки масштабируемых видеоданных.
УРОВЕНЬ ТЕХНИКИ
Возможности цифрового видео могут быть включены в состав широкого диапазона устройств, в том числе в цифровые телевизоры, системы прямой цифровой трансляции, устройства беспроводной связи, персональные цифровые помощники (PDA), портативные компьютеры, настольные компьютеры, видеоигровые приставки, цифровые камеры, цифровые записывающие устройства, сотовые или спутниковые радиотелефоны и т.п. Цифровые видеоустройства могут обеспечить значительные преимущества по сравнению со стандартными системами аналогового видео при обработке и передаче видеопоследовательностей.
Для кодирования цифровых видеопоследовательностей установлены различные стандарты кодирования видеоданных. Например, Экспертная группа по кинематографии (MPEG) разработала несколько стандартов, в том числе MPEG-1, MPEG-2 и MPEG-4. Другие примеры включают в себя стандарт Международного союза электросвязи (ITU)-T H.263 и стандарт ITU-T H.264, а также их аналог ISO/IEC MPEG-4, часть 10, то есть усовершенствованное кодирование видео (AVC). Эти стандарты кодирования видеоданных поддерживают повышенную эффективность передачи видеопоследовательностей путем кодирования данных в сжатом виде.
РАСКРЫТИЕ ИЗОБРЕТЕНИЯ
В общем, здесь описываются способы обработки видеоданных, которые предполагают использование синтаксических элементов и семантики для поддержки достаточно простых расширений при обработке мультимедиа с видеомасштабируемостью. Синтаксические элементы и семантику можно применить к трансляции мультимедиа и определению формата битового потока и процессу кодирования, который поддерживает достаточно простую видеомасштабируемость.
Синтаксический элемент и семантику можно применить к компонентам уровня сетевой абстракции (NAL). Согласно некоторым аспектам эти способы могут быть применены для реализации расширений с достаточно простой видеомасштабируемостью для устройств, которые в остальном соответствуют стандарту ITU-T H.264. Согласно некоторым аспектам компоненты NAL могут в общем случае соответствовать стандарту H.264. В частности, стандарту H.264 могут соответствовать компоненты NAL, несущие видеоданные базового уровня, в то время как компоненты NAL, несущие видеоданные уровня улучшения, могут включать в себя один или несколько добавленных или модифицированных синтаксических элементов.
Согласно одному аспекту изобретение обеспечивает способ для передачи масштабируемых цифровых видеоданных, причем способ содержит включение видеоданных уровня улучшения в блок уровня сетевой абстракции (NAL) и включение одного или нескольких синтаксических элементов в компонент NAL для указания на то, включает ли в себя компонент NAL видеоданные уровня улучшения.
Согласно другому аспекту изобретение обеспечивает устройство для передачи масштабируемых цифровых видеоданных, причем устройство содержит модуль компонентов уровня сетевой абстракции (NAL), который включает кодированные видеоданные уровня улучшения в компонент NAL и включает один или нескольких синтаксических элементов в компонент NAL для указания на то, включает ли в себя компонент NAL видеоданные уровня улучшения.
Согласно еще одному аспекту изобретение обеспечивает процессор для передачи масштабируемых цифровых видеоданных, причем процессор сконфигурирован для включения видеоданных уровня улучшения в компонент уровня сетевой абстракции (NAL) и включения одного или нескольких синтаксических элементов в компонент NAL для указания на то, включает ли в себя компонент NAL видеоданные уровня улучшения.
Согласно дополнительному аспекту изобретение обеспечивает способ для обработки масштабируемых цифровых видеоданных, причем способ содержит прием видеоданных уровня улучшения в компоненте уровня сетевой абстракции (NAL), прием одного или нескольких синтаксических элементов в компоненте NAL для указания на то, включает ли в себя компонент NAL видеоданные уровня улучшения, и декодирование цифровых видеоданных в компоненте NAL на основе этого указания.
Согласно еще одному аспекту изобретение обеспечивает устройство для обработки масштабируемых цифровых видеоданных, причем устройство содержит модуль компонентов уровня сетевой абстракции (NAL), который принимает видеоданные уровня улучшения в компоненте NAL и принимает один или несколько синтаксических элементов в компоненте NAL для указания на то, включает ли в себя компонент NAL видеоданные уровня улучшения, и декодер, который декодирует цифровые видеоданные в компоненте NAL на основе этого указания.
Согласно дополнительному аспекту изобретение обеспечивает процессор для обработки масштабируемых цифровых видеоданных, причем процессор сконфигурирован для приема видеоданных уровня улучшения в компоненте сетевой абстракции (NAL), приема одного или несколько синтаксических элементов в компоненте NAL для указания на то, включает ли в себя компонент NAL видеоданные уровня улучшения, и декодирования цифровых видеоданных в компоненте NAL на основе этого указания.
Описанные в этом изобретении способы могут быть реализованы в устройстве цифрового видеокодирования и/или видеодекодирования аппаратными средствами, программными средствами, программно-аппаратными средствами или любой их комбинацией. При реализации программными средствами программное обеспечение может выполняться в компьютере. Программное обеспечение может изначально храниться в виде команд, программного кода или т.п. Соответственно, изобретение также предполагает использование компьютерного программного продукта для кодирования цифрового видео, содержащего считываемый компьютером носитель, причем считываемый компьютером носитель содержит коды, побуждающие компьютер выполнять способы и функции согласно настоящему изобретению.
Дополнительные подробности различных аспектов изобретения изложены в сопроводительных чертежах и описании, приведенных ниже. Другие признаки, цели и преимущества изобретения станут очевидными из описания и чертежей, а также из формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
Фиг. 1 - блок-схема, иллюстрирующая систему цифрового мультимедийного вещания, поддерживающую видеомасштабируемость.
Фиг. 2 - схема, иллюстрирующая видеокадры на базовом уровне и уровне улучшения масштабируемого битового видеопотока.
Фиг. 3 - блок-схема, иллюстрирующая примерные компоненты вещательного сервера и абонентского устройства в цифровой мультимедийной вещательной системе по фиг. 1.
Фиг. 4 - блок-схема, иллюстрирующая примерные компоненты видеодекодера для абонентского устройства.
Фиг. 5 - блок-схема, иллюстрирующая процесс декодирования видеоданных базового уровня и уровня улучшения в масштабируемом битовом видеопотоке.
Фиг. 6 - блок-схема, иллюстрирующая объединение коэффициентов базового уровня и уровня улучшения в видеодекодере при одноуровневом декодировании.
Фиг. 7 - блок-схема, иллюстрирующая объединение коэффициентов базового уровня и уровня улучшения в видеодекодере.
Фиг. 8 - блок-схема, иллюстрирующая процесс кодирования масштабируемого битового видеопотока для объединения множества различных примерных синтаксических элементов для поддержки достаточно простой видеомасштабируемости.
Фиг. 9 - блок-схема, иллюстрирующая процесс декодирования масштабируемого битового видеопотока для обработки множества различных примерных синтаксических элементов для поддержки достаточно простой видеомасштабируемости.
Фигуры 10 и 11 - схемы, иллюстрирующие разбиение макроблоков (MB) и четвертных блоков для режимов пространственного предсказания яркости.
Фиг. 12 - блок-схема, иллюстрирующая процесс декодирования макроблоков (MB) базового уровня и уровня улучшения для создания единого уровня MB.
Фиг. 13 - схема, иллюстрирующая процесс фильтрации для деблокирования яркости и цветности.
Фиг. 14 - схема, иллюстрирующая правила для описания отсчетов через горизонтальную или вертикальную границу для блоков 4х4.
Фиг. 15 - блок-схема, иллюстрирующая устройство для передачи масштабируемых цифровых видеоданных.
Фиг. 16 - блок-схема, иллюстрирующая устройство для декодирования масштабируемых цифровых видеоданных.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
Масштабируемое видеокодирование можно использовать для обеспечения масштабируемости отношения сигнал-шум (SNR) в приложениях для сжатия видеоданных. Также возможна временная и пространственная масштабируемость. При масштабируемости SNR, например, кодированные видеоданные включают в себя базовый уровень и уровень улучшения. Базовый уровень несет минимальное количество данных, необходимых для видеодекодирования, и обеспечивает базовый уровень качества. Уровень улучшения несет дополнительные данные, которые повышают качество декодированных видеоданных.
В общем случае базовый уровень можно рассматривать как битовый поток, содержащий кодированные видеоданные, которые представляют первый уровень пространственно-временной-SNR масштабируемости, определенной данной спецификацией. Битовый поток уровня улучшения можно декодировать только вместе с базовым уровнем, то есть он содержит ссылки на декодированные видеоданные базового уровня, которые используют для создания конечных декодированных видеоданных.
Путем использования иерархической модуляции на физическом уровне базовый уровень и уровень улучшения можно передавать на одной и той же несущей или поднесущих, но с разными характеристиками передачи, что приводит к разной частоте пакетных ошибок (PER). Базовый уровень имеет более низкую PER для более надежного приема по всей зоне покрытия. Декодер может декодировать только базовый уровень или базовый уровень плюс уровень улучшения, если уровень улучшения надежно принимается и/или в зависимости от других критериев.
В общем, в этом изобретении описываются способы видеообработки, которые предполагают использование синтаксических элементов и семантики для поддержания достаточно простых расширений для обработки мультимедиа с видеомасштабируемостью. Эти способы особенно подходят к мультимедийному вещанию и определяют формат битового потока и процесс кодирования, которые поддерживают достаточно простую видеомасштабируемость. Согласно ряду аспектов эти способы можно применять к реализации расширений для достаточно простой видеомасштабируемости для устройств, которые во всем остальном соответствуют стандарту H.264. Например, расширения могут представлять потенциальные модификации для будущих версий или расширений стандарта H.264 или других стандартов.
Стандарт H.264 был разработан Экспертной группой по видеокодированию ITU-T и Экспертной группой по кинематографии (MPEG) ISO/IEC как продукт партнерства, известного как Объединенная группа по разработке видео (JVT). Стандарт H.264 описан в ITU-T Recommendation H.264, Advanced video coding для generic audiovisual services, by the ITU-T Study Group и датирован мартом 2005 года, причем здесь этот стандарт называется стандарт H.264 или спецификация H.264, либо стандарт или спецификация H.264/AVC.
Описанные в этом изобретении способы предполагают использование синтаксических элементов и семантики уровня улучшения, предназначенных для реализации эффективной обработки видеоданных базового уровня и уровня улучшения видеодекодером. Здесь будут описаны различные синтаксические элементы и семантика, которые можно использовать вместе или отдельно на селективной основе. Достаточно простая видеомасштабируемость обеспечивает два уровня пространственно-временной-SNR масштабируемости путем разбиения битового потока на синтаксические объекты двух типов, обозначенных как базовый уровень и уровень улучшения.
Кодированные видеоданные и масштабируемые расширения переносятся в компонентах уровня сетевой абстракции (NAL). Каждый компонент NAL является компонентом сетевой передачи, который может принимать форму пакета, содержащего целое число байт. Компоненты NAL переносят либо данные базового уровня, либо данные уровня улучшения. Согласно некоторым аспектам изобретения некоторые из компонентов NAL могут фактически соответствовать стандарту H.264/AVC. Однако к компонентам NAL других типов могут быть применены различные принципы настоящего изобретения. В общем случае первый байт компонента NAL включает в себя заголовок, указывающий тип данных в компоненте NAL. Остальная часть компонента NAL несет данные полезной нагрузки, соответствующие типу, который указан в заголовке. Заголовок nal_unit_type имеет пятибитовое значение, которое указывает один из тридцати двух различных типов компонента NAL, причем девять значений зарезервированы для использования в будущем. Четыре из девяти зарезервированных типов компонента NAL зарезервированы для расширения масштабируемости. Специализированный заголовок nal_unit_type можно использовать для указания о том, что компонент NAL является специализированным компонентом NAL, который может включать в себя видеоданные уровня улучшения для использования в приложениях с масштабируемостью.
Синтаксис и семантика битового потока базового уровня в компоненте NAL в общем случае может соответствовать применяемому стандарту, например, стандарту H.264, возможно с некоторыми ограничениями. Как примеры ограничений, наборы параметров изображений могут иметь флаг MbaffFRameFlag, равный 0, наборы параметров последовательности могут иметь флаг frame_mbs_only_flag, равный 1, а запоминаемый флаг В изображений может быть равен 0. Синтаксис и семантика битового потока уровня улучшения для компонентов NAL определяется в этом изобретении для эффективной поддержки достаточно простых расширений для видеомасштабируемости. Например, семантика компонентов уровня сетевой абстракции (NAL), несущих данные уровня улучшения, может быть модифицирована по отношению к стандарту H.264 для ввода новых типов компонента NAL, которые задают тип структуры данных необработанной битовой последовательной полезной нагрузки (RBSP), в компоненте NAL уровня улучшения.
Компоненты NAL уровня улучшения могут нести синтаксические элементы с множеством различных указаний уровня улучшения, помогающих видеодекодеру при обработке компонента NAL. Различные указания могут включать в себя указание о том, включает ли компонент NAL видеоданные уровня улучшения с внутрикадровым кодированием на уровне улучшения, указание о том, должен ли декодер использовать добавление видеоданных уровня улучшения к данным базового уровня в пиксельной области или в области преобразования, и/или указание о том, включают ли видеоданные уровня улучшения в себя какие-либо остаточные данные, относящиеся к видеоданным базового уровня.
Компоненты NAL уровня улучшения также могут нести синтаксические элементы, указывающие, включает ли компонент NAL в себя параметр последовательности, набор параметров изображения, слой опорного изображения или раздел данных слоя опорного изображения. Другие синтаксические элементы могут идентифицировать блоки в видеоданных уровня улучшения, содержащие ненулевые значения коэффициентов преобразования, указывать количество ненулевых коэффициентов с величиной, превышающей единицу, в блоках с внутрикадровым кодированием в видеоданных уровня улучшения и указывать кодированные блочные шаблоны для блоков с внутрикадровым кодированием в видеоданных уровня улучшения. Вышеописанная информация может быть полезной при поддержании эффективного и упорядоченного декодирования.
Описанные в этом изобретении способы можно использовать в сочетании с любым из множества различных стандартов видеокодирования с предсказанием, таких как стандарты MPEG-1, MPEG-2 или MPEG-4, стандарты ITU H.263 или H.264, либо стандарт ISO/IEC MPEG-4, часть 10, то есть усовершенствованное кодирование видео (AVC), который по существу идентичен стандарту H.264. Далее в иллюстративных целях описывается применение указанных способов для поддержки достаточно простых расширений для видеомасштабирования, связанного со стандартом H.264. Соответственно, данное изобретение, в частности, предполагает адаптацию, расширение или модификацию стандарта H.264, как было здесь описано, для обеспечения достаточно простой видеомасштабируемости, но может также быть применено и к другим стандартам.
Согласно некоторым аспектам данное изобретение предполагает возможность его применения к видеокодированию в усовершенствованном стандарте H.264 для предоставления видеоуслуг в реальном времени в наземных мобильных мультимедийных широковещательных (TM3) системах с использованием спецификации радиоинтерфейса FLO (связь только в прямом направлении), “Forward Link Only Air Interface Specification для Terrestrial Mobile Multimedia Multicast”, публикуемой как технический стандарт TIA-1099 («FLO specification»). Спецификация FLO включает в себя примеры, определяющие синтаксис и семантику битовых потоков, а также процессы декодирования, подходящие для предоставления услуг через радиоинтерфейс FLO.
Как упоминалось выше, масштабируемое видеокодирование предусматривает два уровня: базовый уровень и уровень улучшения. Согласно некоторым аспектам может быть обеспечено множество уровней улучшения, обеспечивающих поступательно нарастающие уровни качества, то есть масштабируемость отношения сигнал-шум. Однако в данном описании в иллюстративных целях описывается единственный уровень улучшения. На основе использования иерархической модуляции на физическом уровне базовый уровень и один или несколько уровней улучшения могут передаваться на одной и той же несущей или поднесущих, но с разными характеристиками передачи, что приводит к разной частоте пакетных ошибок (PER). Базовый уровень имеет более низкую частоту PER. Затем декодер может декодировать только базовый уровень или базовый уровень плюс уровень улучшения, в зависимости от их наличия и/или других критериев.
Если декодирование выполняется в клиентском устройстве, таком как мобильный телефон или другое небольшое портативное устройство, могут иметь место ограничения из-за сложности вычислений и требований к памяти. Соответственно, может быть разработано масштабируемое кодирование таким образом, что декодирование базового уровня плюс уровня улучшения незначительно увеличивает сложность вычислений и требования к памяти по сравнению с одноуровневым кодированием. Эффективное декодирование данных базового уровня и уровня улучшения может поддерживаться подходящими синтаксическими элементами и связанной с ними семантикой.
Как пример возможной аппаратной реализации, абонентское устройство может содержать аппаратное ядро с тремя модулями: модуль оценки движения для обработки компенсации движения, модуль преобразования для обработки операций деквантизации и обратного преобразования и модуль деблокирования для обработки деблокирования декодированных видеоданных. Каждый модуль может быть сконфигурирован для одновременной обработки одного макроблока (MB). Однако доступ к подсекциям каждого модуля может оказаться затруднительным.
Например, обратное преобразование яркости между MB может осуществляться на основе блоков 4×4, и в модуле преобразования возможно придется выполнить последовательно 16 преобразований для всех блоков 4×4. Кроме того, для ускорения процесса декодирования можно использовать конвейерный режим работы трех модулей. Следовательно, прерывания с целью обеспечения процессов для масштабируемого декодирования может замедлить ход выполнения декодирования.
В схеме масштабируемого кодирования согласно одному аспекту настоящего изобретения в декодере данные с базового уровня и уровня улучшения можно объединить на одном уровне, например, в микропроцессоре общего назначения. В этом случае входящие данные, поступающие от микропроцессора, выглядят как единый уровень данных и могут обрабатываться аппаратным ядром как один уровень. Таким образом, согласно некоторым аспектам изобретения масштабируемое декодирование является прозрачным для аппаратного ядра. Возможно, что не понадобится переупорядочивать модули аппаратного ядра. Декодирование данных базового уровня и уровня улучшения как данных одного уровня согласно некоторым аспектам может незначительно увеличить сложность декодирования и ненамного повысить (либо вообще не повысить) требования к памяти.
При потере уровня улучшения из-за высокой частоты PER или по какой-либо другой причине остаются только данные базового уровня. Следовательно, можно будет выполнить стандартное одноуровневое декодирование для данных базового уровня, либо могут потребоваться небольшие изменения стандартного, немасштабируемого декодирования, либо изменения вообще не потребуются. Однако, если имеется как базовый уровень, так и уровень улучшения данных, декодер может декодировать оба уровня и создать видео с качеством уровня улучшения, увеличив отношение сигнал-шум результирующих видеоданных для их представления на устройстве отображения.
В этом изобретении процедура декодирования описана для случая, когда получены и имеются как базовый уровень, так и уровень улучшения. Однако специалистам в данной области техники должно быть ясно, что описанная здесь процедура декодирования применима также к одноуровневому декодированию только базового уровня. Также для масштабируемого декодирования и стандартного, одноуровневого (базового) декодирования можно совместно использовать одно и то же аппаратное ядро. Кроме того, для управления планированием в аппаратном ядре может потребоваться незначительная модификация (или вообще не потребоваться) для обработки как декодирования только базового уровня, так и декодирования базового уровня плюс уровня улучшения.
Некоторые из задач, относящихся к масштабируемому декодированию, могут быть выполнены в микропроцессоре общего назначения. Их выполнение может включать в себя двухуровневое энтропийное декодирование, объединение коэффициентов двух уровней и подачу управляющей информации в цифровой процессор сигналов (DSP). Управляющая информация, подаваемая в DSP, может включать в себя значения параметра квантования (QP) и несколько ненулевых коэффициентов в каждом блоке 4х4. Значения QP могут посылаться в DSP для деквантизации и могут также использоваться совместно с информацией о ненулевых коэффициентах в аппаратном ядре для деблокирования. Процессор DSP может обращаться к блокам в аппаратном ядре для завершения других операций. Однако описанные здесь способы нет необходимости ограничивать какой-либо конкретной аппаратной реализацией или архитектурой.
В этом описании двунаправленные предиктивные B-кадры, формируемые способом предсказания вперед/назад, могут кодироваться стандартным образом в предположении, что В-кадры могут переноситься на обоих уровнях. В данном описании основное внимание обращено на обработку I- и P-кадров и/или слоев, которые могут появляться на базовом уровне, уровне улучшения или на обоих уровнях. В общем случае здесь описывается процесс одноуровневого декодирования, который объединяет операции для битовых потоков базового уровня и уровня улучшения с целью минимизации сложности декодирования и энергопотребления.
Как пример, для объединения базового уровня и уровня улучшения коэффициенты базового уровня могут быть приведены к масштабу SNR уровня улучшения. Например, коэффициенты базового уровня можно просто умножить на масштабный коэффициент. Если разница в параметре квантования (QP) между базовым уровнем и уровнем улучшения кратна, например, 6, то коэффициенты базового уровня можно привести к масштабу уровня улучшения с помощью простой операции битового сдвига. Результатом будет масштабированная версия данных базового уровня, которые могут быть объединены с данными уровня улучшения, чтобы разрешить одноуровневое декодирование как базового уровня, так и уровня улучшения на объединенной основе, как если бы они находились на уровне общего битового потока.
Используя декодирование одного уровня, а не двух различных уровней на независимой основе, можно упростить необходимые для обработки компоненты декодера, смягчить ограничения на планирование и уменьшить энергопотребление. Для обеспечения упрощенной масштабируемости компоненты NAL битового потока уровня улучшения включают в себя различные синтаксические элементы и семантику, предназначенные для облегчения декодирования, так чтобы видеодекодер мог реагировать на наличие как данных базового слоя, так и данных слоя расширения в различных компонентах NAL. Примеры синтаксических элементов, семантики и функций обработки описываются ниже со ссылками на чертежи.
На фиг. 1 представлена блок-схема, иллюстрирующая цифровую мультимедийную вещательную систему 10, поддерживающую видеомасштабируемость. В примере на фиг. 1 система 10 включает в себя вещательный сервер 12, передающую башню 14 и множество абонентских устройств 16А, 16В. Вещательный сервер 12 получает цифровой мультимедийный контент от одного или нескольких источников и кодирует этот мультимедийный контент, например, в соответствии с любым из вышеописанных стандартов видеокодирования, например, H.264. Мультимедийный контент, закодированный вещательным сервером 12, может быть скомпонован в виде отдельных битовых потоков для поддержки различных каналов, выбираемых пользователем, связанным с абонентским устройством 16. Вещательный сервер 12 может получать цифровой мультимедийный контент в прямом эфире или в виде архивированного мультимедийного контента от различных поставщиков контента.
Вещательный сервер 12 может включать в себя или быть связан с модулятором/передатчиком, который содержит соответствующие компоненты радиочастотной (RF) модуляции, фильтрации и усиления для возбуждения одной или нескольких антенн, связанных с передающей башней 14, для доставки закодированного мультимедийного контента, полученного от вещательного сервера 12, через беспроводный канал. Согласно некоторым аспектам вещательный сервер 12 может быть сконфигурирован в общем случае для предоставления видеоуслуг в реальном времени в наземных мобильных мультимедийных широковещательных (TM3) системах согласно спецификации FLO. Модулятор/передатчик может передавать мультимедийные данные в соответствии с любым из множества различных способов беспроводной связи, таких как многостанционный доступ с кодовым разделением каналов (CDMA), многостанционный доступ с временным разделением каналов (TDMA), многостанционный доступ с частотным разделением каналов (FDMA), мультиплексирование с ортогональным частотным разделением каналов (OFDM) или любой комбинацией указанных способов.
Каждое абонентское устройство 16 может находиться в любом устройстве, способном декодировать и представлять цифровые мультимедийные данные: система непосредственного цифрового вещания, устройство беспроводной связи, такое как сотовый или спутниковый радиотелефон, персональный цифровой помощник (PDA), компьютер типа «лэптоп», настольный компьютер, видеоигровая приставка или т.п. Абонентские устройства 16 могут поддерживать проводной и/или беспроводный прием мультимедийных данных. Вдобавок, некоторые абонентские устройства 16 могут быть оборудованы средствами для кодирования и передачи мультимедийных данных, а также поддержки приложений для передачи речи и данных, включая видеотелефонную связь, потоковое видео и т.п.
Для поддержки масштабируемого видео вещательный сервер 12 кодирует исходные видеоданные для создания отдельных битовых потоков базового уровня и уровня улучшения для множества каналов видеоданных. Передача по этим каналам обычно выполняется одновременно, так что абонентское устройство 16А, 16В может в любой момент времени выбрать для просмотра другой канал.
Следовательно, абонентское устройство 16А, 16В под управлением пользователя может выбрать один канал для просмотра спортивных передач, а затем выбрать другой канал для просмотра новостей или некоторой другой запланированной программы, совсем так, как при просмотре телевизора. В общем, каждый канал включает в себя базовый уровень и уровень улучшения, которые передаются с различными значениями частоты PER.
В примере на фиг. 1 показаны два абонентских устройства 16А, 16В. Однако система 10 может включать в себя любое количество абонентских устройств 16А, 16В в заданной зоне покрытия. Примечательно, что множество абонентских устройств 16А, 16В могут обращаться к одним и тем же каналам для одновременного просмотра одного и того же контента. На фиг. 1 показано расположение абонентских устройств 16А и 16В относительно передающей башни 14, при котором одно абонентское устройство 16А находится ближе к передающей башне, а другое абонентское устройств 16В дальше от передающей башни. Поскольку базовый уровень кодируется при низкой частоте PER, он должен надежно приниматься и декодироваться любым абонентским устройством 16 в используемой зоне покрытия. Как показано на фиг. 1, базовый уровень принимается обоими абонентскими устройствами 16А, 16В. Однако абонент 16В находится дальше от передающей башни 14 и не принимает с достаточной надежностью уровень улучшения.
Более близкое абонентское устройство 16А способно обеспечить видео более высокого качества, поскольку ему доступны данные как базового уровня, так и уровня улучшения, в то время как абонентское устройство 16В способно представлять видео только с минимальным уровнем качества, обеспечиваемым данными базового уровня. Следовательно, видео, получаемое абонентскими устройствами 16, является масштабируемым в том смысле, что к базовому уровню для повышения отношения сигнал-шум декодированных видеоданных можно добавить предварительно декодированный уровень улучшения. Однако масштабируемость возможна только тогда, когда имеются данные уровня улучшения. Как описано ниже, при наличии данных уровня улучшения синтаксические элементы и семантика, связанные с компонентами NAL уровня улучшения, помогают видеодекодеру в абонентском устройстве 16 реализовать масштабируемость видеоданных. В данном описании, и в частности, на чертежах, термин «улучшение» для краткости может быть укорочен до сокращения «расш» (или "ENH").
На фиг. 2 представлена схема, иллюстрирующая видеокадры в базовом уровне 17 и уровне 18 улучшения масштабируемого битового видеопотока. Базовый уровень 17 представляет собой битовый поток, содержащий кодированные видеоданные, которые представляют первый уровень пространственно-временной-SNR масштабируемости. Уровень 18 улучшения представляет собой битовый поток, содержащий кодированные видеоданные, которые представляют второй уровень пространственно-временной-SNR масштабируемости. В общем случае битовый поток уровня улучшения может декодироваться только вместе с базовым уровнем, а не независимо. Уровень 18 улучшения содержит ссылки на декодированные видеоданные в базовом уровне 17. Указанные ссылки можно использовать либо в области преобразования, либо в пиксельной области для создания конечных декодированных видеоданных.
Базовый уровень 17 и уровень 18 улучшения могут содержать I-кадры (с внутрикадровым кодированием), P-кадры (с предиктивным кодированием) и В-кадры (формируемые методом предсказания вперед/назад). P-кадры в уровне 18 улучшения опираются на ссылки на P-кадры в базовом уровне 17. Путем декодирования кадров в уровне 18 улучшения и базовом уровне 17 видеодекодер имеет возможность повысить качество декодированного видео. Например, базовый уровень 17 может включать в себя видео, закодированное с минимальной частотой 15 кадров в секунду, в то время как уровень 18 улучшения может включать в себя видео, закодированное с более высокой частотой - 30 кадров в секунду. Для поддержки кодирования с разными уровнями качества базовый уровень 17 и уровень 18 улучшения могут кодироваться с большим параметром квантования (QP) и меньшим QP соответственно.
На фиг. 3 представлена блок-схема, иллюстрирующая примерные компоненты вещательного сервера 12 и абонентского устройства 16 в системе 10 цифрового мультимедийного вещания по фиг. 1. Как показано на фиг. 3, вещательный сервер 12 включает в себя один или несколько источников 20 видео или интерфейс для различных источников видео. Вещательный сервер 12 также включает в себя видеодекодер 22, модуль 23 компонентов NAL и модулятор/передатчик 24. Абонентское устройство 16 включает в себя приемник/демодулятор 26, модуль 27 компонентов NAL, видеодекодер 28 и устройство 30 отображения видео. Приемник/демодулятор 26 принимает видеоданные от модулятора/передатчика 24 через канал 15 связи. Видеодекодер 22 включает в себя модуль 32 кодера базового уровня и модуль 34 кодера уровня улучшения. Видеодекодер 28 включает в себя модуль 38 объединителя уровней (базового/расширения) и энтропийный декодер 40 базового уровня/уровня улучшения.
Кодер 32 базового уровня и кодер 34 уровня улучшения принимают общие видеоданные. Кодер 32 базового уровня кодирует видеоданные с первым уровнем качества. Кодер 34 уровня улучшения кодирует уточнения, которые, будучи добавленными к базовому уровню, улучшают видео до второго, более высокого уровня качества. Модуль 23 компонентов NAL обрабатывает кодированный битовый поток из видеокодера 22 и создает компоненты NAL, содержащие кодированные видеоданные из базового уровня и уровня улучшения. Модуль 23 компонентов NAL может представлять собой отдельный блок, как показано на фиг. 3, или быть встроенным или иным образом интегрированным с видеокодером 22. Некоторые компоненты NAL несут данные базового уровня, в то время как другие компоненты NAL несут данные уровня улучшения. Согласно настоящему изобретению по меньшей мере некоторые из компонентов NAL включают в себя синтаксические элементы и семантику, помогающие видеодекодеру 28 при декодировании данных базового уровня и уровня улучшения без существенного увеличения сложности. Например, в компоненте NAL, который включает в себя видеоданные уровня улучшения, компоненте NAL, который включает в себя видеоданные базового уровня, или и то и другое могут быть предусмотрены один или несколько синтаксических элементов, указывающих на наличие видеоданных уровня улучшения в компоненте NAL.
Модулятор/передатчик 24 включает в себя подходящие компоненты для модуляции/демодуляции, усиления, фильтрации и преобразования частоты для поддержки модуляции и беспроводной передачи компонентов NAL, созданных модулем 23 компонентов NAL. Приемник/демодулятор 26 включает в себя подходящие компоненты модуляции/демодуляции, усиления, фильтрации и преобразования частоты для поддержки беспроводного приема компонентов NAL, переданных вещательным сервером. Согласно некоторым аспектам вещательный сервер 12 и абонентское устройство 16 могут быть оборудованы средствами двусторонней связи, так что вещательный сервер 12, абонентское устройство 16 или они оба включают в себя передающие и приемные компоненты, и оба способны кодировать и декодировать видеоданные. Согласно другим аспектам вещательный сервер 12 может являться абонентским устройством 16, оборудованным средствами кодирования, декодирования, передачи и приема видеоданных с использованием кодирования базового уровня и уровня улучшения. Таким образом, здесь также предполагается обработка масштабируемого видео для видеоданных, передаваемых между двумя или более абонентскими устройствами.
Модуль 27 компонентов NAL выделяет синтаксические элементы из принятых компонентов NAL и подает соответствующую информацию в видеодекодер 28 для ее использования при декодировании видеоданных базового уровня и уровня улучшения. Модуль 27 компонентов NAL может представлять собой отдельный блок, как показано на фиг. 3, или быть встроенным или иным образом интегрированным с видеодекодером 28. Энтропийный декодер 40 базового уровня/уровня улучшения применяет энтропийное декодирование к полученным видеоданным. Если имеются данные уровня улучшения, то модуль 38 объединителя уровней (базового/расширения) объединяет коэффициенты от базового уровня и уровня улучшения, используя указания, предоставленные модулем 27 компонентов NAL, для поддержки одноуровневого декодирования объединенной информации. Видеодекодер 28 декодирует объединенные видеоданные для создания выходных видеоданных, приводящих в действие устройство 30 отображения. Синтаксические элементы, находящиеся в каждом компоненте NAL, и семантика синтаксических элементов управляют видеодекодером 28 при комбинировании и декодировании полученных видеоданных базового уровня и уровня улучшения.
Различные компоненты в вещательном сервере 12 и абонентском устройстве 16 могут быть реализованы с помощью любой подходящей комбинации аппаратных, программных и программно-аппаратных средств. Например, видеокодер 22 и модуль 23 компонентов NAL, а также модуль 27 компонентов NAL и видеодекодер 28 могут быть реализованы с помощью одного или нескольких микропроцессоров общего назначения, цифровых процессоров сигналов (DSP), аппаратных ядер, прикладных специализированных интегральных схем (ASIC), вентильных матриц, программируемых пользователем (FPGA) или любой их комбинации. Вдобавок, различные компоненты могут быть реализованы в видеокодере-декодере (CODEC). В некоторых случаях ряд аспектов раскрытых здесь способов могут выполняться процессором DSP, который активизирует различные аппаратные компоненты в аппаратном ядре для ускорения процесса кодирования.
Что касается аспектов, функциональные возможности которых реализуются программными средствами, например, функциональные возможности, реализуемые процессором или DSP, то изобретение также предполагает возможность использования считываемого компьютером носителя, содержащего коды, в рамках компьютерного программного продукта. При исполнении на машине коды побуждают машину выполнять один или несколько аспектов описанных здесь способов. Считываемый машиной носитель может содержать память с произвольной выборкой (RAM), например, синхронную динамическую память с произвольной выборкой (SDRAM), память только для считывания (ROM), энергонезависимую память с произвольной выборкой (NVRAM), электрически стираемую программируемую память только для считывания (EEPROM), флэш-память и т.п.
На фиг. 4 представлена блок-схема, иллюстрирующая примерные компоненты видеодекодера 28 для абонентского устройства 16. В примере на фиг. 4, как и на фиг. 3, видеодекодер 28 включает в себя модуль 40 энтропийного декодера базового уровня/уровня улучшения и модуль 38 объединителя уровней (базового/расширения). На фиг. 4 также показаны модуль 44 восстановления при ошибках базового уровня плюс уровня улучшения и модуль 46 деквантизации, а также модуль 48 деквантизации и предсказания. На фиг. 4 также показан модуль 50 постобработки, который принимает выходной сигнал видеодекодера 28, и устройство 30 отображения.
Энтропийный декодер 40 базового уровня/уровня улучшения применяет энтропийное декодирование к видеоданным, полученным видеодекодером 28. Модуль 38 объединителя уровней (базового/расширения) объединяет видеоданные базового уровня и уровня улучшения для заданного кадра или макроблока при наличии данных уровня улучшения, то есть когда данные уровня улучшения успешно приняты. Как будет описано ниже, модуль 38 объединителя уровней (базового/расширения) может сначала на основе синтаксических элементов, присутствующих в компоненте NAL, определить, содержит ли компонент NAL данные уровня улучшения. Если содержит, то модуль 38 объединителя объединяет данные базового уровня для соответствующего кадра с данными уровня улучшения, например, путем масштабирования данных базового уровня. Таким образом, модуль 38 объединителя создает одноуровневый битовый поток, который может быть декодирован видеодекодером 28 без обработки множества уровней. Другие синтаксические элементы и связанная с ними семантика в компоненте NAL могут задать способ объединения и декодирования данных базового уровня и уровня улучшения.
Модуль 44 восстановления при ошибках исправляет ошибки в декодированном выходном сигнале модуля 38 объединителя. Модуль 46 деквантизации и модуль 48 обратного преобразования применяют функции деквантизации и обратного преобразования соответственно к выходу модуля 44 восстановления при ошибках, создавая декодированные выходные видеоданные для модуля 55 постобработки. Модуль 50 постобработки может выполнять любую из множества различных функций повышения качества видео, таких как деблокирование, подавление реверберации, сглаживание, повышение четкости или т.п. При наличии данных уровня улучшения для кадра или макроблока видеодекодер 28 имеет возможность создания видео более высокого качества для подачи в модуль 50 постобработки и устройство 30 отображения. Если данные уровня улучшения отсутствуют, то декодированное видео создается с минимальным уровнем качества, обеспечиваемым базовым уровнем.
На фиг. 5 представлена блок-схема, иллюстрирующая процесс декодирования видеоданных базового уровня и уровня улучшения в масштабируемом битовом видеопотоке. В общем случае при потере уровня улучшения из-за высокой частоты пакетных ошибок или из-за отсутствия приема, доступными остаются только данные базового уровня. Следовательно, будет выполняться стандартное одноуровневое декодирование. Однако при наличии данных обоих уровней: базового и улучшения, видеодекодер 28 будет декодировать оба уровня и создавать видео с качеством уровня улучшения. Как показано на фиг. 5, после начала декодирования группы изображений (GOP) (54) модуль 27 компонентов NAL определяет, включают ли входящие компоненты NAL в себя данные уровня улучшения или только данные базового уровня (58). Если компоненты NAL включают в себя только данные базового уровня, то видеодекодер 28 применяет стандартное одноуровневое декодирование к данным базового уровня (60) и продолжает его до конца группы GOP (62).
Если компоненты NAL включают в себя не только данные базового уровня (58), то есть некоторые из компонентов NAL включают в себя данные уровня улучшения, то видеодекодер 28 выполняет I-декодирование базового уровня (64) и I-декодирование уровня улучшения (ENH) (66). В частности, видеодекодер 28 декодирует все I-кадры в базовом уровне и уровне улучшения. Видеодекодер 28 выполняет перемещение содержимого памяти (68) для управления декодированием I-кадров как для базового уровня, так и для уровня улучшения. В сущности, базовый уровень и уровень улучшения обеспечивают два I-кадра для единого I-кадра, то есть Ie -кадр уровня улучшения и Ib -кадр базового уровня. По этой причине и может быть использовано перемещение содержимого памяти.
Для декодирования I-кадра при наличии данных из обоих уровней может быть реализовано декодирование в два прохода, которое в общем случае выполняется следующим образом. Сначала восстанавливается кадр Ib базового уровня как обычный I-кадр. Затем восстанавливается I-кадр уровня улучшения как P-кадр. Опорным кадром для восстановленного P-кадра уровня улучшения является восстановленный I-кадр базового уровня. В результирующем P-кадре все векторы движения равны нулю. Соответственно, декодер 28 декодирует восстановленный кадр как P-кадр с нулевыми векторами движения, обеспечивая прозрачную масштабируемость.
По сравнению с одноуровневым декодированием декодирование Ie-кадра уровня улучшения в общем случае эквивалентно времени декодирования стандартного I-кадра и P-кадра. Если частота I-кадров не превышает один кадр в секунду, то значительного усложнения не потребуется. Если эта частота больше, чем один I-кадр в секунду, например, из-за изменения сцены или по какой-то другой причине, то конфигурируется алгоритм кодирования, обеспечивающий кодирование вышеозначенных I-кадров только на базовом уровне. Если возможно одновременное существование в декодере как кадров Ib, так и Ie, то Ie можно сохранить в буфере кадров с отличием от Ib. В этом случае, когда в качестве P-кадра восстанавливается кадр Iе, индексы памяти могут быть перемещены, и память, занятая Ib, может быть освобождена. Затем декодер 28 выполняет обработку перемещения индексов памяти в зависимости от того, имеется ли битовый поток уровня улучшения. Если объем памяти для этого слишком мал, то возможна перезапись Ie на Ib, поскольку все векторы движения являются нулевыми.
После декодирования I-кадров (64, 66) и перемещения содержимого памяти (68) модуль 38 объединителя объединяет данные Р-кадров базового уровня и уровня улучшения в единый уровень (70). Затем модуль 46 деквантизации и модуль 48 обратного преобразования декодируют единый уровень Р-кадров (72). Вдобавок, модуль 46 деквантизации и модуль 48 обратного преобразования декодируют B-кадры (74).
После декодирования данных P-кадров (72) и данных B-кадров (74) процесс завершается (62), если обработана вся группа GOP (76). Если группа GOP декодирована еще не донца, то тогда выполнение процесса продолжается посредством выполнения еще одной итерации объединения данных P-кадра базового уровня и уровня улучшения (70), декодирования результирующих одноуровневых данных P-кадров (72) и декодирования B-кадров (74). Этот процесс продолжается, пока не будет достигнут конец группы GOP (76), что является моментом окончания процесса.
На фиг. 6 представлена блок-схема, иллюстрирующая объединение коэффициентов базового уровня и уровня улучшения в видеодекодере 28. Как показано на фиг. 6, коэффициенты P-кадра базового уровня подвергаются деквантизации 80 и обратному преобразованию 82, например, с помощью модуля 46 обратного преобразования и модуля 48 обратного преобразования и предсказания соответственно (фиг. 4), а затем суммируются сумматором 84 с остаточными данными из буфера 86, представляющими опорный кадр, для создания декодированного выхода P-кадра базового уровня. Однако при наличии данных уровня улучшения коэффициенты базового уровня подвергаются масштабированию (88) для согласования с качеством коэффициентов уровня улучшения.
Затем в сумматоре 90 суммируются масштабируемые коэффициенты базового уровня и коэффициенты уровня улучшения для данного кадра для создания комбинированных данных базового уровня/уровня улучшения. Эти комбинированные данные подвергаются деквантизации 92 и обратному преобразованию 94, а затем суммируются сумматором 96 с остаточными данными из буфера 98. Выход представляет собой комбинированные декодированные данные базового уровня и уровня улучшения, дающие повышенный уровень качества по отношению к базовому уровню, но при этом может потребоваться только одноуровневая обработка.
В общем, в буферах 86 и 98 базового уровня и уровня улучшения могут запоминаться восстановленные опорные видеоданные, заданные файлами конфигурации в целях компенсации движения. При приеме битовых потоков как базового уровня, так и уровня улучшения простое масштабирование коэффициентов дискретного косинусного преобразования (DCT) базового уровня и суммирование их с коэффициентами DCT уровня улучшения может поддерживать одноуровневое кодирование, при котором для двух уровней данных выполняется только единственная операция деквантизации и обратного DCT.
b
e
Согласно некоторым аспектам масштабирование данных базового уровня может сопровождаться простой операцией битового сдвига. Например, если параметр квантования (QP) базового уровня на шесть уровней больше параметра QP уровня улучшения, то есть если QP-QP=6, то комбинированные данные базового уровня и уровня улучшения могут быть выражены следующим образом:
enh
base
enh
e
-1
где С' представляет комбинированный коэффициент после масштабирования коэффициента C базового уровня и добавления его к исходному коэффициенту С уровня улучшения, а Q  представляет операцию деквантизации, применяемую к уровню улучшения.
На фиг. 7 представлена блок-схема, иллюстрирующая объединение коэффициентов базового уровня и уровня улучшения в видеодекодере. Как показано на фиг. 7, модуль 27 компонентов NAL определяет, когда абонентское устройство 16 принимает видеоданные обоих уровней: базового уровня и уровня улучшения (100), например, путем обращения к элементам синтаксиса компонента NAL, указывающих тип расширения компонента NAL. Если приняты видеоданные базового уровня и уровня улучшения, то модуль 27 компонентов NAL также проверяет один или несколько дополнительных синтаксических элементов в заданном компоненте NAL, чтобы определить, имеет ли каждый базовый макроблок (MB) ненулевые коэффициенты (102). Если это так (ветвь ДА от этапа 102), то объединитель 28 преобразует коэффициенты уровня улучшения в сумму существующих коэффициентов уровня улучшения для соответствующего совмещенного MB плюс коэффициенты базового уровня с увеличенным масштабом для совмещенного MB (104).
В этом случае коэффициенты для модуля 46 деквантизации и модуля 48 обратного преобразования являются суммой масштабированных коэффициентов базового уровня и коэффициентов уровня улучшения, которая выражается как COEFF=SCALEDBASE_COEFF+ENH_COEFF (104). Таким образом, объединитель 38 объединяет данные уровня улучшения и базового уровня в единый уровень для модуля 46 деквантизации и модуля 48 обратного преобразования видеодекодера 28. Если MB базового уровня, совмещенный с уровнем улучшения, не имеет ненулевых коэффициентов (ветвь НЕТ из этапа 102), то тогда коэффициенты уровня улучшения не суммируются с коэффициентами базового уровня. Вместо этого коэффициенты для модуля 46 деквантизации и модуля 48 обратного преобразования являются коэффициентами уровня улучшения, что можно представить как COEFF=ENH_COEFF (108). Модуль 46 деквантизации и модуль 48 обратного преобразования декодируют MB (106), используя либо коэффициенты уровня улучшения (108), либо комбинированные коэффициенты базового уровня и уровня улучшения (104).
На фиг. 8 представлена блок-схема, иллюстрирующая процесс кодирования битового потока масштабируемых видеоданных для включения в него множества приведенных в качестве примера синтаксических элементов для поддержки достаточно простой видеомасштабируемости. Эти различные синтаксические элементы могут быть вставлены в компоненты NAL, несущие видеоданные уровня улучшения, для идентификации типа данных, переносимых в компоненте NAL, и обмена информацией, помогающей при декодировании видеоданных уровня улучшения. В общем случае синтаксические элементы с соответствующей семантикой могут быть созданы модулем 23 компонентов NAL и вставлены в компоненты NAL перед передачей от вещательного сервера 12 абоненту 16. Как один из примеров, модуль 23 компонентов NAL может установить параметр типа компонента NAL, например, nal_unit_type в компоненте NAL, равным выбранному значению (например, 30), чтобы указать, что компонент NAL является специализированным компонентом NAL, который может включать в себя видеоданные уровня улучшения. Другие синтаксические элементы и связанные с ними значения, как здесь описано, могут быть сформированы модулем 23 компонентов NAL для облегчения обработки и декодирования видеоданных уровня улучшения, переносимых в различных компонентах NAL. Один или несколько синтаксических элементов могут быть включены в первый компонент NAL, включающий видеоданные базового уровня, второй компонент NAL, включающий видеоданные уровня улучшения, или в оба, чтобы указать на наличие видеоданных уровня улучшения во втором компоненте NAL.
Синтаксические элементы и семантика более подробно описываются ниже. На фиг. 8 показан процесс применительно к передаче видеоданных как базового уровня, так и уровня улучшения. В большинстве случаев будут передаваться оба вида видеоданных: базового уровня и уровня улучшения. Однако некоторые абонентские устройства 16 будут принимать только компоненты NAL, несущие видеоданные базового уровня, из-за расстояния до передающей башни 14, помех или других факторов. Однако с точки зрения вещательного сервера 12 видеоданные базового уровня и видеоданные уровня улучшения посылаются независимо от возможности некоторых абонентских устройств 16 принимать оба уровня.
Как показано на фиг. 8, кодированные видеоданные базового уровня и кодированные видеоданные уровня улучшения от кодера 32 базового уровня и кодера 34 уровня улучшения соответственно, принимаются модулем 23 компонентов NAL и вставляются в соответствующие компоненты NAL как полезная нагрузка. В частности, модуль 23 компонентов NAL вставляет кодированные видеоданные базового уровня в первый компонент NAL (110) и вставляет кодированные видеоданные уровня улучшения во второй компонент NAL (112). Поддерживая видеодекодер 28, модуль 23 компонентов NAL вставляет в первый компонент NAL значение, указывающее, что тип компонента NAL для первого компонента NAL представляет собой полезную нагрузку RBSP, содержащую видеоданные базового уровня (114). Вдобавок, модуль 23 компонентов NAL вставляет во второй компонент NAL значение, указывающее, что типом расширенного компонента NAL для второго компонента NAL является RBSP, содержащая видеоданные уровня улучшения (116). Эти значения могут быть связаны с конкретными синтаксическими элементами. Таким путем модуль 27 компонентов NAL в абонентском устройстве 16 может различить компоненты NAL, содержащие видеоданные базового уровня, и видеоданные уровня улучшения, и обнаружить, когда видеодекодеру 28 следует инициировать обработку масштабируемых видеоданных. Битовый поток базового уровня может строго соответствовать точному формату H.264, в то время как битовый поток уровня улучшения может включать в себя расширенный синтаксический элемент битового потока, например, “extended_nal_unit_type” в заголовке компонента NAL. С точки зрения видеодекодера 28 синтаксический элемент в заголовке компонента NAL, например, “extension flag” указывает битовый поток уровня улучшения и запускает соответствующую обработку видеодекодером.
Если данные уровня улучшения включают в себя (I) данные с внутрикадровым кодированием (118), то модуль 23 компонентов NAL вставляет значение синтаксического элемента во второй компонент NAL, чтобы указать наличие внутренних данных (120) в данных уровня улучшения. Таким путем модуль 27 компонентов NAL может послать в видеодекодер 28 информацию, указывающую, что необходима внутренняя (I) обработка видеоданных уровня улучшения во втором компоненте NAL, в предположении, что второй компонент NAL надежно принят абонентским устройством 16. В любом случае, включает ли уровень улучшения в себя данные с внутрикадровым кодированием или нет (118), модуль 23 компонентов NAL также вставляет значение синтаксического элемента во второй компонент NAL, чтобы указать, следует ли выполнить добавление видеоданных базового уровня к видеоданным уровня улучшения в пиксельной области или области преобразования (122), в зависимости от того, какая область задана кодером 34 уровня улучшения.
Если в уровне улучшения присутствуют остаточные данные (124), то модуль 23 компонентов NAL вставляет значение во второй компонент NAL, чтобы указать на присутствие остаточной информации в уровне улучшения (126). В любом случае, присутствуют ли остаточные данные или нет, модуль 23 компонентов NAL также вставляет значение во второй компонент NAL, чтобы указать объем набора параметров, переносимых во втором компоненте NAL (128). Как далее показано на фиг. 8, модуль 23 компонентов NAL также вставляет значение во второй компонент NAL, то есть компонент NAL, несущий видеоданные уровня улучшения, чтобы идентифицировать блоки с внутрикадровым кодированием, например, макроблоки (MB), имеющие ненулевые коэффициенты, превышающие единицу (130).
Вдобавок модуль 23 компонентов NAL вставляет значение во второй компонент NAL, чтобы указать кодированные блочные шаблоны (CBP) для блоков с внутрикадровым кодированием в видеоданных уровня улучшения, переносимых вторым компонентом NAL (132). Идентификация блоков с внутрикадровым кодированием с ненулевыми коэффициентами, превышающими единицу, и идентификация шаблонов CBP для блочных шаблонов с межкадровым кодированием помогает видеодекодеру 28 в абонентском устройстве 16 при выполнении масштабируемого видеодекодирования. В частности, модуль 27 компонентов NAL обнаруживает различные синтаксические элементы и подает команды в энтропийный декодер 40 и объединитель 38 для эффективной обработки видеоданных базового уровня и уровня улучшения в целях их декодирования.
Например, наличие данных уровня улучшения в компоненте NAL может быть указано синтаксическим элементом “nal_unit_type”, который указывает специализированный компонент NAL, для которого задан конкретный процесс декодирования. Значение nal_unit_type в незаданном диапазоне стандарта H.264, например, значение 30, можно использовать для указания на то, что компонент NAL является специализированным компонентом NAL. Синтаксический элемент “extension_flag” в заголовке компонента NAL указывает, что специализированный компонент NAL включает в себя расширенную RBSP компонента NAL. Следовательно, nal_unit_type и extension_flag вместе могут указывать, включает ли компонент NAL в себя данные уровня улучшения. Синтаксический элемент “extended_nal_unit_type” указывает конкретный тип данных уровня улучшения, содержащихся в компоненте NAL.
Указание о том, следует ли видеодекодеру 28 использовать добавление в пиксельной области или области преобразования, может быть показано синтаксическим элементом “decoding_mode_flag” в заголовке слоя улучшения “enh_slice_header”. Указание о том, имеются ли данные с внутрикадровым кодированием в уровне улучшения, может быть обеспечено синтаксическим элементом “refine_ intra_mb_flag”. Указание о блоках с внутрикадровым кодированием, имеющих ненулевые коэффициенты, и внутреннем шаблоне CBP может быть показано синтаксическими элементами, такими как “enh_intra16×16_macroblock_cbp()” для MB 16×16 с внутрикадровым кодированием в уровне макроблоков уровня улучшения (enh_macroblock_layer) и “coded_block_pattern” для режима с внутрикадровым кодированием блоков 4×4 в enh_macroblock_layer. Шаблон CBP с внутрикадровым кодированием может быть указан синтаксическим элементом “enh_coded_block_pattern” в enh_macroblock_layer. Конкретные наименования синтаксических элементов, хотя они были приведены в иллюстративных целях, могут подвергаться изменениям. Соответственно эти наименования не следует рассматривать как ограничение функций и указаний, связанных с упомянутыми синтаксическими элементами.
На фиг. 9 представлена блок-схема, иллюстрирующая процесс декодирования масштабируемого битового видеопотока для обработки множества различных приведенных в качестве примера синтаксических элементов для поддержки достаточно простой видеомасштабируемости. Процесс декодирования, показанный на фиг. 9, в общем случае является обратным по отношению к процессу кодирования, показанному на фиг. 8, в том смысле, что он выдвигает на первый план обработку различных синтаксических элементов в полученном компоненте NAL уровня улучшения. Как показано на фиг. 9, после приема компонента NAL приемником/демодулятором 26 (134) модуль 27 компонентов NAL определяет, включает ли компонент NAL в себя значение синтаксического элемента, указывающее, что компонент NAL содержит видеоданные уровня улучшения (136). Если нет, то декодер 28 использует только обработку видеоданных базового уровня (138). Однако в том случае, если тип компонента NAL указывает на данные уровня улучшения, то модуль 27 компонентов NAL анализирует данный компонент NAL, чтобы обнаружить другие синтаксические элементы, связанные с видеоданными уровня улучшения. Дополнительные синтаксические элементы помогают декодеру 28 обеспечить эффективное и упорядоченное декодирование видеоданных как базового уровня, так и уровня улучшения.
Например, модуль 27 компонентов NAL определяет, включают ли видеоданные уровня улучшения в компоненте NAL в себя данные с внутрикадровым кодированием (142), например, путем обнаружения подходящего значения синтаксического элемента. Вдобавок, модуль 27 компонентов NAL выполняет синтаксический анализ компонента NAL с целью обнаружения синтаксических элементов, указывающих, в какой области (пиксельной или преобразования) следует выполнить суммирование данных базового уровня и уровня улучшения (144), указано ли присутствие остаточных данных в уровне улучшения (146) и указан ли набор параметров и объем этого набора параметров (148). Модуль 27 компонентов NAL также обнаруживает синтаксические элементы, идентифицирующие блоки с внутрикадровым кодированием с ненулевыми коэффициентами, большими единицы, (150) в уровне улучшения, и синтаксические элементы, указывающие шаблоны CBP для блоков с межкадровым кодированием в видеоданных уровня улучшения (152). На основе определений, обеспеченных указанными синтаксическими элементами, модуль 27 компонентов NAL предоставляет видеодекодеру 28 соответствующие указания для их использования при декодировании видеоданных базового уровня и уровня улучшения (154).
В примерах на фигурах 8 и 9 компоненты NAL уровня улучшения могут нести синтаксические элементы с множеством различных указаний уровня улучшения, помогающих видеодекодеру 28 при обработке компонента NAL. Например, эти разнообразные указания могут включать в себя указание о том, содержит ли компонент NAL видеоданные уровня улучшения с внутрикадровым кодированием, указание о том, следует ли декодеру использовать добавление видеоданных уровня улучшения к данным базового уровня в пиксельной области или области преобразования, и/или указание о том, включают ли в себя видеоданные уровня улучшения какие-либо остаточные данные, относящиеся к видеоданным базового уровня. Как дополнение к вышеприведенным примерам, компоненты NAL уровня улучшения также могут нести синтаксические элементы, указывающие, включает ли в себя компонент NAL параметр последовательности, набор параметров изображения, слой опорного изображения или раздел данных слоя опорного изображения.
Другие синтаксические элементы могут идентифицировать блоки в видеоданных уровня улучшения, содержащих ненулевые значения коэффициентов, указывать количество ненулевых коэффициентов в блоках с внутрикадровым кодированием в видеоданных уровня улучшения с величиной, превышающей единицу, и указывать кодированные блочные шаблоны для блоков с межкадровым кодированием в видеоданных уровня улучшения. Опять же, примеры, предложенные на фигурах 8 и 9, не следует рассматривать как ограничение. В компонентах NAL уровня улучшения может быть обеспечено много дополнительных синтаксических элементов и семантик, некоторые из которых обсуждаются ниже.
Далее более подробно описываются примеры синтаксиса уровня улучшения с обсуждением применяемой семантики. Согласно некоторым аспектам, как обсуждалось выше, компоненты NAL могут быть использованы при кодировании и/или декодировании мультимедийных данных, включая в себя видеоданные базового уровня и видеоданные уровня улучшения. В указанных случаях общий синтаксис и структура компонентов NAL уровня улучшения могут быть такими же, как в стандарте H.264. Однако специалистам в данной области техники должно быть ясно, что можно использовать и другие блоки. В альтернативном варианте можно ввести новые значения типа компонента NAL (nal_unit_type), которые задают тип структуры данных необработанной байтовой последовательной полезной нагрузки (RBSP), содержащейся в компоненте NAL уровня улучшения.
В общем, синтаксис уровня улучшения, описанный в этом изобретении, можно охарактеризовать семантикой с низкими непроизводительными издержками и невысокой сложностью, например, одноуровневым декодированием. Синтаксис макроблоков уровня улучшения можно охарактеризовать высокой эффективностью сжатия, причем этот синтаксис может задать синтаксические элементы для блочных шаблонов (CBP) 16×16 уровня улучшения с внутрикадровым кодированием, шаблоны CBP для макроблоков с межкадровым кодированием уровня улучшения и новое энтропийное декодирование, использующее кодирующие таблицы контекстно-адаптивного кодирования кодами переменной длины (CAVLC) для макроблоков MB уровня улучшения с внутрикадровым кодированием.
При низких непроизводительных издержках синтаксис слоев и макроблоков (MB) задает связь слоя уровня улучшения с совмещенным слоем базового уровня. Режимы предсказания для макроблоков и векторы движения в синтаксисе базового уровня могут выражаться в синтаксисе базового уровня. Режимы MB для уровня улучшения можно получить из режимов MB для совмещенного базового уровня. Кодированный блочный шаблон (CBP) MB уровня улучшения можно декодировать двумя разными способами в зависимости от шаблона CBP для MB совмещенного базового уровня.
При низкой сложности одноуровневое декодирование можно выполнить путем простого объединения операций для битовых потоков базового уровня и уровня улучшения, чтобы упростить декодер и снизить энергопотребление. В этом случае коэффициенты базового уровня могут быть преобразованы к масштабу уровня улучшения, например, путем умножения на масштабный коэффициент, которое можно выполнить путем разрядного сдвига на основе разности параметров квантования (QP) между базовым уровнем и уровнем улучшения.
Также для низкой сложности может быть предусмотрен синтаксический элемент refine_intra_mb_flag, указывающий наличие MB с внутрикадровым кодированием в слое P уровня улучшения. По умолчанию может быть установлено значение refine_ intra_mb_flag==0, разрешающее одноуровневое декодирование. В этом случае нет уточнений для макроблоков MB с внутрикадровым кодированием на уровне улучшения. Это не будет неблагоприятным образом влиять на визуальное качество, даже если макроблоки MB с внутрикадровым кодированием кодируются с качеством базового уровня. В частности, MB с внутрикадровым кодированием обычно соответствуют вновь появившейся визуальной информации, а человеческий глаз не чувствителен к ней в начале. Однако для расширения еще может быть предусмотрено значение refine_intra_mb_flag=1.
При высокой эффективности сжатия шаблон CBP для MB 16×16 с внутрикадровым кодированием уровня улучшения может быть обеспечен таким образом, что часть коэффициентов с внутрикадровым кодированием для макроблоков 16×16 уровня улучшения определяется на основе режимов предсказания яркости базового уровня для макроблоков 16×16 с внутрикадровым кодированием. CBP MB 16×16 с внутрикадровым кодированием уровня улучшения декодируются двумя различными способами в зависимости от CBP макроблока совмещенного базового уровня. В случае 1, когда не все коэффициенты АС базового уровня являются нулевыми, CBP для макроблоков 16×16 уровня улучшения с внутрикадровым кодированием декодируются согласно стандарту H.264. Может быть предусмотрен синтаксический элемент (например, BaseLayerAcCoefficientsAllZero) в качестве флага, который указывает, все ли коэффициенты АС соответствующего макроблока в слое базового уровня равны нулю. В случае 2, когда все коэффициенты AC базового уровня нулевые, для передачи CBP макроблоков 16×16 с внутрикадровым кодированием может быть обеспечен новый подход. А именно, MB уровня улучшения разбивается на 4 подраздела MB в зависимости от режимов предсказания для макроблоков яркости 16×16 с внутрикадровым кодированием базового уровня.
Может быть предусмотрен CBP для МВ уровня улучшения с внутрикадровым кодированием для задания того, какой из шести блоков 8х8 яркости и цветности содержит ненулевые коэффициенты. CBP для MB уровня улучшения декодируются двумя способами в зависимости от CBP для MB совмещенного базового уровня. В случае 1, когда CBP для MB совмещенного базового уровня (base_coded_block_pattern или base_cbp) равен нулю, CBP для MB уровня улучшения (enh_coded_block_pattern или enh_cbp) декодируется согласно стандарту H.264. В случае 2, когда base_coded_block_pattern не равен нулю, можно обеспечить новый подход для выражения enh_coded_block_pattern. Для блока 8х8 базового уровня с ненулевыми коэффициентами один бит используют для указания о том, имеет ли блок 8х8 совмещенного уровня улучшения ненулевые коэффициенты. Состояние других блоков 8х8 представляют с помощью кодирования с переменной длиной слова (VLC).
В качестве дальнейшего уточнения для макроблоков MB уровня улучшения с внутрикадровым кодированием может быть предусмотрено новое энтропийное декодирование (таблицы CAVLC), для представления количества ненулевых коэффициентов в MB уровня улучшения с внутрикадровым кодированием. Синтаксический элемент enh_coeff_token 0(16 может представлять количество ненулевых коэффициентов от 0 до 16, при условии, что нет коэффициентов, превышающих 1. Синтаксический элемент enh_coeff_token 17 представляет, что есть, по меньшей мере, один ненулевой коэффициент, превышающий по величине 1. В этом случае, (enh_coeff_token 17) для декодирования всего количества ненулевых коэффициентов и коэффициентов с единицей на конце используется стандартный подход. enh_coeff_token (0(16) декодируют, используя одну из восьми таблиц VLC, исходя из контекста.
В этом описании различные сокращения должны интерпретироваться так, как это определено в пункте 4 стандарта H.264. Правила можно интерпретировать, как это задано в пункте 5 стандарта H.264, а форматы исходных, кодированных, декодированных и выходных данных, процессы сканирования и соседние взаимосвязи можно интерпретировать, как это задано в пункте 6 стандарта H.264.
Вдобавок, исходя из целей данного описания, можно применять следующие определения. Термин «базовый уровень» в общем случае относится к битовому потоку, содержащему кодированные видеоданные, которые представляют первый уровень пространственно-временной-SNR масштабируемости, определенной этим описанием. Битовый поток базового уровня можно декодировать любым подходящим декодером с расширенным профилем стандарта H.264. Синтаксический элемент BaseLayerAcCoefficientsAllZero является переменной, которая, будучи не равной 0, указывает, что все коэффициенты AC совмещенного макроблока в базовом уровне являются нулевыми.
Синтаксический элемент BaseLayerIntra16x16PredMode имеет значения 0, 1, 2 или 3, которые соответствуют Intra_16×16_Vertical, Intra_16×16_Horizontal, Intra_16×16_DC и Intra_16×16_Planar соответственно. Эта переменная равна переменной Intra16x16PredMode, как это задано в пункте 8.3.3 стандарта H.264. Синтаксический элемент BaseLayerMBType является переменной, которая указывает тип совмещенного макроблока в базовом уровне. Эта переменная может быть равна синтаксическому элементу mb_type, заданному в пункте 7.3.5 стандарта H.264.
Термин «слой базового уровня» (или base_layer_slice) относится к слою, который кодируется согласно пункту 7.3.3 стандарта H.264 и который имеет соответствующий слой уровня улучшения, заданный в этом описании с тем же порядковым номером изображения, как это определено в пункте 8.2.1 стандарта H.264. Элемент BaseLayerSliceType (или base_layer_slice_type) является переменной, которая указывает тип совмещенного слоя в базовом уровне. Эта переменная равна синтаксическому элементу slice_type, как задано в пункте 7.3.3 стандарта H.264.
Термин «уровень улучшения» в общем случае относится к битовому потоку, содержащему кодированные видеоданные, которые представляют второй уровень пространственно-временной-SNR масштабируемости. Битовый поток уровня улучшения можно декодировать только вместе с базовым уровнем, то есть он содержит ссылки на декодированные видеоданные базового уровня, которые используются для создания конечных декодированных видеоданных.
Четвертной макроблок относится к одной четверти отсчетов макроблока, которые являются результатом разбиения макроблока на разделы. Это определение аналогично определению субмакроблока в стандарте H.264 за исключением того, что четвертные макроблоки могут принимать неквадратную (например, прямоугольную) форму. Термин «раздел четвертного макроблока» относится к блоку отсчетов яркости и двум соответствующим блокам отсчетов цветности, являющихся результатом разбиения четвертного макроблока для межкадрового предсказания или внутрикадрового уточнения. Это определение может быть идентично определению раздела субмакроблока в стандарте H.264 за исключением того, что в данном описании введен термин «внутрикадровый».
Термин «раздел макроблока» относится к блоку отсчетов яркости и двум соответствующим блокам отсчетов цветности, являющихся результатом разбиения макроблока для межкадрового предсказания или внутрикадрового уточнения. Это определение идентично определению в стандарте H.264 за исключением того, что в данном описании введен термин «внутрикадровый». Кроме того, формы разделов макроблоков, определенных в этом описании, могут отличаться от определенных в стандарте H.264.
Синтаксис уровня улучшения
Синтаксис RBSP
Ниже в таблице 1 представлены примеры типов RBSP для достаточно простой видеомасштабируемости.
Таблица 1Необработанная байтовая последовательная нагрузка и хвостовые биты RBSP
RBSP
Описание
RBSP набора параметров последовательности
Набор параметров последовательности посылается только на базовом уровне
RBSP набора параметров изображения
Набор параметров изображения посылается только на базовом уровне
Синтаксис RBSP раздела данных слоя
Синтаксис RBSP раздела данных слоя уровня улучшения соответствует стандарту H.264
Как было указано выше, синтаксис RBSP уровня улучшения может быть такой же, как в указанном стандарте за исключением того, что набор параметров последовательности и набор параметров изображения могут посылаться на базовом уровне. Например, синтаксис RBSP набора параметров последовательности, синтаксис RBSP набора параметров изображения и RBSP раздела данных слоя, закодированный в уровне улучшения, могут иметь синтаксис, заданный в пункте 7 стандарта ITU-T H.264.
В различных таблицах в данном описании все синтаксические элементы могут иметь подходящий синтаксис и семантику, указанные в стандарте ITU-T H.264, в пределах указанных синтаксических элементов, описанных в стандарте H.264, если не задано иное. В общем случае синтаксические элементы и семантика, не описанные в стандарте H.264, описаны в данном изобретении.
В различных таблицах в данном описании в столбце с отметкой «С» перечислены категории синтаксических элементов, которые могут быть представлены в компоненте NAL, которые могут соответствовать категориям в стандарте H.264. Вдобавок, могут присутствовать синтаксические элементы с синтаксической категорией «Все», как определено синтаксисом и семантикой структуры данных RBSP.
Наличие или отсутствие любых синтаксических элементов конкретной перечисленной категории определяется исходя из синтаксиса и семантики соответствующей структуры данных RBSP. Столбец дескриптора задает дескриптор, например, f(n), u(n), b(n), ue(v), se(v), me(v), ce(v), которые могут в общем случае соответствовать дескрипторам, заданным в стандарте H.264, если в данном описании не задано иное.
Расширенный синтаксис компонентов NAL
Синтаксис для компонентов NAL применительно к расширениям для видеомасштабируемости согласно одному аспекту этого изобретения может быть, в общем, задан, как это показано ниже в таблице 2.
Таблица 2Синтаксис компонентов NAL для расширений
nal_unit(NumBytesInNALunit) {
<b>С</b>
<b>Дескриптор</b>
forbidden zero bit
Все
f(1)
nal_ref_idc
Все
u(2)
nal_unit_type /* equal to 30 */
Все
u(5)
reserved_zero_lbit
Все
u(1)
extension_flag
Все
u(1)
если (! extension flag) {
enh_profile_idc
Все
u(3)
reserved_zero_3bits
Все
u(3)
} в противном случае
{
extended_nal_unit_type
Все
u(6)
NumBytesInRBSP=0
для (i=1; i<NumBytesInNALunit; i++ ) {
если (i+2<NumBytesInNALunit && next_bits(24)==0x000003) {
rbsp_byte[ NumBytesInRBSP++ ]
Все
b(8)
rbsp_byte[ NumBytesInRBSP++ ]
Все
b(8)
i+=2
emulation_prevention_three_byte /* equal to 0x03 */
Все
f(8)
} в противном случае
rbsp_byte[ NumBytesInRBSP++ ]
Все
b(8)
}
}
}
В вышеприведенной таблице 2 значение nal_unit_type устанавливается равным 30, чтобы указать конкретное расширение для обработки уровня улучшения. Когда nal_unit_type установлен равным выбранному значению, например, 30, компонент NAL указывает, что он несет данные уровня улучшения, запускающие обработку уровня улучшения декодером 28. Значение nal_unit_type обеспечивает уникальный выделенный nal_unit_type для поддержки обработки дополнительных модификаций синтаксиса битового потока уровня улучшения вдобавок к битовому потоку стандарта H.264. В качестве примера nal_unit_type может быть присвоено значение 30, чтобы показать, что компонент NAL включает в себя данные уровня улучшения и запустить обработку дополнительных синтаксических элементов, которые могут присутствовать в компоненте NAL, таких как, например, extension_flag и extended_nal_unit_type. Например, синтаксический элемент extended_nal_unit_type устанавливают равным некоторому значению, задающему тип расширения. В частности, extended_nal_unit_type может указать тип компонента NAL уровня улучшения. Элемент extended_nal_unit_type может указать тип структуры данных RBSP для данных уровня улучшения в компоненте NAL. Для В-слоев синтаксис заголовков слоев может соответствовать стандарту H.264. Далее в этом описании будет подробно описана применяемая семантика.
Синтаксис заголовка слоя
Для I-слоев и P-слоев на уровне улучшения синтаксис заголовка слоя может быть определен, как это показано ниже в таблице 3А. Другие параметры для слоя уровня улучшения, включая информацию опорного кадра, можно получить из совмещенного слоя базового уровня.
Таблица 3АСинтаксис заголовка слоя
enh_slice_header() {
<b>С</b>
<b>Дескриптор</b>
first_mb_in_slice
2
ue(v)
enh_slice_type
2
ue(v)
pic_parameter_set_id
2
ue(v)
frame_num
2
u(v)
Если (pic_order_cnt_type==0) {
pic_order_cnt_lsb
2
u(v)
если (pic_order_present_flag && !field_pic flag)
delta_pic_order_cnt_bottom
2
ue(v)
}
Если (pic_order_cnt_type==1&& !delta_pic_order_always_zero_flag) {
delta_pic_order_cnt[0]
2
se(v)
если (pic_order_present_flag && !field_pic_flag)
delta_pic_order_cnt[1]
2
se(v)
}
если (redundant_pic_cnt_present_flag)
redundant_pic_cnt
2
ue(v)
decoding_mode
2
ue(v)
если (base_layer_slice_type!=I)
Refine_intra_MB
2
f(l)
Slice_qp_delta
2
se(v)
}
Элемент base_layer_slice может относиться к слою, закодированному, например, согласно пункту 7.3.3 стандарта H.264, который имеет соответствующий слой уровня улучшения, закодированный согласно таблице 2 с тем же порядковым номером, как определено, например, в пункте 8.2.1 стандарта Н.264. Элемент base_layer_slice_type относится к типу слоя базового уровня, например, как это задано в пункте 7.3 стандарта Н.264. Другие параметры для слоя уровня улучшения, включая информацию опорного кадра, получают из слоя совмещенного базового слоя.
В синтаксисе заголовка слоя параметр refine_intra_MB указывает, включают ли видеоданные уровня улучшения в компоненте NAL в себя видеоданные с внутрикадровым кодированием. Если refine_intra_MB равен 0, то внутрикадровое кодирование существует только на базовом уровне. Соответственно, внутрикадровое декодирование уровня улучшения может быть опущено. Если refine_intra_MB равен 1, то видеоданные с внутрикадровым кодированием присутствуют как на базовом уровне, так и на уровне улучшения. В этом случае могут обрабатываться данные с внутрикадровым кодированием уровня улучшения для повышения качества данных с внутрикадровым кодированием базового уровня.
Синтаксис данных слоя
Примерный синтаксис данных слоя может быть обеспечен, как это задано в приведенной ниже таблице 3В.
Таблица 3ВСинтаксис данных слоя
enh_slice_data() {
<b>С</b>
<b>Дескриптор</b>
CurrMbAddr=first_mb_in_slice
moreDataFlag=1
do{
если (moreDataFlag) {
если (BaseLayerMbType!=SKIP && (refine_intra_mb_flag ||(BaseLayerSliceType !=I && BaseLayerMbType!=I)) )
enh_macroblock_layer()
}
CurrMbAddr=NextMbAddress(CurrMbAddr)
moreDataFlag=more_rbsp_data()
} while (moreDataFlag )
}
Синтаксис уровня макроблоков
Примерный синтаксис для макроблоков уровня улучшения может быть обеспечен, как это показано в приведенной ниже таблице 4.
Таблица 4Синтаксис MB уровня улучшения
enh_macroblock_layer() {
С
Дескрип-тор
если (MbPartPredMode(BaseLayerMbType, 0)== Intra_16×16) {
enh_intral6×16 macroblock_cbp()
если (mb_intral6×16_luma_flag || mb_intral6×16 chroma_flag) {
mb_qp_delta
2
se(v)
enh_residual()
3|4
}
}
в противном случае если (MbPartPredMode(BaseLayerMbType, 0)==Intra_4×4) {
coded_block_pattern
2
me(v)
если (CodedBlockPatternLuma>0 || CodedBlockPatternChroma>0) {
mb_qp_delta
enh_residual()
}
}
в противном случае {
enh_coded_block_pattern
2
me(v)
EnhCodedBlockPatternLuma=enh_coded_block_pattern % 16 EnhCodedBlockPatternChroma=enh_coded_block_pattern/16
если (EnhCodedBlockParternLuma>0 || EnhCodedBlockPatternChroma>0){
mb_qp_delta
2
se(v)
residual()/* Standard compliant syntax as specified in clause 7.3.5.3 [1] */
}
}
}
Другие параметры для уровня макроблоков расширения получают из уровня макроблоков базового уровня для соответствующего макроблока в соответствующем параметре base_layer_slice.
В приведенной выше таблице 4 синтаксический элемент enh_coded_block_pattern в общем случае указывает, включают ли видеоданные уровня улучшения в MB уровня улучшения в себя остаточные данные, относящиеся к данным базового уровня. Другие параметры для уровня макроблоков расширения получают из уровня макроблоков базового уровня для соответствующего макроблока в соответствующем параметре base_layer_slice.
Синтаксис кодированного блочного шаблона (CBP) для макроблоков с внутрикадровым кодированием
Для макроблоков 4х4 с внутрикадровым кодированием синтаксис CBP может быть таким же, как в стандарте Н.264, например, как в пункте 7 стандарта Н.264. Для макроблоков 16х16 с внутрикадровым кодированием может быть обеспечен новый синтаксис для кодирования информации о CBP, как это показано в таблице 5, приведенной ниже.
Таблица 5Синтаксис CBP макроблоков 16×16 с внутрикадровым кодированием
enh_intral6×16_macroblock_cbp() {
С
Дескриптор
mb_intral6×16_luma_flag
2
u(1)
eсли (mb_intral6×16_luma_flag) {
eсли (BaseLayerAcCoefficientsAllZero)
для (mbPartIdx=0;mbPartIdx<4;mbPartIdx++) {
mb_intral6×16_luma_part_flag[mbPartIdx]
2
u(1)
если (mb_intral6×16_luma_part flag[mbPartIdx] )
для (qtrMbPartIdx=0; qtrMbPartIdx<4; qtrMbPartIdx++)
qtr_mb_intral_6×16_luma_part_flag[mbPartldx] [qtrMbPartldxl
2
u(1)
mb_intral6×16_chroma_flag
2
u(1)
если (mb_intral6×16_chroma_flag) {
Mb_intral6×16_chroma_ac_flag
2
u(1)
}
Синтаксис остаточных данных
Синтаксис для остаточных MB с внутрикадровым кодированием в уровне улучшения, то есть синтаксис остаточных данных уровня улучшения, может быть таким, как показано ниже в таблице 6А. Для остаточных MB с внутрикадровым кодированием синтаксис может соответствовать стандарту Н.264.
Таблица 6АСинтаксис остаточных данных MB с внутрикадровым кодированием
enh_residual() {
С
Дескриптор
если (MbPartPredMode(BaseLayerMbType, 0)==Intra_16×16)
enh_residual_block_cavlc(Intra16×16DCLevel, 16)
3
для (mbPartldx=0; mbPartldx<4; mbPartIdx++ )
для (qtrMbPartldx=0; qtrMbPartldx<4; qtrMbPartIdx++)
если (MbPartPredMode(BaseLayerMbType, 0)==Intra_16×16 &&BaseLayerAcCoefficientsAllZero){
если (mb_intral6xl6_luma_part_flag[mbPartIdx] &&qtr_mb_intra16×16_luma_part_flag[mbPartIdx][qtrMbPartIdx] )
enh_residual_block_cavlc(Intra16x16ACLevel[mbPartldx*4+qtrMbPartIdx], 15)
3
в противном случае
для (i=0;i<15;i++)
Intra16×16ACLevel[mbPartldx*4+qtrMbPartldx ][i]=0
в противном случае если (EnhCodedBlockPatternLuma & (1 « mbPartldx)) {
если (MbPartPredMode(BaseLayerMbType, 0)==Intra_16×16 )
enh residual block cavlc(Intra16×16ACLevel[mbPartldx*4+qtrMbPartldx], 15)
3
в противном случае
enh residual block cavlc(LumaLevel[ mbPartldx* 4+qtrMbPartldx], 16)
3|4
} в противном случае {
если (MbPartPredMode(BaseLayerMbType, 0)== Intra_16×16)
для (i=0;i<15;i++)
Intra16×16ACLevel[mbPartldx*4+qtrMbPartldx][i]=0
в противном случае
для (i=0; i<16; i++)
LumaLevel[mbPartldx*4+qtrMbPartldx][i]=0
}
для (iCbCr=0; iCbCr<2; iCbCr++)
если (EnhCodedBlockPatternChroma & 3)/* chroma DC residual present*/
residual_block(ChromaDCLevel[iCbCr], 4)
3|4
в противном случае
для (i=0; i<4; i++)
ChromaDCLevel[iCbCr ][i]=0
для (iCbCr=0; iCbCr<2; iCbCr++ )
для (qtrMbPartldx=0; qtrMbPartldx<4; qtrMbPartIdx++ )
если (EnhCodedBlockPatternChroma & 2)/* chroma AC residual present */
residual_block(ChromaACLevel[iCbCr][qtrMbPartldx], 15)
3|4
в противном случае
для (i=0; i<15; i++ )
ChromaACLevel[iCbCr][qtrMbPartldx][i]=0
}
Другие параметры для остатка уровня улучшения получают из остатка базового уровня для совмещенного макроблока в соответствующем слое базового уровня.
Синтаксис CAVLC остаточных блоков
Синтаксис для контекстно-адаптивного кодирования кодами переменной длины (CAVLC) остаточных блоков может быть таким, как он задан в таблице 6B, приведенной ниже.
Таблица 6ВСинтаксис CAVLC остаточных блоков
enh_residual_block_cavlc(coeffLevel, maxNumCoeff) {
С
Дескриптор
для (i=0; i<maxNumCoeff; i++)
coeffLevel[i]=0
если ((MbPartPredMode(BaseLayerMbType, 0) == Intra_16×16 &&mb_intra16×16_luma_flag) || (MbPartPredMode(BaseLayerMbType, 0)==Intra_4×4 && CodedBlockPatternLuma) {
enh_coeff_token
3|4
ce(v)
если (enh_coeff_token==17) {
/* Standard compliant syntax as specified in clause 7.3.5.3.1 of H.264 */
}
в противном случае {
если (TotalCoeff(enh_coeff_token)>0) {
для (i=0; i<TotalCoeff(enh_coeff_token); i++)
enh_coeff_sign_flag[i]
3|4
u(l)
level[i]=1-2 * enh_coeff_sign_flag
если (TotalCoeff(enh_coeff_token)<maxNumCoeff) {
total_zeros
3|4
ce(v)
zerosLeft=total_zeros
} в противном случае
zerosLeft=0
для (i=0; i<Totalcoeff(enh_coeff token)-1; i++) {
если (zerosLeft>0) {
ran_before
3|4
ce(v)
ran[i]=ran_before
} в противном случае
ran[i]=0
zerosLeft=zerosLeft-ran[i]
}
ran[ TotalCoeff(enh_coeff_token)-1]=zerosLeft
coeffNum=-1
для (i=TotalCoeff(enh_coeff_token)-1; i>=0; i-) {
coeffNum+=ran[i]+ 1
coeffLevel[coeffNum]=level[i]
}
}
} в противном случае {
/* Подходящий стандартный синтаксис, заданный в пункте 7.3.5.3.1 стандарта Н.264*/
}
}
Другие параметры для CAVLC остаточных блоков уровня улучшения можно получить из CAVLC остаточных блоков базового уровня для совмещенного макроблока в соответствующем слое базового уровня.
Семантика уровня улучшения
Далее описывается семантика уровня улучшения. Семантика компонентов NAL уровня улучшения по существу может быть такой же, как синтаксис компонентов NAL, заданный стандартом Н.264 для синтаксических элементов, определенных в стандарте Н.264. Новые синтаксические элементы, не описанные в стандарте Н.264, имеют используемую семантику, описанную в этом изобретении. Семантика RBSP уровня улучшения и хвостовых бит RBSP может быть такой же, как в стандарте Н.264.
Семантика расширенных компонентов NAL
Обратимся к приведенной выше таблице 2, где параметр Forbidden_zero_bit задан как в пункте 7 спецификации стандарта Н.264. Значение nal_ref_idc, не равное 0, определяет, что контент расширенного компонента NAL содержит набор параметров последовательности, набор параметров изображения, слой опорного изображения или раздел данных слоя опорного изображения. Значение nal_ref_idc, равное 0, для расширенного компонента NAL, содержащего слой или раздел данных слоя, указывает, что слой или раздел данных слоя является частью не опорного изображения. Значение nal_ref_idc не будет равно 0 для набора параметров последовательности или компонентов NAL набора параметров изображения.
Когда nal_ref_idc равен 0 для одного слоя или расширенного компонента NAL раздела данных слоя для конкретного изображения, он будет равен 0 для всех слоев и расширенных компонентов NAL разделов данных слоев данного изображения. Значение nal_ref_idc не будет равно 0 для расширенных компонентов NAL c мгновенным обновлением декодирования (IDR), то есть компонентов NAL с extended_nal_unit_type, равным 5, как указано в таблице 7, приведенной ниже. Вдобавок, nal_ref_idc будет равен 0 для всех расширенных компонентов NAL, имеющих extended_nal_unit_type, равный 6, 9, 10, 11 или 12, как указано в приведенной ниже таблице 7.
Значение nal_unit_type равно 30 в диапазоне «не задано» стандарта Н.264, чтобы указать специализированный компонент NAL, процесс декодирования для которого задан в данном описании. Значение nal_unit_type не равно 30, как это определено в пункте 7 стандарта Н.264.
Значение extension_flag представляет собой одноразрядный флаг. Когда значение extension_flag равно 0, оно определяет, что следующие 6 бит зарезервированы. Когда extension_flag равнее 1, это определяет, что данный компонент NAL содержит RBSP расширенного компонента NAL.
Зарезервированное значение или reserved_zero_1bit является однобитовым флагом, используемым для будущих расширений к приложению, соответствующему nal_unit_type, равным 30. Значение enh_profile_idc указывает профиль, которому соответствует битовый поток. Значение reserved_zero_3bits является 3-битовым полем, зарезервированным для будущего использования. Значение extended_nal_unit_type задано ниже в таблице 7:
Таблица 7Коды типов расширенного компонента NAL
extended_nal_unit_type
Контент расширенного компонента NAL и структура синтаксиса RBSP
С
0
Не задано
1
Кодированный слой изображения, slice_layer_without_partitioning_rbsp() без IDR
2, 3, 4
2
Кодированный раздел А данных слоя slice_data_partition_a_layer_rbsp()
2
3
Кодированный раздел B данных слоя slice_data_partition_b_layer_rbsp()
3
4
Кодированный раздел C данных слоя slice_data_partition_c_layer_rbsp()
4
5
Кодированный слой изображения IDR slice_layer_without_partitioning_rbsp()
2, 3
6
Информация о дополнительном улучшении (SEI) sei_rbsp()
5
7
Набор параметров последовательности seq_parameter_set_rbsp()
0
8
Набор параметров изображения pic_parameter_set_rbsp()
1
9
Ограничитель блока доступа access_unit_delimiter_rbsp()
6
10…23
Зарезервировано
24…63
Не задано
Расширенные компоненты NAL, которые используют extended_nal_unit_type, равный 0 или в диапазоне от 24 до 63 включительно, не влияют на процесс декодирования, описанный в этом изобретении. Типы расширенного компонента NAL cо значениями 0 и от 24 до 63 можно использовать, как это определено данным приложением. Процесс декодирования для этих значений (0 и с 24 по 63) nal_unit_type не задан. В данном примере декодеры могут игнорировать, то есть устранять из битового потока и отбрасывать содержимое всех расширенных компонентов NAL, которые используют зарезервированные значения extended_nal_unit_type. Это потенциальное требование позволяет в будущем определить совместимые расширения. Значения rbsp_byte и emulation_prevention_three_byte задаются как в пункте 7 спецификации стандарта Н.264.
Семантика RBSP
Семантика RBSP уровня улучшения определяется как в пункте 7 спецификации стандарта Н.264.
Семантика заголовка слоя
Для семантики заголовка слоя синтаксический элемент first_mb_in_slice задает адрес первого макроблока в слое. Когда произвольный порядок слоев не разрешен, значение first_mb_in_slice будет не меньше значения first_mb_in_slice для любого другого слоя текущего изображения, который предшествует текущему слою в порядке декодирования. Адрес первого макроблока слоя можно получить следующим образом. Значение first_mb_in_slice является адресом первого макроблока в слое, а first_mb_in_slice находится в диапазоне от 0 до PicSizeInMbs - 1 включительно, где PicSizeInMbs является количеством мегабайт в изображении.
Элемент enh_slice_type задает тип кодирования слоя согласно приведенной ниже таблице 8.
Таблица 8Связь имен со значениями enh_slice_type
enh_slice_type
Имя enh_slice_type
0
P(P-слой)
1
В (В-слой)
2
I (I-слой)
3
SP (SP-слой) или не используется
4
SI (SI-слой) или не используется
5
P(P-слой)
6
В (В-слой)
7
I (I-слой)
8
SP (SP-слой) или не используется
9
SI (SI-слой) или не используется
Значения enh_slice_type в диапазоне от 5 до 9, вдобавок к типу кодирования текущего слоя, определяют, что все другие слои текущего кодированного изображения имеют значение enh_slice_type, равное текущему значению enh_slice_type или равное текущему значению slice_type-5. Согласно альтернативным аспектам значения enh_slice_type, равные 3, 4, 8 и 9, могут быть не используемыми. Когда extended_nal_unit_type равно 5, согласно изображению мгновенного обновления декодирования (IDR), slice_type может быть равен 2, 4, 7 или 9.
Синтаксический элемент pic_parameter_set_id задается как pic_parameter_set_id для соответствующего base_layer_slice. Элемент frame_num в компоненте NAL уровня улучшения будет таким же, как совмещенный слой базового уровня.
Аналогично, элемент pic_order_cnt_lsb в компоненте NAL уровня улучшения будет таким же, как pic_order_cnt_lsb для совмещенного слоя базового уровня (base_layer_slice). Семантика для delta_pic_order_cnt_bottom, delta_pic_order_cnt[o], delta_pic_order_cnt[1] и семантика redundant_pic_cnt задаются как в пункте 7.3.3 стандарта Н.264. Элемент decoding_mode_flag задает процесс декодирования для слоя улучшения, как показано ниже в таблице 9.
Таблица 9Спецификация decoding_mode_flag
decoding_mode_flag
Процесс
0
Добавление в пиксельной области
1
Добавление в области коэффициентов
В приведенной выше таблице 9 добавление в пиксельной области, указанное значением decoding_mode_flag, равным 0, в компоненте NAL означает, что слой уровня улучшения должен быть добавлен к слою базового уровня в пиксельной области для поддержки одноуровневого декодирования. Добавление в области коэффициентов, указанное значением decoding_mode_flag, равным 1, в компоненте NAL означает, что слой уровня улучшения может быть добавлен к слою базового уровня в области коэффициентов для поддержки одноуровневого декодирования. Таким образом, decoding_mode_flag обеспечивает синтаксический элемент, который указывает, следует ли декодеру использовать добавление видеоданных уровня улучшения к данным базового уровня в пиксельной области или в области преобразования.
Добавление в пиксельной области приводит к добавлению слоя уровня улучшения к слою базового уровня в пиксельной области следующим образом:
где Y обозначает яркость, Cb обозначает цветность синего, а Cr обозначает цветность красного и где Clip1Y - математическая функция, имеющая следующий вид:
Y
Y
Clip1(x)=Clip3(0, (1<<BitDepth)-1, x),
а Clip1С представляет собой следующую математическую функцию:
С
С
Clip1(x)=Clip3(0, (1<<BitDepth)-1, x),
и где Clip3 описывается в этом документе. Математические функции Clip1y, Clip1c и Clip3 определены в стандарте Н.264.
Добавление в области коэффициентов приводит к добавлению слоя уровня улучшения к слою базового уровня в области коэффициентов следующим образом:
LumaLevel[i][j]=k LumaLevel[i][j]base+LumaLevel[i][j]enh
ChromaLevel[i][j]=k ChromaLevel[i][j]base+ChromaLevel[i][j]enh
Где k - масштабный коэффициент, используемый для приведения коэффициентов базового уровня к масштабу QP уровня улучшения.
Синтаксический элемент refine_intra_MB в компоненте NAL уровня улучшения определяет, следует ли уточнять макроблоки MB с внутрикадровым кодированием на уровне улучшения в слоях, не являющихся I-слоями. Если refine_intra_MB равен 0, то MB с внутрикадровым кодированием не уточняются на уровне улучшения, и эти MB на уровне расширения будут пропущены. Если refine_intra_MB равен 1, то MB с внутрикадровым кодированием на уровне улучшения уточняются.
Y
Y
Элемент slice_qp_delta задает начальное значение параметра QP квантования яркости, подлежащего использованию для всех макроблоков в слое, пока оно не будет изменено на значение mb_qp_delta на уровне макроблока. Начальный параметр квантования QP для слоя вычисляется как:
Значение slice_qp_delta может быть ограничено, так что QPY окажется в диапазоне от 0 до 51 включительно. Значение pic_init_qp_minus26 указывает начальное значение QP.
Семантика данных слоя
Семантика данных слоя уровня улучшения может быть задана как в пункте 7.4.4 стандарта Н.264.
Семантика уровня макроблоков
Применительно к семантике уровня макроблоков элемент enh_coded_block_pattern задает, какой из шести блоков 8х8 (яркости и цветности) может содержать ненулевые уровни коэффициента преобразования. Семантика элемента mb_qp_delta может быть задана как в пункте 7.4.5 стандарта Н.264. Семантика для синтаксического элемента coded_block_pattern может быть задана как в пункте 7.4.5 стандарта Н.264.
Семантика кодированного блочного шаблона (CBP) макроблока 16х16 с внутрикадровым кодированием
Для I-слоев и P-слоев, когда refine_ intra_mb_flag равен 1, семантику CBP 16×16 с внутрикадровым кодированием определяет следующее описание. Макроблоки, которые имеют режим предсказания для макроблока совмещенного базового уровня с внутрикадровым кодированием (Intra_16×16), могут быть разбиты на 4 четвертных макроблока в зависимости от значений их коэффициентов АС и режима предсказания Intra_16×16 макроблока совмещенного базового уровня (BaseLayerIntra16×16PredMode). Если все коэффициенты АС базового уровня равны нулю, и, по меньшей мере, один коэффициент АС уровня улучшения не равен нулю, то макроблок уровня улучшения делят на 4 раздела макроблока в зависимости от BaseLayerIntra16×16PredMode.
Такое разбиение макроблока приводит к созданию разделов, называемых четвертными макроблоками. Каждый четвертной макроблок можно дополнительно разбить на 4×4 раздела четвертного макроблока. На фигурах 10 и 11 представлены схемы, иллюстрирующие разбиение макроблоков и четвертных макроблоков. На фиг. 10 показаны разделы макроблока уровня улучшения на основе режимов предсказания для блоков 16×16 базового уровня с внутрикадровым кодированием и их индексы, соответствующие пространственным положениям. На фиг. 11 показаны разделы четвертного макроблока уровня улучшения на основе разделов макроблока, показанных на фиг. 10, и их индексы, соответствующие пространственным положениям.
На фиг. 10 показан режим Intra_16×16_Vertical с четырьмя разделами MB, каждый из 4*16 выборок яркости и соответствующих выборок цветности, режим Intra_16×16_Horizontal с 4 разделами макроблока, каждый из 16*4 выборок яркости и соответствующих выборок цветности и режим Intra_16×16_DC или Intra_16×16_Planar с 4 разделами макроблока, каждый из 8*8 выборок яркости и соответствующих выборок цветности.
На фиг. 11 показано 4 четвертных вертикальных раздела макроблока, каждый из 4*4 выборок яркости и соответствующих выборок цветности, 4 четвертных горизонтальных раздела макроблока, каждой из 4*4 выборок яркости и соответствующих выборок цветности, и 4 четвертных DC или Планарных раздела макроблока, каждый из 4*4 выборок яркости и соответствующих выборок цветности.
Каждый раздел макроблока обозначен как mbPartIdx. Каждый раздел четвертного макроблока обозначен как qtrMbPartIdx. Как mbPartIdx, так и qtrMbPartIdx могут иметь значения, равные 0, 1, 2 или 3. Разделы макроблока и четвертного макроблока сканируются для уточнения внутрикадрового кодирования, как показано на фигурах 10 и 11. Прямоугольники соответствуют разделам. Число в каждом прямоугольнике задает индекс сканирования раздела макроблока или сканирования раздела четвертного макроблока.
Элемент mb_intra16×16_luma_flag, равный 1, определяет, что по меньшей мере один коэффициент в Intra16×16АСLevel не равен нулю. Параметр intra16×16_luma_flag, равный 0, определяет, что все коэффициенты в Intra16×16АСLevel равны нулю.
Элемент mb_intra16×16_luma_part_flag[mbPartIdx], равный 1, определяет, что имеется, по меньшей мере, один ненулевой коэффициент в Intra16×16АСLevel в разделе макроблока mbPartIdx. Элемент mb_intra16x16_luma_part_flag[mbPartIdx], равный 0, определяет, что все коэффициенты в Intra16×16АСLevel в разделе макроблока mbPartIdx равны нулю.
Элемент qtr_mb_intra16×16_luma_part_flag[mbPartIdx][qtrMbPartIdx], равный 1, определяет, что имеется, по меньшей мере, один ненулевой коэффициент в Intra16×16АСLevel в разделе четвертного макроблока qtrMbPartIdx.
Элемент qtr_mb_intra16×16_luma_part_flag[mbPartIdx][qtrMbPartIdx], равный 0, определяет, что все коэффициенты в Intra16×16АСLevel в разделе четвертного макроблока qtrMbPartIdx равны нулю. Элемент mb_intra16×16_chroma_flag, равный 1, определяет, что, по меньшей мере, один коэффициент цветности не равен нулю.
Элемент mb_intra16×16_chroma_flag, равный 0, определяет, что все коэффициенты цветности равны нулю. Элемент mb_intra16x16_chroma_АС_flag, равный 1, определяет, что, по меньшей мере, один коэффициент цветности в mb_ChromaАСLevel не равен нулю. Элемент mb_intra16x16_chroma_АС_flag, равный 0, определяет, что все коэффициенты в mb_ChromaАСLevel равны нулю.
Семантика остаточных данных
Семантика остаточных данных, за исключением семантики CAVLC остаточных блоков, описанной в этом изобретении, может быть такой же, как определено в пункте 7.4.5.3 стандарта H.264.
Семантика CAVLC остаточных блоков
Семантика CAVLC может быть обеспечена следующим образом. В частности, enh_coeff_token задает общее количество ненулевых уровней коэффициента преобразования при сканирования уровня коэффициента преобразования. Функция TotalCoeff(enh_coeff_token) возвращает количество ненулевых уровней коэффициента преобразования, полученное из enh_coeff_token, следующим образом:
1. Когда enh_coeff_token равен 17, TotalCoeff(enh_coeff_token) задается как в пункте 7.4.5.3.1 стандарта Н.264.
2. Когда enh_coeff_token не равен 17, TotalCoeff(enh_coeff_token) равен enh_coeff_token.
Значение enh_coeff_sign_flag задает знак ненулевого уровня коэффициента преобразования. Семантика total_zeros задается как в пункте 7.4.5.3.1 стандарта Н.264. Семантика run_be для e задается как в пункте 7.4.5.3.1 стандарта Н.264.
Процессы декодирования для расширений
Декодирование I-слоя
Ниже более подробно описываются процессы декодирования для расширений масштабируемости. Для декодирования I-кадра при наличии данных как от базового уровня, так и от уровня улучшения, в декодере 28 можно реализовать декодирование в два прохода. Процесс декодирования в два прохода в общем случае может выполняться, как было описано выше, после чего выполняется итеративная обработка следующим образом. Сначала восстанавливается кадр Ib базового уровня как обычный I-кадр. Затем восстанавливается I-кадр совмещенного уровня улучшения в качестве P-кадра. Тогда опорным кадром для этого Р-кадра будет восстановленный I-кадр базового уровня. Опять же, все векторы движения в восстановленном Р-кадре уровня улучшения будут равны нулю.
При наличии уровня улучшения каждый макроблок уровня улучшения декодируют как остаточные данные с использованием информации о режиме из совмещенного макроблока в базовом уровне. I-слой базового уровня (Ib) можно декодировать как в пункте 8 стандарта Н.264. После того как выполнено декодирование как макроблока уровня улучшения, так и совмещенного макроблока базового уровня, можно использовать добавление в пиксельной области, как это определено в пункте 2.1.2.3 стандарта Н.264, для создания конечного восстановленного блока.
Декодирование P-слоя
В процессе декодирования Р-слоев базовый уровень и уровень улучшения совместно используют один и тот же режим и информацию о движении, которая передается в базовом уровне. Информация для макроблоков с внутрикадровым кодированием существует на обоих уровнях. Другими словами, биты, принадлежащие макроблокам с внутрикадровым кодированием, существуют только на базовом уровне, но не существуют на уровне улучшения, в то время как коэффициенты макроблоков MB с внутрикадровым кодированием распределены по обоим уровням.
Макроблоки уровня улучшения, которые имеют пропущенные макроблоки на совмещенном базовом уровне, также пропускаются.
Если refine_intra_mb_flag равен 1, то информация, принадлежащая макроблокам с внутрикадровым кодированием, существует на обоих уровнях, и decoding_mode_flag должен быть равен 0. В противном случае, когда refine_intra_mb_flag равен 0, то информация, принадлежащая макроблокам с внутрикадровым кодированием, существует только в базовом уровне, а макроблоки уровня улучшения, имеющие макроблоки с внутрикадровым кодированием совмещенного базового уровня, пропускаются.
Согласно одному аспекту схемы кодирования Р-слоев двухуровневые данные о коэффициентах макроблоков MB с внутрикадровым кодированием могут быть объединены в микропроцессоре общего назначения сразу после энтропийного декодирования и перед деквантизацией, поскольку модуль деквантизации находится в аппаратном ядре, и он участвует в конвейерной обработке с другими модулями. Следовательно, общее количество макроблоков MB, подлежащих обработке процессором DSP и аппаратным ядром, может быть точно таким же, как в случае одноуровневого декодирования, и аппаратное ядро будет выполнять только одноуровневое декодирование. В этом случае, возможно, не понадобится изменять график работы аппаратного ядра.
На фиг. 12 представлена блок-схема, иллюстрирующая процесс декодирования Р-слоя. Как показано на фиг. 12. видеодекодер 28 выполняет энтропийное декодирование макроблоков базового уровня. Если текущий MB базового уровня является MB с внутрикадровым кодированием или пропускается (162), то видеодекодер 28 переходит к следующему MB базового уровня (164). Однако, если MB не является MB с внутрикадровым кодированием или не пропускается, то видеодекодер 28 выполняет энтропийное декодирование для MB совмещенного уровня улучшения (166), а затем объединяет два уровня данных (168), то есть MB базового уровня после энтропийного декодирования и MB после энтропийного декодирования для совмещенного уровня улучшения, для создания единого уровня данных для операций деквантизации и обратного преобразования. Задачи, показанные на фиг. 12, могут выполняться в микропроцессоре общего назначения перед передачей единого объединенного уровня данных в аппаратное ядро для деквантизации и обратного преобразования. На основе процедуры, показанной на фиг. 12, управление буфером (dpb) декодированного изображения совпадает или почти совпадает с одноуровневым декодированием, и дополнительная память может не потребоваться.
Декодирование макроблоков с внутрикадровым кодированием для уровня улучшения
При декодировании макроблоков с внутрикадровым кодированием для уровня улучшения во время энтропийного декодирования коэффициентов преобразования для кодирования CAVLC может потребоваться контекстная информация, которая обрабатывается по-разному при декодировании базового уровня и декодировании уровня улучшения. Эта контекстная информация включает в себя количество ненулевых уровней коэффициента преобразования (заданное параметром TotalCoeff(coeff_token)) в блоке уровней коэффициента преобразования, находящихся слева от текущего блока (blkA) и блоке уровней коэффициентов преобразования, находящихся над текущим блоком (blkB).
При энтропийном декодировании макроблоков с внутрикадровым кодированием для уровня улучшения с совмещенным макроблокам базового уровня с ненулевыми коэффициентами контекстом для декодирования coeff_token является количество ненулевых коэффициентов в блоках совмещенного базового уровня. При энтропийном декодировании макроблоков с внутрикадровым кодированием для уровня улучшения с совмещенным макроблоком базового уровня, где все коэффициенты нулевые, контекстом для декодирования coeff_token является контекст уровня улучшения, а nA и nB представляют собой количество ненулевых уровней коэффициента преобразования, заданного параметром TotalCoeff(coeff_token) в блоке blkA уровня улучшения, находящимся слева от текущего блока, и блоке blkB базового уровня, находящемся над текущим блоком соответственно. После энтропийного декодирования информация сохраняется декодером 28 для декодирования других макроблоков и деблокирования. TotalCoeff(coeff_token) каждого блока преобразования сохраняется только при декодировании базового уровня без декодирования уровня улучшения. Эту информацию используют в качестве контекста для энтропийного декодирования других макроблоков и для управления деблокированием. При видеодекодировании уровня улучшения параметр TotalCoeff(enh_coeff_token) используют в качестве контекста и для управления деблокированием.
Согласно одному аспекту изобретения аппаратное ядро в декодере 28 конфигурируется для обработки энтропийного декодирования. Согласно этому аспекту процессор DSP может быть сконфигурирован для информирования аппаратного ядра при декодировании Р-кадра с нулевыми векторами движения. В аппаратном ядре декодируется стандартный Р-кадр, и масштабируемое декодирование получается прозрачным. Опять же по сравнению с одноуровневым декодированием декодирование I-кадра уровня улучшения в общем случае эквивалентно времени декодирования стандартного I-кадра и Р-кадра.
Если частота I-кадров не превышает один кадр в секунду, то усложнение оказывается незначительным. Если эта частота превышает один I-кадр в секунду (из-за изменения сцены или по какой-то иной причине), то алгоритм кодирования может обеспечить кодирование таких I-кадров только на базовом уровне.
Процесс получения enh_coeff_token
Далее описывается процесс получения enh_coeff_token. Синтаксический элемент enh_coeff_token можно декодировать с использованием одного из восьми кодов VLC, заданных ниже в таблицах 10 и 11. Элемент enh_coeff_sign_flag задает знак ненулевого уровня коэффициента преобразования. VLC в таблицах 10 и 11 основаны на статистической информации по 27 декодированным последовательностям MPEG2. Каждый VLC задает значение TotalCoeff(enh_coeff_token) для данного кодового слова enh_coeff_token. Выбор VLC зависит от переменной numcoeff_vlc, которую получают следующим образом. Если совмещенный блок базового уровня имеет ненулевые коэффициенты, то применяется следующая процедура:
Если (base_nC<2)
Numcoeff_vlc=0;
В противном случае, если (base_nC<4)
Numcoeff_vlc=1;
В противном случае, если (base_nC<8)
Numcoeff_vlc=2;
В противном случае
Numcoeff_vlc=3;
В противном случае nC находят, используя подходящий способ из стандарта Н.264, а Numcoeff_vlc получают следующим образом:
Если (nC<2)
Numcoeff_vlc=4;
В противном случае, если (nC<4)
Numcoeff_vlc=5;
В противном случае, если (nC<8)
Numcoeff_vlc=6;
В противном случае
Numcoeff_vlc=7;
Таблица 10Кодовые таблицы для декодирования enh_coeff_token, numcoeff_vlc=0-3
enh_coeff_token
numcoeff_vlc=0
numcoeff_vlc=1
numcoeff_vlc=2
numcoeff_vlc=3
0
10
101
11110
1001 1
1
11
01
101
1111
2
00
00
00
110
<i>i</i>
010
111
01
01
4
0110
100
110
00
5
0111 0
1100
100
101
6
0111 101
11010
1110
1110
7
0111 1001
1101 101
1111 10
10010
8
0111 1000 1
1101 1001
1111 1111
1000 11
9
0111 1000 01
1101 1000 1
1111 1110 1
1000 101
10
0111 1000 001
1101 1000 01
1111 1110 01
1000 1000
11
0111 1000 0001 1
1101 1000 001
1111 1110 001
1000 1001 00
12
0111 1000 0001 0
1101 1000 0001
1111 1110 0001
1000 1001 01
13
0111 1000 0000 0
1101 1000 000011
1111 1110 0000 00
1000 1001 100
14
0111 1000 0000 10
1101 1000 0000 00
1111 1110 0000 01
1000 1001 101
15
0111 1000 0000110
1101 1000 0000 01
1111 1110 0000 10
1000 1001 110
16
0111 1000 0000111
1101 1000 0000 10
1111 1110 000011
1000 1001 111
17
0111 11
1101 11
1111 110
1000 0
Таблица 11Кодовые таблицы для декодирования enh_coeff_token, numcoeff_vlc=4-7
enh_coeff_token
numcoeff_vlc=4
numcoeff_vlc=5
numcoeff_vlc=6
numcoeff_vlc=7
0
1
11
10
1010
1
01
10
01
1011
2
001
01
00
100
3
0001
001
110
1100
4
0000 1
0001
1110
0000
5
0000 00
0000 1
1111 0
0001
6
0000 0101
0000 01
1111 10
0010
7
0000 0100 1
0000 000
1111110
0011
8
0000 0100 01
0000 0011 1
1111 1110 1
0100
9
0000 0100 001
0000 0011 01
1111 1110 01
0101
10
0000 0100 0000
0000 0011 000
1111 1110 0011
0110
11
0000 0100 000111
0000 0011 001 00
1111 1110 0000 0
0111
12
0000 0100 0001 00
0000 0011 0010 1
1111 1110 0000 1
11010
13
0000 0100 0001 010
0000 0011 0011 00
1111 1110 0001 0
1101 1
14
0000 0100 0001011
0000 0011 0011 01
1111 1110 0001 1
11100
15
0000 0100 0001 100
0000 0011 0011 10
1111 1110 0010 0
11101
16
0000 0100 0001 101
0000 0011 001111
1111 1110 0010 1
11110
17
0000 011
0000 0010
1111 1111
1111 1
Декодирование макроблоков с межкадровым кодированием для уровня улучшения
Далее описывается декодирование макроблоков с межкадровым кодированием для уровня улучшения. Для макроблоков с межкадровым кодированием (за исключением пропущенных макроблоков) декодер 28 декодирует остаточную информацию как из базового уровня, так и уровня улучшения. Таким образом, декодер 28 может быть сконфигурирован так, чтобы обеспечить два процесса энтропийного декодирования, которые могут потребоваться для каждого макроблока.
Если и базовый уровень, и уровень улучшения имеют ненулевые коэффициенты для макроблока, то контекстную информацию из соседних макроблоков используют на обоих уровнях для декодирования coeff_token. Каждый уровень использует свою контекстную информацию.
После энтропийного декодирования информация сохраняется в качестве контекстной информации для энтропийного декодирования других блоков и деблокирования. Для декодирования базового уровня сохраняется декодированный параметр TotalCoeff(coeff_token). Для декодирования уровня улучшения отдельно сохраняют декодированный параметр TotalCoeff(coeff_token) базового уровня и декодированный параметр TotalCoeff(enh_coeff_token) уровня улучшения. Параметр TotalCoeff(coeff_token) используют в качестве контекста для декодирования coeff_token макроблока базового уровня, включающего макроблоки с внутрикадровым кодированием, которые существуют только в базовом уровне. Сумму TotalCoeff(coeff_token)+TotalCoeff(enh_coeff_token) используют в качестве контекста для декодирования макроблоков с межкадровым кодированием в уровне улучшения.
Декодирование макроблоков с внутрикадровым кодированием для уровня улучшения
Для макроблоков (MB) с межкадровым кодированием, за исключением пропущенных MB, если это имело место, остаточную информацию можно закодировать как на базовом уровне, так и на уровне улучшения. Таким образом, для каждого MB используют два процесса энтропийного декодирования, например, как это показано на фиг. 5. Если предположить, что оба уровня имеют ненулевые коэффициенты для MB, то для декодирования coeff_token контекстную информацию для соседних MB обеспечивают на обоих уровнях. Каждый уровень имеет свою собственную контекстную информацию.
После энтропийного декодирования некоторую информацию сохраняют для энтропийного декодирования других MB и деблокирования. Если выполняется видеодекодирование базового уровня, то сохраняется декодированный TotalCoeff(coeff_token) базового уровня. Если выполняется видеодекодирование уровня улучшения, то отдельно сохраняют декодированный TotalCoeff(coeff_token) базового уровня и декодированный TotalCoeff(enh_coeff_token) уровня улучшения.
Параметр TotalCoeff(coeff_token) используют в качестве контекста для декодирования coeff_token MB базового уровня, включая MB с внутрикадровым кодированием, которые существуют только в базовом уровне. Для декодирования MB с межкадровым кодированием в уровне улучшения в качестве контекста используют сумму TotalCoeff(coeff_token) базового уровня и TotalCoeff(enh_coeff_token) уровня улучшения. Вдобавок, эту сумму можно также использовать в качестве параметра для деблокирования видеоданных уровня улучшения.
Поскольку деквантизация предполагает интенсивные вычисления, коэффициенты из двух уровней можно перед деквантизацией объединить в микропроцессоре общего назначения, так что аппаратное ядро будет выполнять деквантизацию один раз для каждого MB c одним QP. Оба уровня можно объединить в микропроцессоре, например, как это описано в следующем разделе.
Декодирование кодированного блочного шаблона (CBP)
CBP макроблока уровня улучшения, enh_coded_block_pattern, указывает кодированные блочные шаблоны в видеоданных уровня улучшения. В некоторых случаях enh_coded_block_pattern может быть укорочен до enh_cbp, например, как в таблицах 12-15, приведенных ниже. При декодировании CBP с большой эффективностью сжатия CBP макроблока уровня улучшения, enh_coded_block_pattern, можно закодировать двумя различными способами в зависимости от base_coded_block_pattern шаблона cbp MB совмещенного базового уровня.
Для случая 1, когда base_coded_block_pattern=0, enh_coded_block_pattern можно закодировать согласно стандарту Н.264, например, таким же образом, как базовый уровень. Для случая 2, когда base_coded_block_pattern не равен 0, для получения enh_coded_block_pattern можно использовать следующий подход. Этот подход может включать в себя три этапа:
Шаг 1. На этом шаге для каждого блока 8х8 яркости, где соответствующий бит coded_block_pattern базового уровня равен 1, выбирается один бит. Каждый бит представляет собой бит enh_coded_block_pattern для совмещенного блока 8х8 уровня улучшения. Этот выбранный бит можно рассматривать как бит уточнения. Следует заметить, что блок 8х8 используется как пример для объяснения. Очевидно, что можно использовать другие блоки с другими размерами.
Шаг 2. Имея в виду количество ненулевых блоков 8х8 яркости и cbp блока цветности на базовом уровне, имеется 9 комбинаций, показанных ниже в таблице 12. Каждая комбинация является контекстом для декодирования остальной информации о enh_coded_block_pattern. В таблица 12 cbpbC обозначает cbp цветности базового уровня, а (cbpb,Y(b8) представляет количество ненулевых блоков 8х8 яркости базового уровня. Столбцы cbpeC и cbpeY показывают новый формат cbp для некодированной информации о enh_coded_block_pattern, исключая контексты 4 и 9. В cbpeY “x” обозначает один бит для блока 8х8 яркости, в то время как в cbpeC “xx” обозначает 0, 1 или 2.
Кодовые таблицы для декодирования enh_coded_block_pattern на основе различных контекстов заданы ниже в таблицах 13 и 14.
Шаг 3. Для контекстов 4 и 9 enh_chroma_coded_block_pattern (который может быть укорочен до enh_chroma_cbp) декодируется отдельно с использованием кодового словаря в таблице 15, показанной ниже.
Кодовые словари для различных контекстов показаны в таблицах 13 и 14. Эти кодовые словари основаны на статистической информации по 27 декодированным последовательностям MPEG2.
Таблица 13Кодовые слова Хаффмана для контекста 1-3 для enh_coded_block_pattern (enh_cbp)
<b>контекст 1</b>
<b>контекст 2</b>
<b>контекст 3</b>
символ
код
enh_cbp
код
enh_cbp
код
enh_cbp
0
10
0
11
0
0
1
1
001
1
00
3
10
0
2
110
4
100
1
111
3
3
1110
2
011
2
1101
2
4
0001
3
1011
4
1100 0
4
5
0100
5
0101
7
1100 1
5
6
0000
6
1010 0
5
7
1100
7
1010 1
6
8
0101
8
0100 0
8
9
1101 10
10
0100 10
11
10
1111 00
12
0100 111
10
11
1101 11
15
0100 110
9
12
1111 01
9
13
1111 110
11
14
1111 111
13
15
1111 101
14
16
1101 011
16
17
1101 001
23
18
1101 0101
17
19
1111 1000
18
20
1101 0000
19
21
1111 1001
20
22
1101 0100
21
23
1101 0001
22
Таблица 14Кодовые слова Хаффмана для контекста 5-7 для enh_coded_block_pattern (enh_cbp)
<b>контекст 5</b>
<b>контекст 6</b>
<b>контекст 7</b>
<b>контекст 8</b>
символ
код
enh_cbp
код
enh_cbp
код
enh_cbp
код
enh_cbp
0
1
0
01
0
10
0
0
0
1
0000
4
101
1
00
1
1
1
2
0010
8
001
2
01
2
3
0111 0
1
100
4
11
3
4
0101 0
10
000
5
5
0001 0
11
110
7
6
0101 1
12
1110
3
7
0011 1
13
1111
6
8
0001 1
14
9
0110 1
15
10
0111 1
2
11
01100
3
12
0100 1
5
13
0011 0
7
14
0100 00
6
15
0100 01
9
Шаг 3. Для контекстов 4-9 enh_cbp цветности можно декодировать отдельно, используя кодовый словарь, показанный ниже в таблице 15.
Таблица 15Кодовое слово для enh_chroma_block_pattern (enh_chroma_cbp)
enh_chroma_cbp
код
0
0
1
10
2
11
Процесс получения параметров квантования
S
Далее описывается процесс получения параметров квантования (QP). Синтаксический элемент mb_qp_delta для каждого макроблока передает QP макроблока. Номинальный QP базового уровня (QPb) представляет также QP, используемый для квантования на базовом уровне, заданном с использованием mb_qp_delta в макроблоках в base_layer_slice. Номинальный QP уровня улучшения (QPe) также является QP, который используют для квантования на уровне улучшения, заданном с использованием mb_qp_delta в enh_macroblock_layer. При получении QP для сохранения бит вместо посылки mb_qp_delta для каждого макроблока уровня улучшения можно поддерживать постоянной разность QP между базовым уровнем и уровнем улучшения. Таким путем разность mb_qp_delta для QP между двумя уровнями посылается только на кадровой основе.
b
e
На основе QP и QP разность QP, обозначенная как delta_layer_qp, определяется как:
b
e
delta_layer_qp=QP-QP
e.Y
QP для QP квантования, используемый для уровня улучшения, получают на основе двух факторов: (а) существование ненулевых уровней коэффициента на базовом уровне и (b) delta_layer_qp. Для поддержки единой операции деквантизации для коэффициентов уровня улучшения параметр delta_layer_qp может быть ограничен, так что delta_layer_qp%6=0. При этих двух заданных величинах QP получают следующим образом:
1. Если совмещенный MB базового уровня не имеет ненулевые коэффициенты, то будет использован номинальный QPe, поскольку необходимо будет декодировать только коэффициенты уровня улучшения.
Pe.Y
e
Q=QP
2. Если delta_layer_qp%6=0, то QPe еще используют для уровня улучшения независимо от того, имеются или нет ненулевые коэффициенты. Это основывается на том обстоятельстве, что размер этапа квантования удваивается с каждым приращением QP, равным 6.
Следующая операция описывает процесс деквантизации (обозначенный как Q-1) для объединения коэффициентов базового уровня и уровня улучшения, определенных как Cb и Ce соответственно.
e
b
e
e
-1
F=Q((Cb(QP)<<(delta_layer_qp/6))+C(QP))
e
-1
где F обозначает коэффициенты уровня улучшения после деквантизации, а Q указывает функцию деквантизации.
b
e
Если находящийся рядом блок базового уровня имеет ненулевой коэффициент и delta_layer_qp%6 ≠ 0, то при деквантизации коэффициентов базового уровня и уровня улучшения используют QP и QP соответственно. Коэффициенты уровня улучшения получают следующим образом:
-1
-1
b
b
e
e
Fe=Q(C(QP))+Q(C(QP))
base,C
enh,C
b,Y
e,Y
I
Получение параметров QP цветности (QP и QP) основано на параметрах QP яркости (QP и QP). Сначала вычисляют qP следующим образом:
I
xY
qP=Clip3(0, 51, QP+chroma_qp_index_offset)
где x обозначает “b” для базового уровня или “e” для уровня улучшения, chroma_qp_index_offset определен в наборе параметров изображения, а Clip3 представляет собой следующую математическую функцию
x,C
Значение QP можно определить из таблицы 16, представленной ниже.
Таблица 16Описание QP<sub>xC</sub> как функции qP<sub>I</sub>
qP<sub>I</sub>
<30
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
QP<sub>xC</sub>
qP<sub>I</sub>
29
30
31
32
32
33
34
34
35
35
36
36
37
37
37
38
38
38
39
39
39
39
Для видеоданных уровня улучшения параметры QP для MB, полученные в ходе деквантизации, используются при деблокировании.
Деблокирование
При деблокировании для всех краев блока 4х4 кадра, кроме краев на границе кадра и любых краев, для которых работа фильтра деблокирования запрещена параметром disable_deblocking_filter_idc, может быть использован фильтр деблокирования. Указанный процесс фильтрации выполняется на базе макроблоков (MB) после завершения процесса построения кадра со всеми макроблоками в кадре, обрабатываемом в порядке возрастания адресов макроблоков.
На фиг. 13 представлена схема, иллюстрирующая работу фильтра деблокирования яркости и цветности. Работа фильтра деблокирования инициируется отдельно для компонент яркости и цветности. Для каждого макроблока сначала фильтруются вертикальные края слева направо, а затем фильтруются горизонтальные края сверху вниз. Для макроблока 16х16 фильтр деблокирования яркости действует по четырем краям с 16 отсчетами, а фильтр деблокирования для каждой компоненты цветности действует по двум краям с 8 отсчетами, в горизонтальном направлении и в вертикальном направлении, например, как показано на фиг. 13. Границы яркости в макроблоке, подлежащем фильтрации, показаны на фиг. 13 сплошными линиями. Границы цветности в макроблоке, подлежащем фильтрации, показаны на фиг. 13 пунктирными линиями.
На фиг. 13 ссылочные позиции 170, 172 показывают вертикальные края для фильтрации яркости и цветности соответственно. Ссылочные позиции 174, 176 указывают соответственно горизонтальные края для фильтрации яркости и цветности. Выборочные значения выше и слева от текущего макроблока, которые уже были модифицированы в результате работы фильтра деблокирования в предыдущих макроблоках, используются в качестве входных данных для фильтра деблокирования в текущем макроблоке и могут быть дополнительно модифицированы во время фильтрации текущего макроблока. Выборочные значения, модифицированные во время фильтрации вертикальных краев, используют в качестве входных данных для фильтрации горизонтальных краев для того же макроблока.
В стандарте Н.264 режимы MB, количество ненулевых уровней коэффициента преобразования и информацию о движении используют для принятия решения об интенсивности фильтрации границы. Параметры QP макроблоков используют для получения порогового значения, которое указывает, отфильтрованы ли входные отсчеты. При деблокировании базового уровня эти фрагменты информации используют напрямую. Для видеоуровня улучшения создается соответствующая информация. В этом примере процесс фильтрации применяется к набору из восьми отсчетов через горизонтальный или вертикальный край блока 4х4, обозначенный как pi и qi, где i равно 0, 1, 2 или 3, как показано на фиг. 14, причем край 178 находится между p0 и q0. На фиг. 14 pi и qi задается для i=от 0 до 3.
Для декодирования I-кадра уровня улучшения может потребоваться декодированный I-кадр базового уровня и добавление межуровневого предсказанного остатка. Для восстановленного I-кадра базового уровня перед использованием предсказания I-кадра уровня улучшения используют фильтр деблокирования. Применение стандартного способа для деблокирования I-кадра с целью деблокирования I-кадра уровня улучшения может оказаться нежелательным. Как альтернативный вариант, могут быть использованы следующие критерии для получения нужной интенсивности фильтрации границы (bS). Переменную bS можно получить следующим образом. Значение bS устанавливают равным 2, если выполняется любое из следующих условий:
а. Блок яркости 4х4, содержащий отсчет p0, содержит ненулевые уровни коэффициента преобразования и находится в макроблоке, закодированном с использованием режима предсказания для макроблока 4х4 с внутрикадровым кодированием; или
b. Блок яркости 4х4, содержащий отсчет q0, содержит ненулевые уровни коэффициента преобразования и находится в макроблоке, закодированном с использованием режима предсказания для макроблока 4х4 с внутрикадровым кодированием.
Если ни одно из вышеуказанных условий не выполнено, то тогда значение bS устанавливают равным 1.
Для P-кадров остаточная информация макроблоков с внутрикадровым кодированием, кроме пропущенных макроблоков, может быть закодирована как на базовом уровне, так и на уровне улучшения. Из-за единого декодирования коэффициенты от этих двух уровней объединяются. Поскольку для принятия решения об интенсивности фильтрации границы при деблокировании используют количество ненулевых уровней коэффициента преобразования, важно определить, каким образом вычислять количество ненулевых уровней коэффициентов преобразования каждого блока 4х4 на уровне улучшения, используемом при деблокировании. Необоснованное увеличение или уменьшение этого количества может либо привести к излишнему сглаживанию изображения, либо вызвать явление «блочности» изображения. Переменную bS получают следующим образом:
0
0
0
0
1. Если край блока также является краем макроблока, и оба отсчета p и q находятся в кадровых макроблоках и любой из отсчетов p или q находится в макроблоке, закодированном с использованием режима предсказания для макроблока с внутрикадровым кодированием, то тогда значение bS равно 4.
0
0
2. В противном случае, если любой из отсчетов p или q находятся в макроблоке, закодированном с использованием режима предсказания для макроблока с внутрикадровым кодированием, то тогда значение для bS равно 3.
0
0
0
0
3. В противном случае, если на базовом уровне блок яркости 4х4, содержащий отсчет p, или блок яркости 4х4, содержащий отсчет q, содержит ненулевые уровни коэффициента преобразования, или на уровне улучшения блок яркости 4х4, содержащий отсчет p, или блок яркости 4х4, содержащий отсчет q, содержит ненулевые уровни коэффициента преобразования, то тогда значение для bS равно CP2.
4. В противном случае для bS выводится значение 1, или в альтернативном варианте используется стандартный подход.
Кадры переключения каналов
Кадр переключения каналов может быть инкапсулирован в один или несколько компонентов NAL с информацией для дополнительного улучшения (SEI), и его можно назвать кадром переключения каналов (CSF) c SEI. В одном примере кадр CSF с SEI имеет payloadTypefield, равный 22. Синтаксис RBSP для сообщения SEI задается как в пункте 7.3.2.3 стандарта Н.264. Синтаксис SEI RBSP и сообщения CSF с SEI может быть обеспечен так, как это показано ниже в таблицах 17 и 18.
Таблица 17Синтаксис SEI RBSP
sei_rbsp() {
<b>С</b>
<b>Дескриптор</b>
do
sei message()
5
while(more_rbsp_data())
rbsp_trailing_bits()
5
}
Таблица 18Синтаксис сообщения SEI CSF
sei_message() {
<b>С</b>
<b>Дескриптор</b>
22/* payloadType */
5
f(8)
payloadType=22
payloadSize=0
while(next_bits(8) = = OxFF ) {
<b>ff_byte</b>/* equal to OxFF */
5
f(8)
payloadSize+=255
}
last_payload_size_byte
5
u(8)
payloadSize+=last_payload_size_byte
channel_switch_frame_slice_data
5
}
Синтаксис данных слоя кадра переключения канала может быть идентичен синтаксису I-слоя или Р-слоя базового уровня, который задан в пункте 7 стандарта Н.264. Кадр переключения каналов (CSF) может быть инкапсулирован в независимый пакет протокола передачи, позволяя обеспечить видимость в точках произвольного доступа в кодированном битовом потоке. Для передачи кадра переключения каналов нет ограничений на уровень. Этот кадр может содержаться либо в базовом уровне, либо в уровне улучшения.
При декодировании кадра переключения каналов, если инициируется запрос на изменение канала, то будет декодирован кадр переключения каналов в запрошенном канале. Если кадр переключения каналов содержится в сообщении SEI CSF, то для декодирования SEI CSF будет использован процесс декодирования, использованный для I-слоя базового уровня. Р-слой, совпадающий с SEI CSF, декодироваться не будет, а B-изображение с порядком вывода перед кадром переключения каналов отбрасывается. Процесс декодирования будущих изображений (с точки зрения порядка вывода) не изменяется.
На фиг. 15 представлена блок-схема, иллюстрирующая устройство 180 для передачи масштабируемых цифровых видеоданных с множеством различных приведенных в качестве примера синтаксических элементов для поддержки достаточно простой видеомасштабируемости. Устройство 180 включает в себя модуль 182 для включения видеоданных базового уровня в первый компонент NAL, модуль 184 для включения видеоданных уровня улучшения во второй компонент NAL и модуль 186 для включения одного или нескольких синтаксических элементов, по меньшей мере, в один из первого и второго компонентов NAL, чтобы указать на наличие во втором компоненте NAL видеоданных уровня улучшения. В одном примере устройство 180 может составлять часть вещательного сервера 12, как показано на фигурах 1 и 3, и может быть реализовано аппаратными, программными или программно-аппаратными средствами или с помощью любой подходящей их комбинации. Например, модуль 182 может включать в себя один или несколько аспектов кодера 32 базового уровня и модуля 23 компонентов NAL по фиг.3, которые кодируют видеоданные базового уровня, и ввести их в компонент NAL. Вдобавок, модуль 184, например, может включать в себя один или несколько аспектов кодера 34 уровня улучшения и модуля 23 компонентов NAL, которые кодируют видеоданные уровня улучшения, и ввести их в компонент NAL. Модуль 186 может включать в себя один или несколько аспектов модуля 23 компонентов NAL, который включает один или несколько синтаксических элементов по меньшей мере в один из первого и второго компонентов NAL, чтобы указать на наличие видеоданных уровня улучшения во втором компоненте NAL. В одном примере один или несколько синтаксических элементов предусмотрены во втором компоненте NAL, в котором предусмотрены видеоданные уровня улучшения.
На фиг. 16 представлена блок-схема, иллюстрирующая устройство 188 цифрового видеодекодирования, которое декодирует битовый поток масштабируемых видеоданных, для обработки множества различных приведенных в качестве примера синтаксических элементов, поддерживающих достаточно простую видеомасштабируемость. Устройство 188 цифрового видеодекодирования может находиться в абонентском устройстве, например, абонентском устройстве 16 по фиг. 1 или фиг. 3, видеодекодере 14 по фиг. 1 и может быть реализовано аппаратными, программными или программно-аппаратными средствами либо с помощью любой подходящей их комбинации. Устройство 188 включает в себя модуль 190 для приема видеоданных базового уровня в первом компоненте NAL, модуль 192 для приема видеоданных уровня расширения во втором компоненте NAL, модуль 194 для приема одного или нескольких синтаксических элементов, по меньшей мере, в одном из первого и второго компонентов NAL, для указания на наличие во втором компоненте NAL видеоданных уровня улучшения, и модуль 196 для декодирования цифровых видеоданных во втором компоненте NAL на основе указания, обеспеченного одним или несколькими синтаксическими элементами во втором компоненте NAL. Согласно одному аспекту один или несколько синтаксических элементов предусмотрены во втором компоненте NAL, где предусмотрены видеоданные уровня улучшения. Модуль 190, например, может включать в себя приемник/демодулятор 26 абонентского устройства 16 по фиг. 3. В этом примере модуль 192 может также включать в себя приемник/демодулятор 26. В некоторых примерных конфигурациях модуль 194 может включать в себя модуль компонентов NAL, такой как модуль 27 компонентов NAL по фиг. 3, который обрабатывает синтаксические элементы в компонентах NAL. Модуль 196 может включать в себя видеодекодер, такой как видеодекодер 28 по фиг. 3.
Описанные здесь способы можно реализовать аппаратными, программными, аппаратно-программными средствами или любой их комбинацией. При реализации программными средствами эти способы могут быть реализованы, по меньшей мере, частично одной или несколькими запомненными или переданными командами, или кодом, на считываемом компьютером носителе. Считываемая компьютером среда может включать в себя компьютерную запоминающую среду, среду передачи либо то и другое, а также может включать в себя любой носитель, поддерживающий пересылку компьютерной программы с одного места на другое. Запоминающая среда может представлять собой любую имеющуюся среду, которая может быть доступна компьютеру.
Например, но не как ограничение, такая считываемая компьютером среда может содержать память с произвольной выборкой (RAM), такую как синхронная динамическая память с произвольной выборкой (SDRAM), память только для считывания (ROM), энергонезависимую память с произвольной выборкой (NVRAM), ROM, электрически стираемую программируемую память только для считывания (EEPROM), EEPROM, флэш-память, ПЗУ на компакт-диске (CD-ROM) или другое запоминающее устройство на оптических дисках, запоминающее устройство на магнитных дисках или другие магнитные запоминающие устройства, либо любой другой носитель, который можно использовать для переноса или запоминания требуемого программного кода в виде команд или структур данных и который может быть доступен компьютеру.
Также к считываемому компьютером носителю правильно будет отнести любое соединение. Например, если программное обеспечение передается от Web-узла, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, скрученной пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасная, радио- и микроволновая связь, то тогда коаксиальный кабель, оптоволоконный кабель, скрученная пара, линия DSL или беспроводные технологии, такие как инфракрасная, радио- и микроволновая связь, входят в определение носителя. Используемый здесь термин «диск» включает в себя компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), гибкий диск или лазерный диск, работающий в синей области спектра, где диски (disk) обычно воспроизводят данные с использованием магнитных свойств, в то время как диски (disc) воспроизводят данные с использованием оптических явлений, например, с помощью лазеров. В объем термина «считываемая компьютером среда» следует также включить комбинации из вышеописанного.
Код, связанный со считываемым компьютером носителем компьютерного программного продукта, может быть выполнен компьютером, например, одним или несколькими процессорами, к примеру, одним или несколькими цифровыми процессорами сигналов (DSP), микропроцессорами общего назначения, прикладными специализированными интегральными схемами (ASIC), логическими матрицами, программируемыми пользователем, или другими эквивалентными интегральными или дискретными логическими схемами. Согласно некоторым аспектам описанные здесь функциональные возможности можно обеспечить в специализированных программных модулях или аппаратных модулях, сконфигурированных для кодирования и декодирования, или включенных в объединенный видеокодер-декодер (CODEC).
Здесь были описаны различные аспекты изобретения. Эти и другие аспекты находятся в рамках объема нижеследующей формулы изобретения.