СЖАТИЕ ВИДЕОИЗОБРАЖЕНИЙ С ПОМОЩЬЮ АДАПТИВНЫХ КОДОВ С ПЕРЕМЕННОЙ ДЛИНОЙ
COMPRESSION OF VIDEO IMAGES WITH HELP OF ADAPTIVE CODES WITH ALTERNATING LENGTH

Настоящая заявка притязает на приоритет предварительной заявки на патент США № 60/830491, поданной 12 июля 2006 года, содержимое которой полностью включено в данный документ по ссылке.
Область техники, к которой относится изобретение
Данное раскрытие относится к цифровому видео, а более конкретно, к сжатию цифрового видео с помощью кодов с переменной длиной (VLC).
Уровень техники
Возможности цифрового видео могут быть встроены в широкий диапазон устройств, включая цифровые телевизоры, системы цифрового прямого вещания, устройства беспроводной связи, персональные цифровые ассистенты (PDA), портативные или настольные компьютеры, цифровые камеры, цифровые записывающие устройства, устройства видеоигр, сотовые или спутниковые радиотелефоны и т.п. Цифровые видеоустройства реализуют методики сжатия видеоизображения, такие как MPEG-2, MPEG-4 или H.264/MPEG-4 улучшенное видеокодирование (AVC) для более эффективной передачи и приема цифрового видео. Методики сжатия видеоизображения выполняют графическое и временное прогнозирование, чтобы уменьшать или удалять избыточность, присутствующую в видеосигналах.
При видеокодировании сжатие видеоизображений, в общем, включает в себя пространственное прогнозирование, оценку движения и компенсацию движения. В частности, внутреннее кодирование базируется на пространственном прогнозировании, чтобы уменьшить или исключить пространственную избыточность видео в пределах данного видеокадра. Взаимное кодирование основывается на временном прогнозировании, чтобы уменьшить или исключить временную избыточность видео в пределах соседних кадров. Для взаимного кодирования видеокодер выполняет оценку движения, чтобы отслеживать перемещение совпадающих блоков видео между двумя или более соседними кадрами. Оценка движения формирует векторы движения, которые указывают смещение блоков видео относительно соответствующих блоков видео в двух или более опорных кадров. Компенсация движения использует вектор движения для того, чтобы сформировать блок с предсказанием видео из опорного кадра. После компенсации движения остаточный блок видео формируется посредством вычитания блока с предсказанием видео из исходного блока видео.
Видеокодер применяет процессы преобразования, квантования и энтропийного кодирования, чтобы дополнительно уменьшить расход битов на отсчет остаточного блока. Энтропийное кодирование, в общем, влечет за собой применение арифметических кодов или кодов с переменной длиной (VLC), чтобы дополнительно сжимать остаточные коэффициенты, сформированные посредством операций преобразования и квантования. Примеры включают в себя контекстно-адаптивное двоичное арифметическое кодирование (CABAC) и контекстно-адаптивное кодирование с переменной длиной (CAVLC), которое может быть использовано в качестве альтернативных режимов энтропийного кодирования в некоторых кодерах. Видеодекодер выполняет обратные операции, чтобы восстанавливать кодированное видео, используя информацию движения и остаточную информацию каждого из блоков.
Раскрытие изобретения
В общем, раскрытие направлено на методики адаптивного кодирования с переменной длиной (VLC) цифрового видео. В частности, методики адаптивного VLC могут быть использованы для энтропийного кодирования остаточных коэффициентов, сформированных посредством процесса кодирования с предсказанием. Методики могут быть применены к схемам видеокодирования, которые кодируют позиции ненулевых коэффициентов преобразования с помощью серий нулей. В качестве одного примера, методики могут быть применены для того, чтобы кодировать коэффициенты преобразования в слое масштабирования с высокой степенью детализации (FGS), используемом для масштабируемого видеокодирования (SVC). Методики адаптивного VLC могут адаптивно регулировать процесс VLC, чтобы способствовать уменьшению сложности и повышению эффективности в цифровом видеокодере.
Методики адаптивного VLC могут хранить таблицу сдвига конца блока (EOB) и таблицу выбора словаря VLC-кодирования как внутренние состояния вместо отправки их с кодированными данными серий последовательных макроблоков видео. Записи таблиц могут периодически обновляться на основе статистики кодирования, собираемой в ходе прохода кодирования. В другом аспекте методики адаптивного VLC могут хранить таблицу сдвига специального EOB (sEOB), которая приспосабливает позицию символа sEOB в наборе символов к вероятности наличия ненулевых коэффициентов с абсолютной величиной, большей 1, в блоке и может кодировать информацию абсолютной величины ненулевых коэффициентов в отдельных параметрах кодирования. В дополнительном аспекте методики адаптивного VLC могут кодировать DC- и AC-блоки сигнала цветности независимо друг от друга и независимо от сигнала яркости, используя отдельные таблицы сдвига EOB, сдвига специального EOB и выбора словаря VLC-кодирования, которые подстроены под DC-блоки сигнала цветности, AC-блоки сигнала цветности и блоки сигнала яркости соответственно.
Данное раскрытие предоставляет, в одном аспекте, устройство видеокодирования, содержащее модуль кода с переменной длиной (VLC), выполненный с возможностью выполнять VLC-кодирование блочных коэффициентов цифрового видео с помощью VLC-параметров, собирать статистику кодирования в ходе VLC-кодирования блочных коэффициентов цифрового видео и корректировать один или более из VLC-параметров в ходе VLC-кодирования на основе собранной статистики кодирования.
В другом аспекте раскрытие предоставляет способ, содержащий выполнение VLC-кодирования блочных коэффициентов цифрового видео с помощью VLC-параметров, сбор статистики кодирования в ходе VLC-кодирования блочных коэффициентов цифрового видео и корректировки одного или более VLC-параметров в ходе VLC-кодирования на основе собранной статистики кодирования.
В дополнительном аспекте раскрытие предоставляет устройство видеокодирования, содержащее модуль кода с переменной длиной (VLC), выполненный с возможностью выполнять VLC-кодирование блочных коэффициентов цифрового видео с помощью VLC-параметров, при этом VLC-параметры содержат таблицу сдвига специального EOB (sEOB), указывающую, для каждого из множества различных условий кодирования, индекс символа sEOB в наборе символов, содержащем символы серий нулей, символ конца блока (EOB) и символ sEOB, на основе вероятности конца блока, когда блок включает в себя один или более ненулевых коэффициентов, имеющих абсолютную величину, большую 1.
В другом дополнительном аспекте раскрытие предоставляет способ, содержащий формирование параметров кода с переменной длиной (VLC) и выполнение VLC-кодирования блочных коэффициентов цифрового видео с помощью VLC-параметров, при этом VLC-параметры содержат таблицу сдвига специального EOB (sEOB), указывающую, для каждого из множества различных условий кодирования, индекс символа sEOB в наборе символов, содержащем символы серий нулей, символ конца блока (EOB) и символ sEOB, на основе вероятности конца блока, когда блок включает в себя один или более ненулевых коэффициентов, имеющих абсолютную величину, большую 1.
Методики, описанные в данном раскрытии, могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или в любой их комбинации. Если они реализованы в программном обеспечении, программное обеспечение может приводиться в исполнение в одном или более процессоров, таких как микропроцессор, специализированная интегральная схема (ASIC), программируемая пользователем матричная БИС (FPGA) или процессор цифровых сигналов (DSP). Программное обеспечение, которое приводит в исполнение методики, может быть первоначально сохранено в машиночитаемом носителе и загружено и приведено в исполнение в процессоре. Соответственно, данное раскрытие также предполагает вычислительный программный продукт, содержащий машиночитаемый носитель, который содержит инструкции, побуждающие процессор выполнять любую из множества методик, описанных в данном раскрытии.
Подробности одного или более вариантов осуществления данного раскрытия изложены на прилагаемых чертежах и в нижеприведенном описании. Другие признаки, цели и преимущества методик, описанных в данном раскрытии, должны стать очевидными из описания и чертежей, а также из формулы изобретения.
Краткое описание чертежей
Фиг.1 - это блок-схема, иллюстрирующая систему кодирования и декодирования видео.
Фиг.2 - это блок-схема, иллюстрирующая пример видеокодера.
Фиг.3 - это блок-схема, иллюстрирующая пример видеодекодера.
Фиг.4 - это схема, иллюстрирующая остаточные коэффициенты в блоке, ассоциативно связанном с базовым слоем серии последовательных макроблоков масштабируемого видеокодирования (SVC).
Фиг.5 - это схема, иллюстрирующая классификацию остаточных коэффициентов в блоке, ассоциативно связанном с улучшающим слоем масштабирования с высокой степенью детализации (FGS) серии последовательных макроблоков SVC.
Фиг.6 - это схема, иллюстрирующая кодирование ненулевых коэффициентов как серий нулей в блоке остаточных коэффициентов.
Фиг.7 - это схема, иллюстрирующая основанное на циклах кодирование значимых и уточняющих коэффициентов в блоке, ассоциативно связанном с улучшающим FGS-слоем серии последовательных макроблоков SVC.
Фиг.8 - это блок-схема модуля энтропийного кодирования, выполненного с возможностью применять процесс адаптивного VLC в соответствии с аспектом данного раскрытия.
Фиг.9 - это блок-схема модуля энтропийного декодирования, выполненного с возможностью применять процесс адаптивного VLC в соответствии с аспектом данного раскрытия.
Фиг.10 - это блок-схема последовательности операций способа, иллюстрирующая процесс адаптивного VLC в соответствии с аспектом данного раскрытия.
Фиг.11 - это блок-схема последовательности операций способа, подробнее иллюстрирующая процесс адаптивного VLC.
Осуществление изобретения
Фиг.1 - это блок-схема, иллюстрирующая систему 10 кодирования и декодирования видео. Как показано на фиг. 1, система 10 включает в себя исходное устройство 12, которое передает кодированное видео в принимающее устройство 14 через канал 16 связи. Исходное устройство 12 может включать в себя видеоисточник 18, видеокодер 20 и передающее устройство 22. Принимающее устройство 14 может включать в себя приемное устройство 24, видеодекодер 26 и устройство 28 видеоотображения. Система 10 может быть выполнена с возможностью применять методики адаптивного кодирования с переменной длиной (VLC) цифрового видео. В частности, методики адаптивного VLC могут быть использованы для энтропийного кодирования остаточных блочных коэффициентов, сформированных посредством процесса видеокодирования с предсказанием. Методики могут быть применены к схемам видеокодирования, которые кодируют позиции ненулевых коэффициентов преобразования с помощью серий нулей. Например, методики могут быть применены для того, чтобы кодировать коэффициенты преобразования для значимого кодирования в слое масштабирования с высокой степенью детализации (FGS), используемом для масштабируемого видеокодирования (SVC). Методики адаптивного VLC, применяемые посредством системы 10, могут адаптивно регулировать процесс VLC, чтобы способствовать уменьшению сложности и повышению эффективности в цифровом видеокодере.
В одном аспекте система 10 может быть выполнена с возможностью применять методики адаптивного VLC, которые хранят таблицу сдвига конца блока (EOB) и таблицу выбора словаря VLC-кодирования как внутренние состояния вместо отправки их с данными серий последовательных кодированных макроблоков видео. Например, видеокодер 20 может периодически обновлять записи таблиц на основе статистики, собираемой в ходе прохода кодирования. В другом аспекте видеокодер 20 может хранить таблицу сдвига специального EOB, которая приспосабливает позицию символа специального EOB в наборе символов к вероятности значимых коэффициентов с абсолютной величиной, большей 1, при текущем условии кодирования. Параметр специального EOB может быть представлен посредством двух символов, к примеру sEOB и termSym, как подробнее описано ниже. В дополнительном аспекте видеокодер 20 может кодировать DC- и AC-блоки сигнала цветности независимо от сигнала яркости, используя сдвиг отдельного EOB, сдвиг специального EOB и таблицы выбора словаря VLC-кодирования, к примеру совместно со скоростью адаптивного VLC.
В примере по фиг. 1 канал 16 связи может содержать любую беспроводную и проводную среду связи, такую как радиочастотный (RF) спектр или одна или более физических линий передачи, либо любую комбинацию беспроводной и проводной среды. Канал 16 может формировать часть сети с коммутацией пакетов, такой как локальная вычислительная сеть, глобальная вычислительная сеть либо глобальная сеть, такая как Интернет. Канал 16 связи, в общем, представляет любую надлежащую среду связи или набор различных сред связи для передачи видеоданных из исходного устройства 12 в принимающее устройство 14.
Исходное устройство 12 формирует видео для передачи в целевое устройство 14. В некоторых случаях, тем не менее, устройства 12, 14 могут работать практически симметричным способом. Например, каждое из устройств 12, 14 может включать в себя компоненты кодирования и декодирования видео. Следовательно, система 10 может поддерживать одностороннюю и двухстороннюю передачу между видеоустройствами 12, 14, к примеру, для потоковой передачи видео, широковещательной передачи видео или видеотелефонии.
Видеоисточник 18 может включать в себя устройство видеозахвата, такое как одна или более видеокамер, видеоархив, содержащий ранее захваченное видео, или передачу видео вживую от поставщика видеосодержимого. В качестве дополнительной альтернативы, видеоисточник 18 может формировать основанные на компьютерной графике данные в качестве исходного видео или комбинацию живого видео и сформированного компьютером видео. В некоторых случаях, если видеоисточником 18 является камера, исходное устройство 12 и принимающее устройство 14 могут сформировать так называемые камерофоны или видеофоны. В любом случае, захваченное, предварительно захваченное или сформированное компьютером видео может быть кодировано посредством видеокодера 20 для передачи из устройства 12 видеоисточника в видеокодер 26 устройства 14 приема видео через передающее устройство 22, канал 16 и приемное устройство 24. Дисплейное устройство 28 может включать в себя любое из множества дисплейных устройств, к примеру жидкокристаллический дисплей (LCD), плазменный дисплей или дисплей на органических светодиодах (OLED).
Видеокодер 20 и видеодекодер 26 могут быть выполнены с возможностью поддерживать масштабируемое видеокодирование для пространственного, временного масштабирования и масштабирования отношения "сигнал-шум" (SNR). В некоторых аспектах видеокодер 20 и видеодекодер 26 могут быть выполнены с возможностью поддерживать кодирование с масштабированием SNR с высокой степенью детализации (FGS) для SVC. Кодер 20 и декодер 26 могут поддерживать различные степени масштабирования для поддержки кодирования, передачи и декодирования базового слоя и одного или более масштабируемых улучшающих слоев. Для масштабируемого видеокодирования базовый слой переносит видеоданные с минимальным уровнем качества. Один или более улучшающих слоев переносят дополнительный поток битов, чтобы поддерживать более высокие пространственные, временные уровни и/или уровни SNR.
Видеокодер 20 и видеодекодер 26 могут работать согласно стандарту видеосжатия, такому как MPEG-2, MPEG-4, ITU-T H.263 или ITU-T H.264/MPEG-4 улучшенное видеокодирование (AVC). Хотя не показано на фиг. 1, в некоторых аспектах видеокодер 20 и видеодекодер 26 могут быть интегрированы с аудиокодером и декодером соответственно и включать в себя соответствующие модули MUX-DEMUX либо другие аппаратные средства и программное обеспечение, чтобы обрабатывать кодирование аудио и видео в общем потоке данных или отдельных потоках данных. Если применимо, модули MUX-DEMUX могут соответствовать протоколу мультиплексора ITU H.223 или другим протоколам, таким как протокол пользовательских дейтаграмм (UDP).
Стандарт H.264/MPEG-4 (AVC) сформулирован посредством Экспертной группы в области кодирования видео (VCEG) ITU-T совместно с Экспертной группой по киноизображению (MPEG) ISO/IEC как продукт совместного партнерского проекта, известного как Объединенная группа по видеостандартам (JVT). Стандарт H.264 описан в ITU-T Recommendation H.264 "Advanced video coding for generic audiovisual services" посредством Исследовательской группы ITU-T и датирован 03/2005, который может упоминаться в данном документе как стандарт H.264 или спецификация H.264 либо стандарт или спецификация H.264/AVC.
Объединенная группа по видеостандартам (JVT) продолжает работать над дополнением по масштабируемому видеокодированию (SVC) в H.264/MPEG-4 AVC. Спецификация развивающегося дополнения SVC приводится в форме совместного проекта (JD). Объединенная модель масштабируемого видео (JSVM), созданная посредством JVT, реализует средства для использования в масштабируемом видео, которые могут быть использованы в рамках системы 10 для различных задач кодирования, описанных в данном раскрытии. Подробную информацию, касающуюся кодирования с масштабированием SNR с высокой степенью детализации, можно найти в документах Совместного проекта, к примеру в Совместном проекте 6 (SVC JD6), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz и Mathias Wien, "Joint Draft 6: Scalable Video Coding", JVT-S 201, апрель 2006 года, Женева, и в Совместном проекте 9 (SVC JD9), Thomas Wiegand, Gary Sullivan, Julien Reichel, Heiko Schwarz и Mathias Wien, "Joint Draft 9 of SVC Amendment", JVT-V 201, январь 2007 года, Marrakech, Марокко.
В некоторых аспектах для широковещательной передачи видеометодики, описанные в данном раскрытии, могут быть применены к улучшенному видеокодированию H.264 для доставки видеоуслуг реального времени в системах наземной многоадресной передачи мобильного мультимедиа (TM3), использующих спецификацию радиоинтерфейса только прямой линии связи (FLO), "Forward Link Only Air Interface Specification for Terrestrial Mobile Multimedia Multicast", которая должна быть опубликована как Технический стандарт TIA-1099 ("FLO Specification"). Спецификация FLO включает в себя примеры, задающие синтаксис и семантику потока битов и процессы декодирования, подходящие для радиоинтерфейса FLO. Альтернативно, видео может передаваться в широковещательном режиме согласно другим стандартам, таким как DVB-H (цифровая широковещательная передача видео для карманных устройств), ISDB-T (комплексные службы цифровой наземной широковещательной передачи) или DMB (цифровая широковещательная передача мультимедиа). Следовательно, исходным устройством 12 может быть мобильный беспроводной терминал, сервер потоковой передачи видео и сервер широковещательной передачи видео. Тем не менее, методики, описанные в данном документе, не ограничены каким-либо конкретным типом системы широковещательной, многоадресной передачи или передачи "точка-точка". В случае широковещательной передачи исходное устройство 12 может передавать в широковещательном режиме несколько каналов видеоданных в несколько принимающих устройств, каждое из которых может быть аналогичным принимающему устройству 14 по фиг. 1.
Видеокодер 20 и видеодекодер 26 могут быть реализованы как один или более микропроцессоров, процессоров цифровых сигналов (DSP), специализированных интегральных схем (ASIC), программируемых пользователем матричных БИС (FPGA), дискретная логика, программное обеспечение, аппаратные средства, микропрограммное обеспечение или любые комбинации вышеозначенного. Каждый из видеокодера 20 и видеодекодера 26 может быть включен в один или более кодеров или декодеров, любой из которых может быть интегрирован как часть комбинированного кодера/декодера (CODEC) в соответствующем мобильном устройстве, абонентском устройстве, широковещательном устройстве, сервере и т.п. Помимо этого, исходное устройство 12 и принимающее устройство 14 могут включать в себя соответствующие компоненты модуляции, демодуляции, частотного преобразования, фильтрации и усилителя для передачи и приема кодированного видео, в зависимости от необходимости, включая радиочастотные (RF) беспроводные компоненты и антенны, достаточные для того, чтобы поддерживать беспроводную связь. Тем не менее, для упрощения иллюстрации эти компоненты не показаны на фиг. 1.
Видеопоследовательность включает в себя серии видеокадров. Видеокодер 20 оперирует с блоками пикселов в рамках отдельных видеокадров, чтобы кодировать видеоданные. Блоки видео могут иметь фиксированный или изменяющийся размер и могут отличаться в размере согласно заданному стандарту кодирования. Каждый видеокадр включает в себя серии последовательных макроблоков. Каждая серия последовательных макроблоков может включать в себя серию макроблоков, которые могут быть скомпонованы в субблоки. В качестве примера, стандарт ITU-T H.264 поддерживает внутреннее прогнозирование для различных размеров блоков, таких как 16 × 16, 8 × 8, 4 × 4 для компонентов сигнала яркости и 8×8 для компонентов сигнала цветности, а также внутреннее прогнозирование для различных размеров блоков, таких как 16 × 16, 16 × 8, 8 × 16, 8 × 8, 8 × 4, 4 × 8 и 4 × 4 для компонентов сигнала яркости и соответствующие масштабированные размеры для компонентов сигнала цветности.
Меньшие блоки видео могут предоставлять лучшее разрешение и могут быть использованы для позиций видеокадра, которые включают в себя более высокий уровень детализации. В общем, макроблоки (MB) и различные субблоки могут рассматриваться как блоки видео. Помимо этого, серия последовательных макроблоков может считаться серией блоков видео, таких как MB и/или субблоки. Каждая серия последовательных макроблоков может быть независимо декодируемой единицей. После прогнозирования преобразование может быть выполнено для остаточного блока 8×8 или остаточного блока 4×4 и дополнительное преобразование может быть применено к DC-коэффициентам блоков 4×4 для компонентов сигнала цветности или компонентов сигнала яркости, если используется режим прогнозирования intra_16×16.
Фиг.2 - это блок-схема, иллюстрирующая пример видеокодера 20, показанного на фиг. 1. Видеокодер 20 может выполнять внутреннее и взаимное кодирование блоков в видеокадрах. Внутреннее кодирование базируется на пространственном прогнозировании, чтобы уменьшить или исключить пространственную избыточность видео в пределах данного видеокадра. Взаимное кодирование основывается на временном прогнозировании, чтобы уменьшить или исключить временную избыточность видео в пределах соседних кадров видеопоследовательности. Для взаимного кодирования видеокодер 20 выполняет оценку движения, чтобы отслеживать перемещение совпадающих блоков видео между соседними кадрами.
Как показано на фиг.2, видеокодер 20 принимает текущий блок 30 видео в видеокадре, который должен быть кодирован. В примере по фиг. 2 видеокодер 20 может включать в себя модуль 32 оценки движения, модуль 34 хранения опорных кадров, модуль 36 компенсации движения, модуль 38 блочного преобразования, модуль 40 квантования, модуль 42 обратного квантования, модуль 44 обратного преобразования и модуль 46 энтропийного кодирования. Внутриконтурный деблокирующий фильтр (не показан) может быть применен, чтобы фильтровать блоки, чтобы удалить артефакты блокирования. Видеокодер 20 также включает в себя сумматор 48 и сумматор 50. Фиг. 2 иллюстрирует компоненты временного прогнозирования видеокодера 20 для взаимного кодирования блоков видео. Хотя не показано на фиг. 2 для упрощения иллюстрации, видеокодер 20 также может включать в себя компоненты пространственного прогнозирования для внутреннего кодирования некоторых блоков видео.
Модуль 32 оценки движения сравнивает блок 30 видео с блоками в одном или более соседних кадров, чтобы сформировать один или более векторов движения. Соседний кадр или кадры могут извлекаться из узла 34 хранения опорных кадров, который может содержать любой тип запоминающего устройства или устройства хранения данных, чтобы сохранять блоки видео, восстановленные из ранее кодированных блоков. Оценка движения может выполняться для блоков переменного размера, к примеру, 16×16, 16×8, 8×16, 8×8 или меньших размеров блоков. Модуль 32 оценки движения идентифицирует один или более блоков соседних кадров, в наибольшей степени совпадающих с текущим блоком 30 видео, к примеру, на основе модели случайного искажения, и определяет смещение между блоками в соседних кадрах и текущим блоком видео. На этой основе модуль 32 оценки движения формирует один или более векторов движения (MV), которые указывают абсолютную величину и траекторию смещения между текущим блоком 30 видео и одним или более совпадающих блоков от опорных кадров, используемых для того, чтобы кодировать текущий блок 30 видео.
Векторы движения могут иметь точность в половину или четверть пиксела или даже большую точность, позволяя видеокодеру 20 отслеживать движение с более высокой точностью, чем целочисленные позиции пикселов, и получать более оптимальный блок с предсказанием. Когда используются векторы движения с дробными пиксельными значениями, операции интерполяции выполняются в узле 36 компенсации движения. Модуль 32 компенсации движения идентифицирует оптимальные блочные сегменты и вектор движения или векторы движения для блока видео с помощью определенного критерия, такого как модель случайного искажения. Например, может быть несколько векторов движения в случае двунаправленного прогнозирования. Используя результирующие блочные сегменты и векторы движения, модуль 36 компенсации движения формирует видеоблок с предсказанием.
Видеокодер 20 формирует остаточный блок видео посредством вычитания блока с предсказанием видео, сформированного посредством узла 36 компенсации движения, из оригинального текущего блока 30 видео в сумматоре 48. Модуль 38 блочного преобразования применяет преобразование, такое как целочисленное преобразование 4×4 или 8×8, используемое в H.264/AVC, к остаточному блоку, формируя остаточные преобразованные блочные коэффициенты. Модуль 40 квантования квантует остаточные преобразованные блочные коэффициенты, чтобы дополнительно уменьшить расход битов на отсчет. Модуль 46 энтропийного кодирования энтропийно кодирует квантованные коэффициенты, чтобы еще более уменьшить расход битов на отсчет.
Модуль 46 энтропийного кодирования выступает в качестве модуля кодирования с переменной длиной (VLC), чтобы применять VLC-кодирование к квантованным блочным коэффициентам. В частности, модуль 46 энтропийного кодирования может быть выполнен с возможностью выполнять VLC-кодирование блочных коэффициентов цифрового видео с помощью набора VLC-параметров, которые могут быть сохранены как внутренние состояния, собирать статистику кодирования в ходе VLC-кодирования блочных коэффициентов цифрового видео и корректировать один или более VLC-параметров в ходе VLC-кодирования на основе собранной статистики кодирования. В общем, видеодекодер 26 выполняет обратные операции, включающие в себя VLC-декодирование, чтобы декодировать и восстанавливать кодированное видео, как описано, к примеру, со ссылкой на фиг. 3.
Модуль 42 обратного квантования и модуль 44 обратного преобразования применяют обратное квантование и обратное преобразование соответственно, для того чтобы восстановить остаточный блок. Сумматор 50 прибавляет восстановленный остаточный блок к блоку с предсказанием с компенсацией движения, сформированному посредством узла 36 компенсации движения, чтобы сформировать восстановленный блок видео для хранения в узле 34 хранения опорных кадров. Восстановленный блок видео используется посредством узла 32 оценки движения и узла 36 компенсации движения для того, чтобы кодировать блок в последующем видеокадре.
Фиг.3 - это блок-схема, иллюстрирующая пример видеодекодера 26. Видеодекодер 26 может выполнять внутреннее и взаимное декодирование блоков в видеокадрах. Как показано на фиг. 3, видеодекодер 26 принимает кодированный поток битов, который кодирован посредством видеокодера 20. В примере на фиг. 3 видеодекодер 26 включает в себя модуль 52 энтропийного декодирования, модуль 54 компенсации движения, модуль 56 обратного квантования, модуль 58 обратного преобразования и модуль 62 хранения опорных кадров. Видеодекодер 26 также может включать в себя внутриконтурный деблокирующий фильтр (не показан), который фильтрует выходной сигнал сумматора 64. Видеодекодер 26 также включает в себя сумматор 64. Фиг. 3 иллюстрирует компоненты временного прогнозирования видеодекодера 26 для взаимного кодирования блоков видео. Хотя не показано на фиг. 3 для упрощения иллюстрации, видеодекодер 26 также может включать в себя компоненты пространственного прогнозирования для внутреннего кодирования некоторых блоков видео.
Модуль 52 энтропийного декодирования принимает кодированный поток видеобитов и декодирует из потока битов остаточные коэффициенты, режим кодирования макроблоков и информацию движения, которая может включать в себя векторы движения и блочные сегменты. Следовательно, модуль 52 энтропийного декодирования выступает в качестве модуля VLC-декодирования. Например, чтобы декодировать квантованные остаточные коэффициенты из кодированного потока битов, аналогично узлу 46 энтропийного кодирования по фиг. 2, модуль 52 энтропийного декодирования по фиг. 3 может выполнять адаптивное VLC-декодирование блочных коэффициентов цифрового видео, как описано в данном раскрытии, используя набор VLC-параметров, которые могут быть сохранены как внутренние состояния, собирает статистику кодирования в ходе VLC-декодирования блочных коэффициентов цифрового видео и корректирует один или более VLC-параметров в ходе VLC-декодирования на основе собранной статистики кодирования. Тем не менее, модуль 52 энтропийного декодирования выполняет VLC-декодирование обратным способом относительно узла 46 энтропийного кодирования по фиг. 2, чтобы извлечь квантованные блочные коэффициенты из кодированного потока битов.
Модуль 54 компенсации движения принимает векторы движения и блочные сегменты и один или более восстановленных опорных кадров из узла 62 хранения опорных кадров, чтобы сформировать блок с предсказанием видео. Модуль 56 обратного квантования обратно квантует, т.е. деквантует квантованные блочные коэффициенты. Модуль 58 обратного преобразования применяет обратное преобразование, к примеру обратное DCT или обратное целочисленное преобразование 4×4 или 8×8, к коэффициентам, чтобы сформировать остаточные блоки. Блоки с предсказанием видео затем суммируются посредством сумматора 64 с остаточными блоками, чтобы сформировать декодированные блоки. Деблокирующий фильтр (не показан) может быть применен, чтобы фильтровать декодированные блоки, чтобы удалить артефакты блокирования. Фильтрованные блоки затем помещаются в модуль 62 хранения опорных кадров, который предоставляет опорный кадр для декодирования последующих видеокадров и также формирует декодированное видео, чтобы активировать дисплейное устройство 28 (фиг. 1).
В настоящее время Объединенная группа по видеостандартам (JVT), которая состоит из экспертов по кодированию видео из ISO/IEC MPEG и ITU-T VCEG, работает над стандартом SVC, который является дополнением масштабируемого кодирования видео к H.264/AVC. Совместное программное обеспечение, называемое JSVM (Joint Scalable Video Model), используется участниками. JSVM поддерживает комбинированное масштабирование. Поток битов SVC может иметь масштабирование с высокой степенью детализации, пространственное масштабирование, временное масштабирование или любую комбинацию вышеозначенного.
Масштабирование с высокой степенью детализации является важным и очень желательным свойством для видеокодирования. Это свойство дает возможность сжатому потоку видеобитов быть практически произвольно отсекаемым, в то же время предоставляя конечному пользователю постепенное ухудшение качества декодированного видео. При масштабировании с высокой степенью детализации поток битов улучшающего слоя может произвольно отсекаться. По мере того как видеодекодер 26 принимает и декодирует больше битов в слое FGS, он формирует более оптимальное качество видео. Более того, FGS в JSVM спроектировано таким образом, что улучшение качества видео равномерно распределено по всему видеокадру, в отличие от концентрации только в рамках определенной пространственной области кадра, поскольку последнее должно быть визуально нежелательно для конечного зрителя.
FGS позволяет добиваться постепенного улучшения качества видео с помощью кодирования в битовой плоскости. Если видеокадр базового или предыдущего слоя квантован с помощью параметра QP квантования, к примеру с использованием узла 40 квантования (фиг. 2), то видео текущего улучшающего слоя квантуется с помощью параметра квантования примерно QP-6, который эффективно уменьшает размер шага квантования наполовину. Как результат уменьшения размера шага квантования, больше остаточных коэффициентов преобразования становятся ненулевыми на улучшающем слое.
Коэффициенты в улучшающем слое, в общем, могут быть классифицированы на три типа: незначимые коэффициенты, значимые коэффициенты и уточняющие коэффициенты. Незначимый коэффициент - это коэффициент, имеющий значение нуль в улучшающем слое, для которого соответствующий коэффициент в базовом или предыдущем слое также равен нулю. Значимый коэффициент - это коэффициент, который является ненулевым в улучшающем слое, но для которого соответствующий коэффициент в базовом или предыдущем слое равен нулю. Уточняющий коэффициент - это коэффициент, для которого соответствующий коэффициент в базовом или предыдущем слое уже является ненулевым (т.е. значимым). Значения этих ненулевых коэффициентов в базовом или предыдущем слое уточняются посредством значений соответствующих коэффициентов в текущем улучшающем слое.
Фиг.4 - это схема, иллюстрирующая остаточные блочные коэффициенты в блоке, ассоциативно связанном с базовым слоем серии последовательных макроблоков масштабируемого видеокодирования (SVC). Фиг. 5 - это схема, иллюстрирующая классификацию остаточных блочных коэффициентов в блоке, ассоциативно связанном с улучшающим слоем масштабирования с высокой степенью детализации (FGS) серии последовательных макроблоков SVC. В примере по фиг. 4 блок базового или предыдущего слоя включает в себя два ненулевых остаточных коэффициента 66, 68 преобразования и большинство остаточных коэффициентов 70 преобразования в сером. В примере по фиг. 5 блок FGS-слоя включает в себя незначимые коэффициенты 72 в сером, значимые коэффициенты 74, 76 в перекрестной штриховке и уточняющие коэффициенты 78, 80 в пунктирном шаблоне. Уточняющие коэффициенты 78, 80 в FGS-блоке по фиг. 5 соответствуют ненулевым коэффициентам 66, 68 в блоке базового или предыдущего слоя по фиг. 4. Как показано на фиг. 5, значимые коэффициенты могут иметь абсолютную величину больше 1. Например, значимый коэффициент 76 имеет абсолютную величину 2 в примере по фиг. 5. Отметим, что, хотя уточняющий коэффициент, такой как уточняющий коэффициент 78 на фиг. 5, может иметь значение 0, он может считаться ненулевым коэффициентом, поскольку соответствующий коэффициент базового или предыдущего слоя является ненулевым. Поэтому в данном раскрытии значимые и уточняющие коэффициенты иногда упоминаются вместе как ненулевые коэффициенты.
Аналогично H.264/AVC, SVC JD9 также поддерживает два режима энтропийного кодирования: режим контекстно-адаптивного двоичного арифметического кодирования (CABAC) и режим контекстно-адаптивного кодирования с переменной длиной (CAVLC). Данное раскрытие описывает методики адаптивного VLC, которые могут быть использованы для адаптивного кодирования коэффициентов в улучшающем FGS-слое в режиме CAVLC. В сравнении с соответствующей схемой, заданной в SVC JD9, методики кодирования коэффициентов FGS-слоя, описанные в данном раскрытии, позволяют существенно снизить вычислительную сложность в видеокодере 20 и/или видеодекодере 26, при этом в то же время предоставляя более оптимальную эффективность кодирования.
Методики адаптивного VLC, описываемые в данном раскрытии, могут не ограничиваться кодированием коэффициентов в FGS-слое. Наоборот, эти коэффициенты могут быть применены в общем к любой системе кодирования, которая кодирует позицию ненулевых коэффициентов с использованием серий нулей. Примерами таких систем кодирования является обычный однослойный видеокодер, кодер с дискретным улучшающим слоем SVC-кодера или кодер с улучшающим FGS-слоем SVC-кодера. В текущем совместном проекте SVC значимые коэффициенты и уточняющие коэффициенты в FGS-слое, кодируются отдельно с помощью различных механизмов. Тем не менее, значимые коэффициенты и уточняющие коэффициенты могут кодироваться как серии нулей, и в этом случае методики адаптивного VLC, описанные в данном раскрытии, могут быть применимы к кодированию обоих типов коэффициентов. Применение методик адаптивного VLC для того, чтобы кодировать позиции значимых коэффициентов как серии нулей в улучшающем FGS-слое, описывается в данном раскрытии для целей иллюстрации, но без ограничения на применение этих методик к другим системам кодирования, которые кодируют позиции ненулевых коэффициентов с помощью серий нулей, как описано выше.
Во многих системах кодирования, которые применяют основанное на блоках дискретное преобразование, такое как целочисленное преобразование 8×8 или 4×4, используемое в H.264/AVC, позиции ненулевых коэффициентов кодируются с помощью серий нулей. Серия нулей - это число следующих друг за другом нулевых коэффициентов перед ненулевым коэффициентом при определенном порядке сканирования. Следовательно, серия нулей может идти от начала блока до первого ненулевого коэффициента, между следующими друг за другом ненулевыми коэффициентами или между последним ненулевым коэффициентом и последней подполосной позицией блока. Когда видеодекодер 26 принимает серии нулей в определенном предварительно заданном порядке, позиции всех ненулевых коэффициентов могут быть декодированы с использованием сведений о предварительно заданном порядке кодирования и значений серий нулей. При кодировании FGS-слоя с помощью VLC в SVC позиции ненулевых коэффициентов могут быть кодированы как серии нулей. В текущем Совместном проекте, то есть JD9, только значимые коэффициенты кодируются как серии нулей; уточняющие коэффициенты кодируются отдельно от значимых коэффициентов с помощью другого механизма. В этом случае уточняющие коэффициенты исключаются при формировании серии нулей. Другими словами, уточняющие коэффициенты не подсчитываются как часть серии нулей, но также не прерывают серию нулей.
Символ конца блока (EOB) может быть комбинирован с сериями нулей, чтобы сформировать одномерный набор символов. Символ EOB указывает конец кодируемого блока. Тем не менее, символ EOB не обязательно является последней подполосной позицией в блоке видео. Наоборот, EOB может возникать в любой позиции внутри блока видео и служит для того, чтобы сигнализировать о том, что больше нет ненулевых коэффициентов после позиции EOB. Соответственно, символ EOB отправляется после того, как позиция и знак последнего ненулевого коэффициента в блоке кодированы. Как будет описано, символ EOB может быть символом обычного EOB или символом специального EOB, каждый из которых переносит различную информацию о ненулевых коэффициентах в блоке. Фактическая переменная, которая кодируется с помощью кодирования с переменной длиной (VLC), является индексом символа в наборе символов серий нулей и EOB. В этом наборе символов серия нулей большей длины имеет больший индекс, и индекс символа EOB может зависеть от определенных условий кодирования, таких как подполосная позиция, где EOB подсчитывается, как описано ниже. Набор символов затем кодируется с помощью методик VLC, которые могут назначать более короткие кодовые слова меньшим значениям индекса.
Таблица сдвига EOB может быть использована для того, чтобы идентифицировать индекс EOB в наборе символов. Например, таблица сдвига EOB может быть составлена как EOBshift[]={16, 4, 3, 1, 0,....}, где [] означает табличный индекс, который зависит от определенных предварительно заданных условий кодирования, таких как текущая подполосная позиция или цикл кодирования. Например, подполосная позиция после последнего ненулевого коэффициента может быть использована для того, чтобы индексировать таблицу сдвига EOB. В этом случае при зигзагообразном порядке сканирования символ EOB отправляется после того, как последний ненулевой коэффициент 76 на фиг. 5 отправлен; и значение EOBshift[8]=0 отправляется, поскольку подполосная позиция после последнего ненулевого коэффициента 76 равна 8 при зигзагообразном порядке сканирования. Вероятность EOB повышается по мере того, как кодирование переходит к части блока, содержащей более высокие частотные подполосы. Следовательно, чтобы отразить повышенную вероятность EOB по мере того, как повышается кодируемая подполоса, значение индекса символа EOB в наборе символов уменьшается. Как результат, таблица сдвига EOB может содержать монотонно невозрастающие записи. Более того, блок, показанный на фиг. 5, содержит ненулевой коэффициент 76 с абсолютной величиной в 2. В этом случае фактический отправленный символ EOB может не индексироваться из таблицы EOBshift[]. Наоборот, он вместо этого может индексироваться из таблицы sEOBshift[] сдвига специальных EOB (sEOB). Эта особая ситуация более подробно описана ниже.
Фиг.6 - это схема, иллюстрирующая кодирование ненулевых коэффициентов как серий нулей в блоке остаточных коэффициентов (блоке 0). Фиг.7 - это схема, иллюстрирующая основанное на циклах кодирование значимых и уточняющих коэффициентов в другом блоке (блоке 1), ассоциативно связанном с улучшающим FGS-слоем серии последовательных макроблоков SVC. На фиг.6 блок 0 включает в себя ненулевые коэффициенты 82 и 84 и EOB 86. На фиг.7 блок 1 включает в себя значимые коэффициенты 88, 90, 92, уточняющий коэффициент 94 и EOB 96.
Как показано на фиг.6, следующая информация отправляется, чтобы идентифицировать позиции ненулевых коэффициентов в блоке: 1) серия=0, знак=1 (отрицательный); 2) серия=0, знак=0 (положительный); 3) EOB. Как упоминалось выше, серии нулей и EOB, как представлено посредством записи в таблице сдвига EOB, комбинируются в одномерный набор символов. Индексы набора символов затем кодируются. Кодирование индексов набора символов дополнительно может зависеть от конкретных условий кодирования, таких как подполосная позиция или цикл кодирования. В качестве одного примера, VLC-кодирование может быть приведено к требуемым параметрам на основе подполосы или кластера подполос блока, которому принадлежит серия нулей или EOB. В качестве другого примера условия, VLC-кодирование также может быть приведено к требуемым параметрам на основе числа серий нулей, которые кодированы для блока. Кодирование индексов серии нулей и набора символов EOB может осуществляться согласно оценке вероятности при текущем условии кодирования.
Выполнение условной оценки вероятности позволяет VLC-кодеру более точно отслеживать вероятности символов, а следовательно, достигать большей эффективности кодирования.
В текущем SVC JD9 значимые коэффициенты в FGS-слое кодируются как серии нулей. Значимое кодирование в SVC обусловлено циклами кодирования. Например, словарь VLC-кодирования, используемый для того, чтобы кодировать индексы символов серий нулей для значимых коэффициентов, зависит от цикла кодирования, которому принадлежит значимый коэффициент. Цикл кодирования задается на основе двух переменных: (1) начальной позиции серии нулей при зигзагообразном порядке сканирования и (2) числа следующих друг за другом уточняющих коэффициентов в зигзагообразном порядке до начальной позиции. Сведения о том, как задавать цикл кодирования, можно найти в SVC JD9. В качестве примера на фиг.7 три значимых коэффициента 88, 90, 92 принадлежат циклам 0, 1 и 4 кодирования соответственно. Для данного цикла кодирования, если больше нет значимых коэффициентов в блоке, то символ EOB (конец блока) отправляется, к примеру, как указано посредством ссылки с номером 96 на фиг. 7. На фиг.7 символ EOB отправляется для блока 1 в цикле 8. В частности, поскольку блок содержит значимый коэффициент 92, который имеет абсолютную величину 2, специальный EOB отправляется для блока 1.
В текущем SVC JD9, в качестве примера, до пяти различных словарей VLC-кодирования может быть использовано для того, чтобы кодировать индексы серий нулей и EOB в наборе символов. Эти словари VLC-кодирования назначают более короткие коды меньшим индексам. Эти словари VLC-кодирования настраиваются для различных распределений вероятностей символов. Следовательно, различные словари VLC-кодирования могут быть использованы для того, чтобы кодировать серию нулей и набор символов EOB, которые могут иметь различные распределения вероятностей при различных условиях кодирования. Выбор конкретного словаря VLC-кодирования для того, чтобы кодировать набор символов серии нулей EOB, может быть осуществлен с помощью таблицы выбора словаря VLC-кодирования. Аналогично таблице сдвига EOB, таблица выбора словаря VLC-кодирования также может быть проиндексирована для определенных условий кодирования. В SVC JD9 цикл кодирования, которому текущая серия или EOB принадлежит, используется для того, чтобы индексировать в таблицах сдвига EOB и выбора словаря VLC-кодирования.
В улучшающем FGS-слое значимые коэффициенты и уточняющие коэффициенты кодирования могут кодироваться отдельно. В этом случае, в ходе определения длины серии нулей вплоть до следующего значимого коэффициента в текущем цикле кодирования любые уточняющие коэффициенты, встретившиеся в ходе сканирования, не являются вкладом в серию нулей. Например, в блоке FGS-слоя на фиг. 5 серия нулей до значимого коэффициента 74 равна 1, а не 3, поскольку уточняющие коэффициенты 78 и 80 не учитываются как серия нулей до значимого коэффициента 74. Как пояснено выше, значимые и уточняющие коэффициенты могут быть кодированы как серии нулей. Тем не менее, независимо от того, кодированы значимые коэффициенты и уточняющие коэффициенты отдельно или совместно как серии нулей, могут быть применены методики адаптивного VLC, описанные в данном документе.
Абсолютная величина ненулевого коэффициента может быть больше 1. Например, на фиг. 7 последний значимый коэффициент 92 имеет абсолютную величину 2. В некоторых системах кодирования абсолютные величины ненулевых коэффициентов, которые больше 1, могут не отправляться до тех пор, пока символ EOB не отправлен для блока. После того как позиция и знак последнего ненулевого коэффициента закодированы, символ обычного EOB переносит информацию о том, что ни один из ненулевых коэффициентов в блоке не имеет абсолютную величину больше 1. Если блок содержит один или более ненулевых коэффициентов с абсолютными величинами больше 1, тем не менее, вместо использования таблицы сдвига обычного EOB для того, чтобы кодировать символ EOB, символ специального EOB, индексированный из таблицы сдвига специальных EOB, может быть кодирован. После того как словарь VLC-кодирования для символа специального EOB отправлена, кодируются позиции и абсолютные величины этих ненулевых коэффициентов с абсолютной величиной больше 1.
В текущем SVC JD9 символ специального EOB формируется посредством sEobBase+termSym, где первый член sEobBase - это значение, которое может быть отличено от всех возможных серий нулей и обычного EOB для применимого цикла. Значение sEobBase обычно вычисляется как sEobBase=numRemainingZeros+1. Переменная numRemainingZeros - это число коэффициентов в зигзагообразном порядке от последнего значимого коэффициента до последней подполосы блока минус любой уточняющий коэффициент в промежутке. Второй член termSym формируется следующим образом. Если S - это общее число значимых коэффициентов в блоке, N - это число коэффициентов с абсолютной величиной больше, а M - это максимальная абсолютная величина таких коэффициентов, то значение termSym следующее:
if(M<4)
termSym=2*(N-1)+(M%2)<img file="00000001.tif" he="3" wi="39" img-content="undefined" img-format="tif" />(1)
Else
termSym=S*(M-2)+(N-1)
Следовательно, значение termSym представляет абсолютную величину значимых коэффициентов в сценарии специального EOB посредством указания как числа значимых коэффициентов, имеющих абсолютную величину больше 1, и максимальной абсолютной величины из этих значимых коэффициентов. В примере по фиг. 7, для блока 1, sEobBase равно 9, а termSym равно 0. Следовательно, вместо отправки EOBShift[8] для того, чтобы указать конец блока, видеокодер 20 должен отправить специальный EOB в sEobBase+termSym=9, используя словарь VLC-кодирования, выбранный для этого цикла кодирования. Например, если словарем кодирования, выбранным для цикла 1, является словарь кодирования 0 (унарный код), то специальный EOB в 9 отправляется с помощью 10 битов. Согласно этой схеме видеодекодер 26 должен легко распознавать обычный EOB и специальный EOB, поскольку индекс специального EOB всегда больше индекса любой возможной серии нулей или индекса обычного EOB.
После отправки специального EOB видеокодер 20 должен отправить S битов, чтобы указать то, какие из S значимых коэффициентов в блоке имеют абсолютную величину больше 1. Видеокодер 20 должен затем кодировать "абсолютную величину - 2" каждого такого коэффициента с помощью унарного кода. В примере блока 1 на фиг.7 3 бита отправляются для того, чтобы идентифицировать то, что последний значимый коэффициент 92 имеет абсолютную величину больше 1, после чего дополнительная информация не должна отправляться. Дополнительные сведения, касающиеся кодирования по абсолютной величине, можно найти в SVC JD9.
В SVC JD9 таблица сдвига EOB и таблица выбора словаря кодирования, обе индексированные посредством цикла кодирования, отправляются в начале набора данных серии последовательных макроблоков. Чтобы достигать высокой эффективности кодирования для значимого кодирования, видеокодер 20 должен проанализировать все блоки в серии последовательных макроблоков видео и собрать статистику серий нулей и EOB для каждого цикла кодирования. Видеокодер 20 далее должен определить оптимальную таблицу сдвига EOB и таблицу выбора словаря кодирования на основе статистики для каждого цикла кодирования. В фактическом проходе кодирования видеокодер 20 должен отправлять таблицы оптимального сдвига EOB и выбора словаря кодирования в потоке битов и затем использовать их для того, чтобы выполнять значимое кодирование для текущего FGS-слоя. Следовательно, чтобы достичь высокой эффективности кодирования, выделенный проход может потребоваться для того, чтобы собрать статистику и определить оптимальные параметры кодирования, к примеру таблицу сдвига и таблицу выбора словаря кодирования, за которым должен следовать дополнительный проход, чтобы выполнить кодирование с оптимальными параметрами кодирования. К сожалению, эта схема значимого кодирования имеет ряд недостатков.
В качестве одного примера, в реализации SVC JD9 сложность кодера может быть высокой вследствие осуществления двух проходов через серию последовательных макроблоков видео, первого для того, чтобы подсчитать статистику для формирования таблиц, и второго для того, чтобы выполнить фактическое кодирование с помощью сформированных таблиц. Если кодер пропускает первый проход сбора статистики, то эффективность кодирования пострадает, поскольку таблица сдвига EOB и таблица выбора словаря кодирования может не быть подстроена под фактическую статистику текущих кодированных видеоданных. Вытекающие вследствие этого потери эффективности кодирования могут быть высокими.
В качестве другого примера, схема кодирования специальных EOB, приведенная в SVC JD9, не является эффективной. Способ, которым формируется символ специального EOB, может создавать символы, которые являются нежелательно большими. В свою очередь, большие символы кодируются с помощью более длинных кодовых слов VLC, что может приводить к ухудшению кодирования, особенно для видеосодержимого, в котором число блоков, содержащих значимые коэффициенты с абсолютной величиной больше 1, относительно высокое.
В качестве дополнительного примера, кодирование коэффициентов сигнала цветности согласно схеме SVC JD9 зачастую является неэффективным. Аналогично H.264/AVC, в SVC коэффициенты сигнала цветности отправляются как DC сигнала цветности и AC сигнала цветности. При кодировании значимых DC- и AC-коэффициентов сигнала цветности только одна таблица сдвига EOB из 16 записей для сигнала цветности включена в поток битов FGS-слоя. Эта таблица сдвига EOB используется для того, чтобы кодировать и DC- и AC-коэффициенты сигнала цветности. Тем не менее, DC- и AC-коэффициенты сигнала цветности имеют различную статистику. Например, 4 цикла кодирования требуются для DC сигнала цветности, в сравнении с 15 циклами кодирования для AC сигнала цветности. Как следствие, совместное использование одной общей таблицы сдвига EOB между DC и AC сигнала цветности неэффективно. Более того, отдельная таблица выбора словаря кодирования не предусмотрена в потоке битов для кодирования DC и AC сигнала цветности. Вместо этого, в SVC JD9, сигнал яркости, DC сигнала цветности и AC сигнала цветности - все используют одну таблицу выбора словаря кодирования. Совместное использование одной таблицы выбора словаря кодирования приводит к снижению эффективности кодирования, поскольку коэффициенты сигнала яркости, DC- и AC-коэффициенты сигнала цветности - все имеют различную статистику.
В соответствии с этим раскрытием видеокодер 20 может быть выполнен с возможностью реализовать методики адаптивного VLC. В некоторых аспектах данного раскрытия методики адаптивного VLC могут быть сформулированы так, чтобы преодолеть один или более недостатков, ассоциативно связанных с текущей реализацией SVC JD9, приведенной выше. Более того, методики адаптивного VLC, приведенные в данном раскрытии, предоставляют общую архитектуру VLC-кодирования, которая может быть применена к любому однослойному или многослойному видеокодеру, который кодирует блочные коэффициенты как серии нулей. Соответственно, такие методики не обязательно ограничены SVC.
Например, модуль 46 энтропийного кодирования видеокодера 20 может быть выполнен с возможностью динамически определять оптимальные параметры кодирования, такие как таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования, на основе статистики, собранной в ходе прохода кодирования. Статистика может включать в себя, например, счетчики серий нулей, EOB и sEOB в течение кодирования серии последовательных макроблоков видео. Модуль 46 энтропийного кодирования применяет схему адаптивного VLC, которая уменьшает сложность кодера при сохранении высокого уровня эффективности кодирования. В схеме адаптивного VLC модуль 46 энтропийного кодирования не отправляет явно таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования как части кодированного потока битов. Вместо этого таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования являются внутренними состояниями, хранимыми в видеокодере 20 и видеодекодере 26.
Модуль 46 энтропийного кодирования обновляет внутренние состояния в видеокодере 20 на основе статистики, накопленной в течение прохода кодирования. Аналогично, модуль 52 энтропийного декодирования обновляет внутренние состояния в видеодекодере 26 на основе статистики, накопленной в течение прохода декодирования. Сбор статистики и корректировка параметров кодирования могут быть выполнены в то время, пока кодирование или декодирование серии последовательных макроблоков продолжается. Таким образом, таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования динамически приспосабливаются к статистике коэффициентов в текущей серии последовательных макроблоков видео, исключая необходимость отправки этих таблиц в потоке битов, а также исключая необходимость формирования этих таблиц в кодере через отдельный проход кодирования, выделенный для сбора статистики.
Вместо отправки таблиц параметров кодирования как части данных серии последовательных макроблоков видео, схема адаптивного VLC, реализованная посредством видеокодера 20 и видеодекодера 26, хранит эти таблицы как внутренние состояния и обновляет записи таблиц на основе накопленной статистики в серии последовательных макроблоков видео. Хранение и обновление внутренних состояний в ходе кодирования серии последовательных макроблоков видео позволяет видеокодеру 20 исключить первый проход кодирования, который собирает статистику для того, чтобы определить оптимальные таблицы параметров кодирования без существенного ухудшения эффективности кодирования. Помимо этого, в случае FGS-слоя серии последовательных макроблоков SVC, поскольку таблицы необязательно должны отправляться посредством видеокодера 20 в начале серии последовательных макроблоков, схема адаптивного VLC также может повышать крутизну возрастания в начале кривой случайного искажения в сценарии отсечения потока битов. Модуль 52 энтропийного декодирования видеодекодера 26 может применять такие же методики, что использованы посредством узла 46 энтропийного кодирования видеокодера 20 для того, чтобы поддерживать адаптивное VLC на стороне декодера.
Еще одно уточнение в узле 46 энтропийного кодирования, в соответствии с аспектом настоящего раскрытия, может влечь за собой кодирование специального EOB в двух символах как sEOB и termSym вместо комбинированного символа sEOB (sEOB=sEobBase + termSym), как использовано в SVC JD9. В частности, символ sEOB, который указывает событие того, что, по меньшей мере, один ненулевой коэффициент в блоке имеет абсолютную величину больше 1, может быть введен как отдельный символ в набор символов, который содержит серии нулей и обычный EOB. Индекс символа sEOB в комбинированном наборе символов может быть определен посредством узла 46 энтропийного кодирования (или узла 52 энтропийного декодирования) на основе оценки вероятностей специальных EOB при текущем условии кодирования, к примеру в текущем цикле кодирования. После того как символ специального EOB закодирован, отправляется информация абсолютной величины для этих коэффициентов с абсолютными величинами больше 1. Для кодирования абсолютных величин может быть использована схема, аналогичная использованию termSym в SVC JD9.
Альтернативно, могут быть использованы другие схемы, которые предоставляют лучшую эффективность кодирования. Если такая схема, как описано в SVC JD9, используется, то значение termSym может быть кодировано отдельно посредством видеокодера 20 с помощью фиксированной таблицы VLC-кодирования. Таблица сдвига специального EOB может храниться в видеокодере 20 для того, чтобы фиксировать вероятность блоков, содержащих ненулевые коэффициенты с абсолютной величиной больше 1. Таблица сдвига специального EOB может быть индексирована при определенных условиях кодирования. Аналогичные условия кодирования, используемые для того, чтобы индексировать таблицу сдвига EOB, такие как подполосная позиция, где возникает специальный EOB, или цикл кодирования, как задано в SVC JD9, могут быть использованы для того, чтобы индексировать таблицу сдвига специального EOB. Модуль 46 энтропийного кодирования видеокодера 20 приспосабливает индекс символа специального EOB в комбинированной серии и наборе символов EOB к фактической вероятности блоков, содержащих ненулевые коэффициенты с абсолютными величинами больше 1. Модуль 52 энтропийного декодирования видеодекодера 26 обнаруживает событие специального EOB, когда он декодирует из потока битов символ, который равен индексу символа специального EOB при текущем условии кодирования, и обновляет статистику специального EOB соответствующим образом, чтобы оставаться синхронным с узлом 46 энтропийного кодирования.
В качестве дополнительного уточнения, модуль 46 энтропийного кодирования видеокодера 20 может быть выполнен с возможностью применять отдельные таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования для того, чтобы кодировать DC- и AC-коэффициенты сигнала цветности. Схема адаптивного кодирования также может быть использована, и при этом такие таблицы могут храниться как внутренние состояния, которые динамически корректируются на основе статистики, собранной в течение прохода кодирования, к примеру, как описано выше. Таким образом, видеокодер 20 может разделять кодирование DC- и AC-блоков сигнала цветности. Помимо этого, DC- и AC-блоки сигнала цветности могут быть кодированы отдельно от блоков сигнала яркости. Как результат, DC-коэффициенты сигнала яркости и AC-коэффициенты сигнала яркости имеют отдельные таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования, подстроенные под собственную статистику. Эти записи таблиц могут быть приспособлены согласно накопленной статистике из прохода кодирования. Альтернативно, некоторые записи таблиц, к примеру таблиц, ассоциативно связанных с DC компонента цветности, могут не быть выполнены с возможностью уменьшать требования по памяти и операции обновления. Вместо этого таблицы для DC сигнала цветности и/или AC сигнала цветности могут быть представлены как фиксированные таблицы и не обновляться в ходе кодирования.
Модуль 52 энтропийного декодирования видеодекодера 26 может применять аналогичные методики, чтобы поддерживать применение отдельных таблиц сдвига EOB, сдвига специального EOB и выбора словаря кодирования для DC- и AC-коэффициентов сигнала цветности. В каждом случае VLC-модуль, реализованный посредством узла 46 энтропийного кодирования или узла 52 энтропийного декодирования, может быть выполнен с возможностью выполнять VLC-кодирование DC- и AC-блоков компонента цветности отдельно друг от друга. В частности, VLC-модуль может быть выполнен с возможностью корректировать таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования для DC- и AC-блоков сигнала цветности отдельно на основе статистики кодирования, собранной отдельно для DC- и AC-блоков сигнала цветности. VLC-модуль также может кодировать блоки сигнала яркости отдельно от DC- и AC-блоков сигнала цветности.
В этом раскрытии, например, примеры сведений в отношении того, как инициализировать параметры VLC-кодирования в качестве внутренних состояний для сигнала яркости, DC сигнала цветности и AC сигнала цветности, когда и как обновлять параметры кодирования и как нормализовать накопленную статистику, также представлены. Примеры сведений в отношении того, как уменьшить память, требуемую посредством внутренних состояний, и как уменьшить число операций обновления, также представлены. В общем, VLC-кодирование содержит кодирование позиций ненулевых блочных коэффициентов в блоке как серии нулей с помощью VLC-параметров.
Для SVC, когда блочные коэффициенты цифрового видео представляют блочные коэффициенты в улучшающем слое серии последовательных макроблоков масштабируемого видеокодирования (SVC), содержащей улучшающий слой и, по меньшей мере, один базовый или предыдущий слой, кодирование позиций ненулевых блочных коэффициентов в блоке может содержать кодирование только позиций значимых коэффициентов. Значимые коэффициенты в улучшающем слое - это коэффициенты, которые являются ненулевыми в улучшающем слое, для которого соответствующие коэффициенты в базовом или предыдущем слое являются нулевыми. Альтернативно, позиции улучшающих и значимых коэффициентов в FGS-блоке видео серии последовательных макроблоков SVC могут быть кодированы как серии нулей, тем самым снижая сложность системы в применении отдельного механизма кодирования для улучшающих коэффициентов. Тем не менее, как описано в этом раскрытии, адаптивная схема может быть применима не только к значимому кодированию в FGS-слое SVC, но также к любой другой схеме видеокодирования, которая кодирует позицию ненулевых коэффициентов преобразования с помощью серий нулей. Более того, схема адаптивного VLC, описанная в данном раскрытии, может быть применима к кодированию уточняющих коэффициентов, если уточняющие коэффициенты в FGS-слое также кодируются как серии нулей.
Фиг.8 - это блок-схема узла 46 энтропийного кодирования, выполненного с возможностью применять процесс адаптивного VLC в соответствии с аспектом данного раскрытия. Модуль 46 энтропийного кодирования может размещаться внутри видеокодера 20 по фиг. 1 и 2. Как показано на фиг. 8, модуль 46 энтропийного кодирования принимает квантованные остаточные блочные коэффициенты, к примеру, из узла 40 квантования (фиг. 2) и формирует энтропийно кодированный поток битов для передачи в другое устройство для декодирования. В примере по фиг. 8 модуль 46 энтропийного кодирования включает в себя модуль 98 VLC-кодирования, модуль 100 статистического анализа, модуль 102 VLC-адаптации и запоминающее устройство 104 внутренних состояний. При работе модуль 98 VLC-кодирования не требует выделенного прохода для сбора статистики через квантованные остаточные коэффициенты, чтобы выбирать таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования для того, чтобы достигать высокой эффективности кодирования. Наоборот, таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования хранятся как внутренние состояния в запоминающем устройстве 104 внутренних состояний. Внутренние состояния в запоминающем устройстве 104 внутренних состояний могут быть инициализированы для каждой серии последовательных макроблоков видео и затем скорректированы в ходе кодирования серии последовательных макроблоков видео на основе статистики, собранной посредством модуля 100 статистического анализа. Например, параметры VLC-кодирования могут быть инициализированы посредством узла 46 энтропийного кодирования в начале серии последовательных макроблоков, содержащей блоки коэффициентов цифрового видео. Далее модуль 46 энтропийного кодирования корректирует VLC-параметры с выбранными интервалами в пределах серии последовательных макроблоков. Интервалы могут быть регулярными или нерегулярными. В качестве одного примера, VLC-параметры могут корректироваться на границах блоков в рамках серии последовательных макроблоков, таких как границы блоков 4×4, блоков 8×8 или макроблоков 16×16. VLC-параметры затем могут быть повторно инициализированы для каждой новой серии последовательных макроблоков, которая должна быть кодирована. В качестве альтернативы VLC-параметры могут быть повторно инициализированы для каждого нового кадра, который может включать в себя несколько серий последовательных макроблоков.
При инициализации конкретная таблица сдвига EOB, таблица сдвига специального EOB и таблица выбора словаря кодирования может быть выбрана как значение по умолчанию. Значение по умолчанию может быть определено произвольно или на основе эмпирического анализа типичных серий последовательных макроблоков видеоданных, обрабатываемых посредством узла 46 энтропийного кодирования. Далее в ответ на статистику кодирования, собранную посредством модуля 100 статистического анализа, такую как серии нулей, счетчики EOB и счетчики sEOB, модуль 102 VLC-адаптации может корректировать записи таблицы сдвига EOB, таблицы сдвига специального EOB и таблицы выбора словаря кодирования, чтобы адаптивно реагировать на статистику кодируемых данных. Следовательно, модуль 102 VLC-адаптации может приспосабливать параметры кодирования посредством корректировки записей в запоминающем устройстве 104 внутренних состояний на основе ограниченной статистики, накопленной в ходе одного прохода кодирования, а не полной статистики, которая потребует отдельного прохода кодирования. Модуль 98 VLC-кодирования ссылается на содержимое запоминающего устройства 104 внутренних состояний, чтобы получить релевантные записи согласно текущему условию кодирования таблиц сдвига EOB, сдвига специального EOB и выбора словаря кодирования, требуемых для VLC-кодирования поступающих квантованных остаточных коэффициентов. Используя релевантные параметры кодирования запоминающего устройства 104 внутренних состояний, модуль 98 VLC-кодирования формирует кодированный поток видеобитов.
Следовательно, параметры VLC-кодирования могут содержать, для каждого из отслеживаемых условий кодирования, сдвиг EOB, указывающий индекс символа EOB в наборе символов, содержащем символы серий нулей, символ EOB и символ специального EOB, на основе вероятности конца блока при соответствующем условии кодирования, и словарь VLC-кодирования, указывающий словарь кодирования, используемый для того, чтобы кодировать индексы символов в наборе символов для соответствующего условия кодирования. В качестве примера, условием кодирования может быть подполосная позиция или цикл кодирования. Словарь VLC-кодирования для конкретного условия кодирования может быть выбран из одного из множества различных словарей VLC-кодирования, таких как один из пяти словарей VLC-кодирования, заданных в SVC JD9. Помимо этого, параметры VLC-кодирования могут содержать, для каждого из отслеживаемых условий кодирования, сдвиг специального EOB (sEOB), указывающий индекс символа sEOB в наборе символов, содержащем символы серий нулей, символ EOB и символ sEOB, на основе вероятности конца блока при соответствующем условии кодирования, когда, по меньшей мере, один из ненулевых коэффициентов в блоке видео имеет абсолютную величину больше 1.
Фиг.9 - это блок-схема узла 52 энтропийного декодирования, выполненного с возможностью применять процесс адаптивного VLC в соответствии с аспектом данного раскрытия. Модуль 52 энтропийного декодирования может размещаться в видеодекодере 26 по фиг.1 и 3. Как показано на фиг.9, модуль 46 энтропийного декодирования принимает кодированный поток видеобитов, к примеру, из исходного устройства 12 через канал 16 (фиг.1) и энтропийно кодирует поток битов, чтобы сформировать квантованные остаточные коэффициенты. В примере по фиг.9 модуль 52 энтропийного декодирования включает в себя модуль 106 VLC-декодирования, модуль 108 статистического анализа, модуль 110 VLC-адаптации и запоминающее устройство 112 внутренних состояний.
При работе модуль 106 VLC-декодирования не декодирует таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования из потока битов. Вместо этого, как и в случае с узлом 46 энтропийного кодирования по фиг. 8, таблицы сдвига EOB, сдвига специального EOB и выбора словаря кодирования для узла 52 энтропийного декодирования могут храниться как внутренние состояния в запоминающем устройстве 112 внутренних состояний. Например, для адаптивного VLC и кодер 20, и декодер 26 могут хранить следующие внутренние состояния для конкретной серии последовательных макроблоков видео:
a. Накопленная статистика серий нулей, EOB и специальные EOB;
b. Таблица сдвига EOB, индексированная посредством определенных условий кодирования;
c. Таблица сдвига специального EOB, индексированная посредством определенных условий кодирования;
d. Таблица выбора словаря кодирования, индексированная посредством определенных условий кодирования.
Следовательно, кодер 20 и декодер 26 могут собирать статистику кодирования, в том числе накопленные счетчики серий нулей, символы EOB и символы sEOB, при различных условиях кодирования, таких как подполосная позиция кодирования или цикл кодирования, в ходе кодированной серии последовательных макроблоков. Внутренние состояния в запоминающем устройстве 104 внутренних состояний видеокодера 20 и внутренние состояния в запоминающем устройстве 112 внутренних состояний видеодекодера 26 могут быть инициализированы равными одинаковым значениям по умолчанию для каждой серии последовательных макроблоков видео. Запоминающее устройство 104 внутренних состояний и запоминающее устройство 112 внутренних состояний корректируются одинаково в течение кодирования и декодирования серии последовательных макроблоков на основе статистики, собранной посредством модуля 100 статистического анализа в видеокодере 20 и модуля 108 статистического анализа в видеодекодере 26 соответственно.
В ответ на сбор статистики посредством модуля 108 статистического анализа модуль 110 VLC-адаптации может корректировать записи таблицы сдвига EOB, таблицы сдвига sEOB и таблицы выбора словаря кодирования, чтобы адаптивно реагировать на статистику данных, декодируемых посредством модуля 106 VLC-декодирования. Аналогично модулю 102 VLC-адаптации узла 46 энтропийного кодирования модуль 110 VLC-адаптации узла 52 энтропийного декодирования может приспосабливать записи таблиц в запоминающем устройстве 112 внутренних состояний на основе ограниченной статистики, накопленной в ходе декодирования текущей серии последовательных макроблоков видео. Модуль 106 VLC-декодирования ссылается на содержимое запоминающего устройства 112 внутренних состояний, чтобы получить таблицы сдвига EOB, сдвига sEOB и выбора словаря кодирования, требуемых для VLC-декодирования поступающего потока битов, и формирует поступающие квантованные остаточные коэффициенты в качестве вывода для остатка декодера 26.
Фиг.10 - это блок-схема последовательности операций способа, иллюстрирующая процесс адаптивного VLC в соответствии с аспектом данного раскрытия. В общем, процесс инициализации запоминающего устройства внутренних состояний (114), сбора статистики из серии последовательных макроблоков видео (122) и обновления запоминающего устройства внутренних состояний (124), как проиллюстрировано на фиг. 10, может быть реализован в видеокодере 20, видеодекодере 26 или и в том, и в другом. Применение процесса адаптивного VLC в видеокодере 20 и, более конкретно, в узле 46 энтропийного кодирования описывается для целей иллюстрации. Как показано на фиг. 10, в начале новой серии последовательных макроблоков видео модуль 46 энтропийного кодирования инициализирует параметры VLC-кодирования в запоминающем устройстве внутренних состояний равными применимым значениям по умолчанию (114). Значения по умолчанию могут выбираться на основе эмпирических данных, архивных данных или теоретических допущений, к примеру, чтобы присвоить параметрам VLC-кодирования типичные значения, ассоциативно связанные с типичной серией последовательных макроблоков видео. Параметры кодирования, сохраненные в запоминающем устройстве внутренних состояний, могут включать в себя такие таблицы кодирования, как таблица сдвига EOB, таблица сдвига специального EOB и таблица выбора словаря кодирования. Модуль 46 энтропийного кодирования затем выполняет кодирование блоков остаточных коэффициентов в серии последовательных макроблоков (120) с помощью таблиц кодирования, сохраненных в запоминающем устройстве внутренних состояний. При кодировании ненулевых коэффициентов соответствующие записи из таблиц кодирования выбираются на основе текущего условия кодирования, такого как текущая подполосная позиция или текущий цикл кодирования, которому принадлежит символ серии нулей, символ EOB или символ sEOB.
В ходе кодирования серии последовательных макроблоков модуль 46 энтропийного кодирования собирает фактическую статистику из кодируемых видеоданных (122). Фактическая статистика может указывать фактические счетчики длин серий нулей, счетчики EOB и счетчики sEOB, присутствующие в блоках, которые кодированы. Модуль 46 энтропийного кодирования обновляет внутренние состояния на основе собранной статистики (124), тем самым приспосабливая таблицу сдвига EOB, таблицу сдвига специального EOB и таблицу выбора словаря кодирования к фактическим данным, которые кодируются. Кроме того, корректировка параметров кодирования в запоминающем устройстве внутренних состояний может быть применена на границах блоков, к примеру на границах блоков 4×4, блоков 8×8 или макроблоков 16×16. Модуль 46 энтропийного кодирования продолжает кодировать блоки в текущей серии последовательных макроблоков с помощью обновленных параметров кодирования (120). При достижении конца серии последовательных макроблоков (126) модуль 46 энтропийного кодирования переходит к следующей серии последовательных макроблоков (128) и повторно инициализирует параметры кодирования (114) равными значениям по умолчанию.
Модуль 52 энтропийного декодирования может работать аналогичным, но инвертированным способом так, чтобы энтропийно декодировать поступающий кодированный поток видеобитов. В частности, модуль 52 энтропийного декодирования следует тем же процессам инициализации и обновления запоминающего устройства внутренних состояний, чтобы оставаться синхронизированным с узлом 46 энтропийного кодирования. Соответственно, согласно данному раскрытию модуль 46 энтропийного кодирования и модуль 52 энтропийного декодирования могут быть выполнены с возможностью выполнять кодирование с переменной длиной блочных коэффициентов цифрового видео с помощью VLC-параметров и собирать статистику кодирования в ходе VLC-кодирования блочных коэффициентов цифрового видео. На основе собранной статистики кодирования модуль 46 энтропийного кодирования и модуль 52 энтропийного декодирования могут корректировать один или более VLC-параметров в ходе VLC-кодирования на основе собранной статистики. Таким образом, адаптивное VLC-кодирование может быть предусмотрено.
Фиг. 11 - это блок-схема последовательности операций способа, подробнее иллюстрирующая процесс адаптивного VLC. В общем, процесс адаптивного VLC может быть применен посредством видеокодера 20, видеодекодера 26 или и того, и другого взаимообратным способом. Применение процесса адаптивного VLC в видеокодере 20 и, более конкретно, в узле 46 энтропийного кодирования описывается для целей иллюстрации. Как показано на фиг. 11, в начале серии последовательных макроблоков видео видеокодер 20 инициализирует параметры и статистику кодирования в запоминающем устройстве внутренних состояний (130). Параметры и статистика кодирования могут включать в себя таблицу сдвига EOB (EOBshift), таблицу сдвига специального EOB (sEOBshift), таблицу (cbSelect) выбора словаря кодирования и матрицу, используемую для того, чтобы сохранять статистику серий нулей, EOB и sEOB (runStats). Затем видеокодер 20 сканирует серию последовательных макроблоков, начиная с подполосы 0, блок 0 (132). Если текущий блок не указывает конец блока (EOB) (134), видеокодер 20 отправляет серию нулей со словарем кодирования, выбранным из таблицы cbSelect согласно текущему условию кодирования (136), и увеличивает счетчик серий нулей в матрице runStats (138). Видеокодер 20 далее переходит к тому, чтобы обновить параметры EOBshift, sEOBshift и cbSelect (140) на основе содержимого матрицы runStats. Видеокодер 20 может нормализовать содержимое runStats при необходимости (142). Нормализация может быть желательна для того, чтобы исключить переполнение счетчиков и лучше приспособиться к локальной статистике. Видеокодер 20 продолжает процесс для всех блоков в серии последовательных макроблоков (144).
Если EOB обнаружен для текущего блока (134), видеокодер 20 определяет, является ли EOB специальным EOB (146). Если так, видеокодер 20 отправляет символ специального EOB, индексированный из таблицы sEOBshift согласно текущему условию кодирования (sEOBshift[cond]) (148), и увеличивает счетчик специального EOB (sEOB COUNT) в матрице runStats (150). Альтернативно, если обнаруженный EOB (134) является обычным EOB, а не специальным EOB, видеокодер 20 отправляет символ обычного EOB, индексированный из таблицы EOBshift согласно текущему условию кодирования (EOBshift[cond]) (152), и увеличивает счетчик обычного EOB (EOB COUNT) в матрице runStats (154). В любом случае (sEOB или EOB) видеокодер 20 переходит к тому, чтобы обновлять параметры EOBshift, sEOBshift и cbSelect (140) на основе содержимого матрицы runStats и нормализовать содержимое runStats при необходимости (142). Видеокодер 20 далее продолжает процесс для всех блоков в серии последовательных макроблоков (144). В конце серии последовательных макроблоков видеокодер 20 может повторно инициализировать параметры EOBshift, sEOBshift и cbSelect, как и матрицу runStats, для кодирования следующей серии последовательных макроблоков.
В случае FGS-слоя в серии последовательных макроблоков SVC видеокодер 20 отправляет все коэффициенты в улучшающем слое в порядке циклов кодирования, как изложено в SVC JD9. Следовательно, условие кодирования, используемое для того, чтобы индексировать в таблицы EOBshift, sEOBshift и cbSelect, - это текущий цикл кодирования, как задано в SVC JD9. Как показано на фиг.11, в рамках каждого цикла кодирования видеокодер сканирует все из блоков в серии последовательных макроблоков и отправляет серии нулей всех значимых коэффициентов, символов EOB и специального EOB, принадлежащих текущему циклу кодирования. Если векторный режим используется, видеокодер может отсканировать все блоки и отправить серии нулей значимых коэффициентов, символов EOB и специального EOB для нескольких циклов кодирования. Векторный режим, к примеру, поддерживаемый в SVC JD9, инструктирует видеокодеру 20 обрабатывать блок в течение нескольких циклов кодирования до тех пор, пока он не достигнет предварительно заданной позиции кодирования до того, как он перейдет к следующему блоку. Методики адаптивного VLC, описанные в данном документе, могут быть применены независимо от конкретного порядка кодирования, используемого для того, чтобы кодировать видеоданные, или, более конкретно, независимо от того, используется ли векторный режим.
Для целей иллюстрации предполагается, что векторный режим не используется. После сканирования всех блоков в серии последовательных и отправки всех значимых коэффициентов, символов EOB и специального EOB, принадлежащих текущему циклу кодирования, видеокодер 20 затем переходит к следующему циклу кодирования. В следующем цикле кодирования видеокодер сканирует все блоки в серии последовательных макроблоков видео снова, начиная с первого блока в серии последовательных макроблоков видео. Это основанный на циклах процесс кодирования продолжается для тех пор, пока все циклы кодирования (к примеру, 16 циклов в случае блоков коэффициентов сигнала яркости 4×4) не будут завершены. Видеокодер 20 сохраняет, в матрице runStats, накопленные счетчики символов, таких как серии нулей, EOB и специальных EOB, в различных циклах кодирования. Таблицы EOBshift и sEOBshift указывают, какие символы используются для того, чтобы представлять EOB и специальный EOB в данном цикле кодирования соответственно. Таблица выбора словаря кодирования (cbSelect) идентифицирует то, какой словарь кодирования используется для того, чтобы кодировать индексы этих символов в каждом цикле.
В ходе кодирования серий нулей, специального EOB и EOB видеокодер 20 обновляет матрицу runStats соответствующим образом. Таблица EOBshift, таблица sEOBshift и таблица cbSelect обновляются согласно накопленной статистике, сохраненной в runStats. Обновление может осуществляться периодически. Например, обновление может выполняться на границе блока 4×4, блока 8×8, макроблока, либо в любом месте серии последовательных макроблоков видео. Чем чаще выполняется операция обновления, тем выше сложность. В качестве одного примера, видеокодер 20 может быть выполнен с возможностью выполнять операцию обновления после того, как каждый макроблок кодирован. В этом случае параметры кодирования таблица EOBshift, таблица sEOBshift и таблица cbSelect могут обновляться на основе макроблоков.
Видеодекодер 26 использует ту же схему адаптивного кодирования, чтобы оставаться синхронными с видеокодером 20. В частности, видеодекодер 26 инициализирует параметры и статистику кодирования в запоминающем устройстве внутренних состояний, такие как EOBshift, sEOBshift, cbSelect и runStats, для каждой серии последовательных макроблоков видео практически таким же образом, что и видеокодер 20. В ходе декодирования видеодекодер 26 декодирует серии нулей, символы EOB и sEOB из потока битов и обновляет матрицу runStats соответствующим образом на основе символов, декодированных из потока битов. В тех же позициях обновления таблиц в видеокодере 20 значения EOBshift, sEOBshift и cbSelect обновляются посредством видеодекодера 26 согласно матрице runStats. И кодер 20, и декодер 26 также могут нормализовать значения в матрице runStats. Как упоминалось ранее, преимущества выполнения нормализации включают в себя недопущение переполнения счетчиков и лучшую адаптацию к локальной статистике.
Методики адаптивного VLC, описанные в данном раскрытии, могут иметь более широкие области применения, чем значимое кодирование в FGS-слое в SVC. В частности, адаптивное VLC, в общем, может быть полезным для любой схемы кодирования, которая кодирует позицию ненулевых коэффициентов как серии нулей. Методики адаптивного VLC также могут быть применены в системе кодирования, которая следует любому порядку кодирования, который может отличаться от основанного на циклах порядка кодирования, используемого в FGS-слое SVC. После преобразования и квантования видеокодер 20 может просканировать квантованные коэффициенты в блоке и отправить серии нулей, чтобы указать позицию ненулевых коэффициентов, после чего следуют знаки ненулевых коэффициентов. Информация абсолютной величины для ненулевых коэффициентов может быть или не быть сгруппирована вместе и отправлена в конце блока. Если абсолютные величины сгруппированы и отправлены после конца блока, то концепция использования специального EOB, представленная в данном раскрытии, также может быть применена, чтобы повысить эффективность кодирования. Например, VLC-кодирование может содержать кодирование информации абсолютной величины коэффициентов в блоке, имеющих абсолютные величины больше 1, после того как символ конца блока кодирован, и использование символа специального конца блока для того, чтобы указать наличие коэффициентов, имеющих абсолютные величины больше 1 в блоке. В такой схеме видеокодирования видеокодер 20 может применять схему адаптивного кодирования, описанную в данном документе, для того, чтобы уменьшить сложность при сохранении высокой эффективности кодирования.
Помимо этого концепции отделения сдвига специального EOB от termSym и задания его переменным вместо непосредственной привязки к sEobBase может быть полезна в текущей архитектуре SVC, в которой видеокодер отправляет таблицы кодирования в потоке видеобитов серии последовательных макроблоков. В этой архитектуре первым проходом, когда статистика кодирования подсчитывается и таблицы кодирования определяются, кодер подсчитывает статистику специального EOB наряду со статистикой серий нулей и обычным EOB, определяет таблицу сдвига специального EOB и отправляет таблицу сдвига специального EOB в потоке битов вместе с таблицей сдвига EOB и таблицей выбора словаря кодирования. Эта заранее определенная таблица сдвига специального EOB затем может быть использована в ходе второго прохода кодирования, когда серия последовательных макроблоков видео кодируется.
Ниже изложены различные примеры, иллюстрирующие подробности реализации обработки коэффициентов сигнала яркости в блоках преобразования 4×4 и 8×8 и обработки DC-коэффициентов сигнала цветности и AC-коэффициентов сигнала цветности в архитектуре кодирования FGS-слоя в серии последовательных макроблоков SVC. Отметим, что методики адаптивного VLC могут быть применены в других системах кодирования, как описано выше. Также отметим, что эти примеры не имеют намерение ограничивать область применения данного раскрытия. Соответственно, модификации в сведения, представленные ниже, не должны рассматриваться как отклонения от данного раскрытия.
Далее описывается пример кодирования блоков 4×4 сигнала яркости. В этом примере предполагается, что цикл кодирования, используемый в кодировании SVC FGS, предполагается в качестве условия кодирования, используемого для того, чтобы индексировать в таблицы кодирования, такие как EOBshift, sEOBshift и cbSelect, и индексировать в матрицу runStats статистики кодирования. Тем не менее, цикл кодирования используется в качестве примера для цели иллюстрации; другие условия кодирования могут быть использованы вместо цикла кодирования. Для кодирования блоков 4×4 сигнала яркости, если накопленная статистика для всех символов во всех 16 циклах кодирования должна быть сохранена, матрице runStats требуется всего 166 записей. За исключением цикла 0 кодирования, который имеет 16 возможных серий и тем самым требует набор символов из 16 записей, все последующие циклы кодирования c (c=1...15) имеют (16-c) возможных серий и два дополнительных символа для EOB и sEOB и тем самым требуют набора символов из (18-c) записей. Хранить и обновлять такое большое число состояний кодирования влечет за собой высокую сложность как для кодера 20, так и для декодера 26. Соответственно, может быть желательным уменьшать размер матрицы runStats. Примеры методик для уменьшения размера матрицы runStats, обновления таблиц EOBshift, sEOBshift и cbSelect и нормализации матрицы runStats описаны ниже. Следует отметить, что эти конкретные детали представлены в качестве примеров и не должны считаться ограничивающими данное раскрытие.
Далее описывается пример уменьшения методики уменьшения состояний, хранимых в матрице runStats. В FGS-слое статистика символов более поздних циклов кодирования варьируется меньше, чем статистика более ранних циклов кодирования. В более поздних циклах кодирования вероятность символа EOB обычно становится выше, чем оставшихся символов в наборе символов. Следовательно, EOBshift[c]=0 обычно имеет место для цикла кодирования c≥C. Для специального EOB символ (16-c) может быть использован. По мере того как номер c цикла кодирования возрастает, значение (16-c) снижается, уменьшая ухудшение кодирования, вытекающее из этого упрощения. Также, статистика набора символов серий/EOB/sEOB в более поздних циклах кодирования обычно имеет большую погрешность. Таким образом, для циклов c≥C кодирования унарный код (к примеру, словарь 0 кодирования в SVC JD9) является самым часто используемым словарем кодирования. На основе этих наблюдений одно упрощение, которое может быть сделано в матрице runStats, состоит в том, чтобы не хранить статистику по символам для всех циклов c≥C кодирования.
Следовательно, сбор статистики кодирования может содержать сбор накопленных счетчиков серий нулей, символов EOB и символов sEOB только для циклов кодирования с номерами меньше C, а не сбор накопленных счетчиков серий нулей, символов EOB и символов sEOB для циклов кодирования с номерами, превышающими или равными C, где C меньше максимального числа циклов кодирования. В качестве одного примера, C=10 может быть выбрано в качестве порогового значения отсечения цикла, хотя любое другое число также может быть использовано. Если C=10, то статистика собирается только для циклов 0-9 и не собирается для циклов 10 и выше.
Для более ранних циклов кодирования (c<C) вероятность более крупных серий относительно небольшая, делая их менее важными при выборе оптимальной таблицы кодирования для соответствующего цикла кодирования. Следовательно, для более ранних циклов кодирования c<C матрица runStats может хранить только счетчики вероятности меньших нулевых серий, имеющих длину s<S. Все более крупные символы, имеющие длину s≥S, могут трактоваться как один символ, с тем чтобы матрица runStats должна была хранить только общий счетчик всех таких символов. Следовательно, сбор статистики кодирования может содержать, для каждого цикла кодирования c<C, сбор накопленных счетчиков серий нулей для каждой из серий нулей, имеющих длину меньше S, на индивидуальной основе, и сбор комбинированного счетчика серий нулей для серий нулей, имеющих длину больше или равную S, на комбинированной основе, где S меньше максимального значения серий нулей в текущем цикле кодирования. Поскольку этих счетчиков вероятности достаточно для определения хорошей таблицы кодирования и надлежащего сдвига специального EOB для каждого цикла кодирования c<C, это упрощение, сделанное в матрице runStats, влечет за собой минимальную потерю эффективности кодирования.
В качестве примера, для цикла кодирования c=0 матрица runStats хранит только счетчики 3 серий нулей (серия=0, 1, 2) плюс общий счетчик для всех оставшихся серий. Для всех остальных циклов кодирования c>0, но c<C (к примеру, C=10), матрица runStats хранит только статистику EOB, специального EOB и 3 серии нулей (длина серии=0, 1 или 2) плюс один общий счетчик для всех оставшихся значений серий. Другими словами, значение S равно 3 для цикла кодирования c<C. Статистика всех циклов c≥C, к примеру C=10, не хранится. Таким образом, цикл 0 кодирования требует 4 записей в runStats, а все остальные циклы 1-9 кодирования требуют по 6 записей каждая в runStats. Общее число состояний, хранимых в runStats, составляет 4+6·9=58. Чтобы обобщить, для примера с C=10 и S=3, статистика, которая должна храниться в runStats, может быть следующей:
Цикл 0: счетчики вероятности серии=0, 1, 2 и общий счетчик всех серий>2.
Цикл 1-9: счетчики вероятности EOB, sEOB, серии=0, 1, 2 и общий счетчик всех серий>2.
При подходе, изложенном выше, размер runStats и ассоциативно связанные требования по памяти могут быть значительно уменьшены, к примеру, со 166 записей до 58 записей.
Далее описывается инициализация параметров runStats, EOBshift, sEOBshift и cbSelect. Для блоков 4×4 сигнала яркости, в качестве примера, таблицы EOBshift, sEOBshift и cbSelect могут быть инициализированы практически следующим образом:
EOBshiftInit[]={16, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
sEOBshiftInit[]={16, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 4, 3, 2, 1};
cbSelectInit[] ={1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}.
Матрица runStats может быть инициализирована со всеми нулями. Альтернативно, матрица runStats может быть инициализирована равной небольшим числам для каждой записи в матрице. В качестве примера, для цикла 0 счетчики вероятности в runStats могут быть инициализированы равными {16, 8, 8, 4, 4,...}, что может быть типичными счетчиками вероятности серий в цикле 0 кодирования. Соответствующая запись в runStats увеличивается каждый раз, когда конкретная серия или EOB, или sEOB в данном цикле кодируется. Используя пример на фиг. 7, для блока 1 серия=0 кодируется в цикле 0 кодирования. Следовательно, запись runStats[cycle=0][run=0] увеличивается.
Поскольку кодирование абсолютных величин этих значимых коэффициентов с величинами больше 1 задерживается до тех пор, пока конец блока (специальный EOB в данном случае) не отправлен, специальное условие может быть предоставлено, в котором больше нет значимых коэффициентов, которые должны быть кодированы, после того как текущая серия нулей отправлена. Другими словами, оставшиеся коэффициенты в блоке, если имеются, все являются уточняющими коэффициентами. В этом случае кодер может быть выполнен с возможностью отправлять 1-битовый флаг, в котором 0 указывает, что ни один из значимых коэффициентов в блоке не имеет абсолютную величину, а 1 указывает, что есть значимые коэффициенты с абсолютной величиной больше 1 в блоке. Если этот флаг равен 1, выполняется обычное кодирование значения абсолютной величины (начиная с маркера termSym), как описано выше. При этом специальном условии накопленная статистика в runStats не будет изменена.
Далее описывается обновление параметров кодирования EOBshift, sEOBshift и cbSelect. Как показано на фиг. 11, в фиксированных точках по ходу кодирования блоков видео серии последовательных макроблоков видео видеокодер 20 активирует процесс обновления таблиц кодирования, чтобы оставаться подстроенными под накопленную статистику по символам. Один обоснованный вариант для обновления этих символов находится на границе макроблока (MB), хотя также могут быть использованы другие варианты точек обновления. Например, процесс обновления может выполняться на границе блока 4×4 или 8×8 либо после того, как определенное число блоков/макроблоков кодировано. Ниже изложен пример псевдокода, иллюстрирующий простую схему, которая может быть использована для того, чтобы обновлять эти таблицы.
for (all cycles c<C)
{
// обновление EOBshift и sEOBshift
if(c>0)
{
if (runStats[c][0]>runStats[c][2])
EOBshift[c]=0;
else if (runStats[c][0]>runStats[c][3])
EOBshift[c]=1;
else
if(runStats[c][0]>runStats[c][4])
EOBshift[c]=2;
else
EOBshift[c]=3;
if( runStats[c][1]>runStats[c][4])
sEOBshift[c]=EOBshift[c]+1;
else if(runStats[c][1]>(runStats[c][0]/16))
sEOBshift[c]=4;
else
sE0Bshift[c]=(16-c);
}
// обновление cbSelect
пусть A, B, C будут счетчиками трех наиболее вероятных символов в цикле кодирования c
пусть D будет общим счетчиков всех остальных символов в цикле кодирования c
if(D<=B)
{
if(3*D <=2*A)
cbSelect[c]=(C+D<=A) ? cb0:cb2;
else
cbSelect[c]=(2*C<=D) ? cbl:cb2;
}
else
{
if(2*B+D<=2*A)
cbSelect[c]=(B+C<=A) ? cb4:cb2;
else
cbSelect[c]=(2*C<=D) ? cbl:cb2;
}
В SVC JD9 символ EOB или sEOB не возникает в цикле 0 кодирования. Следовательно, таблицы EOBshift, sEOBshift обновляются только для цикла кодирования c>0 и c<C. Как и в примере, проиллюстрированном посредством вышеприведенного псевдокода, предполагается, что для всех циклов c>0 и c<C, runStats[c][0] сохраняет накопленную вероятность EOB, runStats[c][1] сохраняет накопленную вероятность специального EOB, а runStats[c][s] (s=2, 3, 4) сохраняет накопленную вероятность для серии нулей "r=s-2" соответственно. Для всех циклов c>0 и c<C, на основе содержимого runStats[c][0], runStats[c][1] и runStats[c][s] видеокодер 20 обновляет значения EOBshift[c], sEOBshift[c] и cbSelect[c].
Далее описывается обновление таблицы EOBshift для цикла кодирования c>0 и c<C. В качестве примера, если счетчик EOB, указанный посредством runStats[c][0], больше счетчика серий нулей, указанного посредством runStats[c][2] для длины серии r=0 (т.е. s=2), то значение EOBshift[c] задается равным нулю, как указано в вышеприведенном псевдокоде. В противном случае, если runStats[c][0] меньше или равен runStats[c][2], но runStats[c][0] больше счетчика серий нулей, указанного посредством runStats[c][3] для длины серии r=1 (т.е. s=3), то значение EOBshift[c] задается равным 1. В противном случае, если runStats[c][0] меньше или равен runStats[c][2] и runStats[c][3], но runStats[c][0] больше или равен счетчику серий нулей, указанному посредством runStats[c][4] для длины серии r=2 (т.е. s=4), то значение EOBshift[c] задается равным 2. В противном случае значение EOBshift[c] задается равным 3.
Обновление таблицы sEOBshift описывается далее для цикла кодирования c>0 и c<C. В качестве примера, если счетчик sEOB, указанный посредством runStats[c][1], больше счетчика серий нулей, указанного посредством runStats[c][4] для длины серии r=2 (т.е. s=4), то значение sEOBshift[c] задается равным значению EOBshift[c] плюс 1. В противном случае, если runStats[c][1] меньше или равен runStats[c][4], но runStats[c][1] больше счетчика EOB, указанного посредством runStats[c][0], деленного на 16, то значение sE0Bshift[c] задается равным 4. В противном случае значение sEOBshift[c] задается равным 16 минус номер цикла c.
Далее описывается обновление таблицы cbSelect для всех циклов кодирования c<C. Чтобы обновить значение cbSelect[c], видеокодер 20 отслеживает три наиболее вероятных символа. Обозначим счетчики вероятности трех наиболее вероятных символов в комбинированном наборе символов, который содержит серии нулей, EOB, и sEOB, как A, B и C, и обозначим общий счетчик всех остальных символов D. В этом случае, если D меньше или равно B, а 3 умножить на D меньше или равно 2 умножить на A, то значение cbSelect[c] обозначает словарь 0 кодирования (cb0), если C плюс D меньше или равно A, и обозначает словарь 1 кодирования (cb1), если C плюс D больше A. В противном случае, если D меньше или равно B и 3 умножить на D больше 2 умножить на A, то значение cbSelect[c] обозначает cb1, если 2 умножить на C меньше или равно D, и обозначает словарь 2 кодирования (cb2), если 2 умножить на C больше D. Оставшиеся операции легко очевидны из вышеприведенного псевдокода.
Как указано в вышеприведенном псевдокоде, видеокодер 20 обновляет таблицу сдвига EOB на основе накопленных счетчиков серий нулей, символов EOB и символов sEOB для соответствующих условий кодирования, обновляет таблицу сдвига sEOB на основе накопленных счетчиков серий нулей, символов EOB и символов sEOB для соответствующих условий кодирования и обновляет таблицу выбора словаря кодирования на основе накопленных счетчиков серий нулей, символов EOB и символов sEOB для соответствующих условий кодирования.
Хотя псевдокод иллюстрирует обновление записей таблицы сдвига EOB, таблицы сдвига sEOB и таблицы выбора словаря кодирования на основе специальных взаимосвязей между счетчиками EOB, sEOB и серий нулей для целей иллюстрации, другие взаимосвязи могут быть использованы. Соответственно, другие процессы обновления также могут быть использованы, и различные модификации в примере выше могут быть сделаны без отступления от области применения данного раскрытия. Например, хотя вышеприведенный псевдокод ссылается на циклы кодирования, используемые в SVC JD9, другие условия кодирования могут быть использованы в качестве индекса для счетчиков и других параметров кодирования. В качестве одного примера, VLC-кодирование может быть приведено к требуемым параметрам на основе текущей подполосы или кластера подполос блока, которому принадлежит серия нулей EOB или sEOB. В качестве другого примера, VLC-кодирование также может быть приведено к требуемым параметрам на основе числа серий нулей, которые кодированы для блока.
Другое условие может быть добавлено для того, чтобы повысить эффективность кодирования адаптивной схемы. В начале процесса кодирования для серии последовательных макроблоков, например, когда статистика символа не накоплена в достаточной степени, обновление таблиц EOBshift, sEOBshift и cbSelect может приводить к статистически незначимым записям. Следовательно, пороговые значения по общему числу символов, содержащему в каждом цикле, могут быть применены для того, чтобы определить то, должны ли записи таблиц EOBshift, sEOBshift и cbSelect быть обновлены. В этом случае необязательное условие может быть применено, так что только циклы, имеющие общий счетчик циклов, который достигает или превышает соответствующее пороговое значение, могут запускать обновление своих записей таблиц. В качестве иллюстрации, матрица пороговых значений {32, 16, 8, 8, 8, 8...} может быть использована для того, чтобы определить то, следует ли начать обновление записей в таблице, где записи в матрице пороговых значений соответствуют, по порядку, циклу 0, циклу 1, циклу 2, циклу 3 и т.п.Например, для цикла 0 всего 32 символа должны встретиться до того, как начнется процесс обновления. Аналогично, для цикла 1 всего 16 символов должны встретиться до того, как начнется процесс обновления. Следовательно, большее число символов может требоваться для того, чтобы начать обновление параметров VLC-кодирования для более ранних циклов. В качестве альтернативы применению пороговых значений для общего числа записей, встречающихся в пределах данного цикла кодирования, пороговое значение вместо этого может быть применено к накопленному счетчику наиболее вероятного символа в данном цикле кодирования.
Далее описывается примерная методика нормализации матрицы runStats. Нормализация влечет за собой постепенное снижение счетчиков символов в матрице runStats, когда они достигают определенного порогового значения. Нормализация может быть полезной для недопущения переполнения счетчика символов. Помимо этого, нормализация также может предоставлять больший запас для локальной адаптируемости, поскольку она предотвращает слишком большое нарастание счетчиков символов в некоторых областях и переполнение локальной статистики других областей. Процесс нормализации может выполняться в то же время, когда таблицы EOBshift, sEOBshift и cbSelect обновляются, к примеру, на периодической основе, такой как на границах макроблока. Альтернативно или помимо этого, процесс нормализации может выполняться в других фиксированных точках в ходе процесса кодирования видео. Ниже приведен сегмент псевдокода, иллюстрирующий примерный процесс нормализации матрицы runStats.
for (all cycles c<C) // C - это отсечение цикла в runStats
{
пусть MPS будет счетчиком наиболее вероятного символа в цикле
if (MPS>=MPSthres)
уменьшить все счетчики символов в текущем цикле на коэффициент 2
}
В вышеприведенном псевдокоде обоснованным выбором для MPSthres может быть 128. Тем не менее, могут быть использованы другие значения MPSthres. В общем, когда счетчик наиболее вероятного символа (MPS) в цикле больше или равен MPSthres, видеокодер 20 нормализует счетчики символов посредством уменьшения счетчиков символов в текущем цикле на коэффициент N, т.е. посредством деления на коэффициент N. В вышеуказанном примере коэффициент N равен 2. Альтернативно, общий счетчик всех символов и соответствующее пороговое значение для общего счетчика в текущем цикле кодирования может быть использовано для нормализации вместо счетчика MPS и соответствующего порогового значения MPSthres.
Чтобы уменьшить частоту обновлений таблиц кодирования, в качестве варианта, может динамически изменяться частота обновлений. Обновление таблиц кодирования может быть затратным для некоторых вариантов применения даже при решениях малой сложности, представленных выше. Следовательно, чтобы уменьшить частоту обновлений и связанные с ними накладные расходы по вычислениям и памяти, частота обновлений может изменяться динамически на основе различных критериев. В качестве одного примера, частота обновлений может корректироваться на основе того, насколько таблицы кодирования изменились в последних операциях обновления. Если последние операции обновления привели к незначительным изменениям в таблицах кодирования, то частота обновлений может быть уменьшена. Если последние операции обновления привели к большим изменениям, то частота обновлений может быть динамически увеличена.
Далее описывается примерный процесс кодирования блоков сигнала яркости. В этом примере блоки сигнала яркости кодируются с помощью преобразования 8×8, к примеру, используемого во многих стандартах кодирования видео, таких как MPEG1, MPEG2, MPEG4 и H.263. В высоком профиле H.264/AVC, также известном как FRext (расширение диапазона точности), компонент сигнала яркости в макроблоке может кодироваться с помощью либо целочисленного преобразования 8×Ч8, либо целочисленного преобразования 4×4, и размер блочного преобразования кодируется в потоке битов как элемент синтаксиса уровня макроблоков. Это упоминается как адаптивное блочное преобразование. Если используется преобразование 8×8, то должно быть четыре блока коэффициентов сигнала яркости 8×8 в макроблоке после преобразования и квантования, вместо шестнадцати блоков сигнала яркости 4×4, если используется преобразование. Хотя процесс кодирования, описанный выше, использует в качестве примера блок коэффициентов из преобразования 4×4, процесс может быть легко приспособлен к кодированию блоков преобразования 8×8 с помощью аналогичных концепций.
В качестве одного примера, блок 8×8 может быть сначала преобразован в четыре блока 4×4. Этот подход используется в режиме энтропийного кодирования CAVLC, заданном в стандарте H.264/AVC. Например, видеокодер 20 может быть выполнен с возможностью сканировать блок коэффициентов 8×8 в зигзагообразном порядке сканирования и преобразовывать его в 1-мерную матрицу с 64 коэффициентами. Далее видеокодер 20 деассемблирует 64 коэффициента в четыре матрицы по 16 коэффициентов каждая с помощью схемы перемежения. В частности, коэффициент в n-й (n=0, 1,..., 63) позиции сканирования в зигзагообразном порядке сканирования 8×8 в матрице из 64 коэффициентов должен быть помещен в m-й блок, где m=mod(n,4), m=0, 1, 2 или 3, в (n/4)-й позиции сканирования в меньшем блоке. После этого преобразования видеокодер 20 применяет обычное CAVLC-кодирование для блоков 4×4 к четырем блокам из 16 коэффициентов.
В SVC, когда базовый слой использует высокий профиль H.264/AVC, улучшающий слой также дает возможность использования блочного преобразования 8×8. В FGS-слое блок коэффициентов 8×8 может быть преобразован с помощью такой же схемы перемежения, что и базовый слой, и кодирован как четыре блока 4×4. Накопленная статистика таких преобразованных блоков 4×4 может быть аналогичной статистике родных блоков 4×4. Следовательно, видеокодер 20 может кодировать преобразованные блоки 4×4 вместе со всеми другими родными коэффициентами 4×4 с использованием таких же таблиц EOBshift, sEOBshift и cbSelect. Альтернативно, видеокодер 20 может быть выполнен с возможностью сохранять накопленную статистику отдельно для преобразованных блоков 4×4 и использовать отдельные таблицы EOBshift, sEOBshift и cbSelect для того, чтобы кодировать эти преобразованные блоки 4×4.
Далее описывается кодирование DC-компонентов сигнала цветности и AC-компонентов сигнала цветности. В SVC блоки коэффициентов сигнала цветности кодируются отдельно как DC-блоки сигнала цветности и AC-блоки сигнала цветности. DC-коэффициенты четырех блоков 4×4 в каждом блоке сигнала цветности 8×8 группируются и кодируются как один DC-блок. Каждый DC-блок сигнала цветности кодируется в четырех циклах (цикл=0, 1, 2, 3). Оставшиеся 15 AC-коэффициентов сигнала цветности (за исключением DC-коэффициента) в каждом блоке сигнала цветности 4×4 кодируются в 15 циклах (цикл=1, 2,..., 15). Поскольку статистика по символам DC- и AC-блоков сигнала цветности в достаточной степени отличается друг от друга и от блоков сигнала яркости, хранение отдельных внутренних состояний для DC и AC сигнала цветности и для сигнала яркости в адаптивной схеме, описанной в данном документе, повышает эффективность кодирования сигнала цветности.
Адаптивное кодирование DC и AC сигнала цветности аналогично процедуре кодирования сигнала яркости. Например, матрицы runStatsDC и runStatsAC могут быть использованы для того, чтобы отдельно сохранять накопленную статистику для DC сигнала цветности и AC сигнала цветности соответственно. Таблицы EOBshiftXX, sEOBshiftXX и cbSelectXX (где вместо XX подставляется DC или AC) используются для того, чтобы идентифицировать сдвиг EOB, сдвиг специального EOB и выбор словаря кодирования для каждого цикла кодирования, для DC сигнала яркости или AC сигнала яркости. Поскольку статистика по цветности отличается от статистики по яркости, таблицы EOBshiftXX, sEOBshiftXX и cbSelectXX могут быть инициализированы по-разному. В качестве примера, таблицы могут быть инициализированы со следующими векторами:
EOBshiftDCInit[]={4, 0, 0, 0};
sEOBshiftDCInit[]={4, 4, 3, 2};
cbSelectDCInit[]={ 0, 0, 0, 0};
EOBshiftACInit[]={16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
sEOBshiftACInit[]={16, 8, 8, 8, 8, 8, 8, 8, 7, 6, 5, 4, 3, 2, 1};
cbSelectACInit[]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
где EOBshiftDCInit[] представляет начальные записи для таблицы сдвига EOB по DC сигнала цветности, sEOBshiftDCInit[] представляет начальные записи для таблицы сдвига специального EOB по DC сигнала цветности, cbSelectDCInit[] представляет начальные записи для таблицы выбора словаря кодирования по DC сигнала цветности, EOBshiftACInit[] представляет начальные записи для таблицы сдвига EOB по AC сигнала цветности, sEOBshiftACInit[] представляет начальные записи для таблицы сдвига специального EOB по AC сигнала цветности, cbSelectACInit[] представляет начальные записи для таблицы выбора словаря кодирования по AC сигнала цветности. Отметим, что таблицы инициализации для DC сигнала цветности содержат 4 записи, поскольку DC сигнала цветности требуют 4 циклов кодирования, а таблицы инициализации для AC сигнала цветности содержат 15 записей, поскольку AC сигнала цветности требуют 15 циклов кодирования.
В общераспространенном формате видео YUV4:2:0 предусмотрено наполовину меньше коэффициентов сигнала цветности, чем коэффициентов сигнала яркости. Некоторые упрощения могут быть применены к адаптивному кодированию DC и AC сигнала цветности. Эти упрощения позволяют уменьшить память, требуемую для того, чтобы сохранять накопленную статистику, и число операций обновления. Например, процесс обновления для DC сигнала цветности может быть опущен,исключая необходимость хранить матрицу runStatsDC и все операции обновления, ассоциативно связанные с таблицами EOBshiftDC, sEOBshiftDC и cbSelectDC. Процесс обновления AC сигнала цветности также может быть пропущен. Альтернативно, процесс обновления AC сигнала цветности может быть аналогичным процессу обновления сигнала яркости, но с меньшей сложностью. Например, видеокодер 20 может быть выполнен с возможностью обновлять таблицы AC сигнала цветности наполовину реже, чем таблицы сигнала ярости, поскольку имеется наполовину меньше блоков AC сигнала цветности. Обобщая, VLC-кодирование DC-блоков сигнала цветности и AC-блоков сигнала цветности может выполняться отдельно друг от друга и отдельно от блоков сигнала яркости. Таблицы сдвига EOB, таблицы сдвига sEOB и таблицы выбора словаря кодирования для DC- и AC-блоков сигнала цветности могут быть инициализированы отлично от блоков сигнала яркости. В некоторых случаях фиксированные таблицы сдвига EOB, таблицы сдвига sEOB и таблицы выбора словаря кодирования могут быть использованы для DC- и AC-блоков сигнала цветности.
Методики, описанные в данном документе, могут быть реализованы в аппаратных средствах, программном обеспечении, микропрограммном обеспечении или в любой их комбинации. Любые признаки, описанные как модули или компоненты, могут быть реализованы совместно в интегральном логическом устройстве или отдельно как дискретные, но имеющие возможность взаимодействовать логические устройства. Если реализованы в программном обеспечении, методики могут быть осуществлены, по меньшей мере, частично посредством машиночитаемого носителя хранения данных, содержащего программный код, включающий в себя инструкции, которые, когда приводятся в исполнение, выполняют один или более способов, описанных выше. Машиночитаемый носитель хранения данных может формировать часть вычислительного программного продукта. Машиночитаемые носители могут содержать оперативное запоминающее устройство (RAM), такое как синхронное динамическое оперативное запоминающее устройство (SDRAM), постоянное запоминающее устройство (ROM), энергонезависимое оперативное запоминающее устройство (NVRAM), электрически стираемое программируемое постоянное запоминающее устройство (EEPROM), флэш-память, магнитные или оптические носители хранения данных и т.п. Дополнительно или альтернативно, методики могут быть реализованы, по меньшей мере, частично, посредством машиночитаемой среды связи, которая переносит или передает код в форме инструкций или структур данных и которая может быть доступна, считываема и/или приводима в исполнение посредством компьютера.
Программный код может приводиться в исполнение посредством одного или более процессоров, например одного или более процессоров цифровых сигналов (DSP), микропроцессоров общего назначения, специализированных интегральных схем (ASIC), программируемых пользователем матричных БИС (FPGA) или других эквивалентных интегральных или дискретных логических схем. Соответственно, термин "процессор" при использовании в данном документе может означать любую вышеуказанную структуру или другую структуру, подходящую для реализации методик, описанных в данном документе. Помимо этого, в некоторых аспектах функциональность, описанная в данном документе, может быть предоставлена в рамках специализированных программных модулей или аппаратных модулей, выполненных с возможностью кодирования или декодирования либо встроенных в комбинированный видеокодер-декодер (CODEC).
Описаны разные варианты осуществления изобретения. Эти и другие варианты осуществления находятся в рамках области применения прилагаемой формулы изобретения.