Система и способ кодирования и декодирования видеосигналов
Иллюстрации
Показать всеИзобретение относится к области кодирования и декодирования видеосигналов. Техническим результатом является повышение эффективности кодирования и декодирования видеосигналов. Указанный технический результат достигается тем, что предложен способ видеокодирования изображений, включающий разделение вектора коэффициентов макроблока на два или более субвектора без дополняющих нулей, при этом каждый субвектор имеет длину, меньшую или равную длине вектора коэффициентов, указание размера каждого субвектора и положения каждого субвектора в векторе коэффициентов и формирование блока, соответствующего каждому субвектору. 8 н. и 43 з.п. ф-лы, 6 ил.
Реферат
ОБЛАСТЬ ТЕХНИКИ
[0001] Настоящее изобретение в общем относится к области кодирования и декодирования видеосигналов. Более конкретно настоящее изобретение относится к повышению эффективности кодирования и декодирования видеосигналов.
ПРЕДПОСЫЛКИ СОЗДАНИЯ ИЗОБРЕТЕНИЯ
[0002] В данном разделе изложены предпосылки или контекст изобретения, изложенного в формуле. Приведенное здесь описание может включать принципы, которые могли быть предложены, но не обязательно уже предлагались ранее. Поэтому все, что описано в данном разделе, если не будет сказано иначе, не является описанием известного уровня техники.
[0003] Стандарты видеокодирования включают ITU-T H.261, ISO/IEC MPEG-1 Visual, ITU-T H.262 или ISO/IEC MPEG-2 Visual, ITU-T H.263, ISO/IEC MPEG-4 Visual и ITU-T H.264 (также известный как ISO/IEC MPEG-4 AVC). Помимо этого в настоящее время ведутся работы по разработке новых стандартов видеокодирования. Одним таким разрабатываемым стандартом является стандарт масштабируемого видеокодирования (SVC - scalable video coding), который станет масштабируемым расширением для H.264/AVC. Другим стандартом, находящимся в процессе разработки, является стандарт мультивидеокодирования (MVC - multivideo coding standard), который также является расширением H.264/AVC. Еще одна такая работа включает разработку стандартов видеокодирования Китая.
[0004] Последний проект SVC описан в документе JVT-T201, "Joint Draft 7 of SVC Amendment," 20th JVT Meeting, Klagenfurt, Austria, July 2006, доступном по адресу http://ftp3.itu.ch/av-arch/jvt-site/2006_07_Klagenfurt/JVT-T201.zip. Последний проект MVC описан в документе JVT-T208, "Joint Multiview Video Model (JMVM) 1.0", 20th JVT Meeting, Klagenfurt, Austria, July 2006, доступном по адресу http://ftp3.itu.ch/av-arch/jvt-site/2006_07_Klagenfurt/JVT-T208.zip. Оба этих документа включены в данное описание путем ссылки.
[0005] В масштабируемом видеокодировании (SVC, scalable video coding) видеосигнал может быть кодирован в многоуровневом виде, включающем базовый уровень и один или более улучшающих уровней. Улучшающий уровень улучшает временную разрешающую способность (т.е. частоту кадров), пространственную разрешающую способность или качество видеоконтента, представленного другим уровнем или частью другого уровня. Каждый уровень вместе с зависимыми от него уровнями является одним представлением видеосигнала при конкретной пространственной разрешающей способности, временном разрешении и уровне качества. Масштабируемый уровень с зависимыми от него уровнями именуются в тексте как «представление масштабируемого уровня». Для представления оригинального сигнала с определенной точностью может быть извлечена и декодирована часть масштабируемого битового потока, соответствующая представлению масштабируемого уровня.
[0006] В некоторых случаях данные в улучшающем уровне могут быть усечены после конкретного места или в произвольных позициях, где каждая позиция отбрасывания может включать дополнительные данные, отображающие видео со все более хорошим качеством. Такая масштабируемость известна как мелкозернистая масштабируемость (FGS, fine-grained (granularity) scalability). В отличие от FGS, масштабируемость, обеспеченная улучшающими уровнями, которые не могут быть усечены, именуется крупнозернистой масштабируемостью (CGS, coarse-grained (granularity) scalability). CGS включает традиционную масштабируемость качества (SNR) и пространственную масштабируемость.
[0007] Группа Joint Video Team (JVT) вела процесс разработки стандарта SVC как расширения стандарта H.264/улучшенного видеокодирования (AVC - Advanced Video Coding). Для обеспечения временной масштабируемости SVC использует тот же механизм, что и H.264/AVC. В стандарте AVC сигнализация временной информации о масштабируемости осуществляется посредством использования сообщений с дополнительной расширяющей информацией (SEI - supplemental enhancement information), относящихся к подпоследовательностям.
[0008] SVC использует механизм межуровневого предсказания, в котором конкретная информация может быть предсказана из уровней, отличных от текущего реконструируемого уровня или следующего нижележащего уровня. Информация, которая может быть предсказана в соответствии с межуровневым механизмом, включает внутренние данные о текстуре, движении и остаточные данные. Межуровневое предсказание движения включает предсказание режима кодирования блока, информацию заголовка и т.д., где информация о движении из нижележащего уровня может использоваться для предсказания вышележащего уровня. В случае внутреннего кодирования возможно предсказание из окружающих или совместно расположенных макроблоков нижележащих уровней. Эти технологии предсказания не используют информацию о движении и поэтому называются технологиями внутреннего предсказания. Помимо этого, остаточные данные из нижележащих уровней могут также использоваться для предсказания текущего уровня.
[0009] Элементарным блоком для выходных данных кодера SVC и входных данных декодера SVC является блок уровня сетевой абстракции (NAL - Network Abstraction Layer). Последовательность блоков NAL, сформированная кодером, именуется потоком блоков NAL. Для передачи в пакетно-ориентированных сетях или хранения в структурированных файлах блоки NAL обычно инкапсулируются в пакеты или подобные конструкции. Для сред передачи или хранения данных, не предусматривающих структуры кадрирования, формат байтового потока, который подобен структуре начального битового потока с кодовой основой, указан в Приложении B стандарта H.264/AVC. Формат байтового потока отделяет блоки NAL друг от друга, прикрепляя перед каждым блоком NAL стартовый код.
[0010] Проблемой, связанной с этим многоуровневым подходом, является то, что создание малых (в отношении битрейта) дискретных уровней приводит к очень плохой эффективности кодирования, так как информация, представленная в базовом уровне, частично дублируется в улучшающем уровне и, следовательно, кодируется дважды. С другой стороны, так как размер дискретных уровней влияет на точность достижения необходимой скорости битового потока или качества, при использовании больших улучшающих уровней битрейт или качество не смогут контролироваться с большой зернистостью. Эта «крупнозернистая масштабируемость» (CGS) может обеспечить недостаточную степень управления для некоторых приложений.
[0011] Для того, чтобы сбалансировать эти две проблемы, была предложена концепция среднезернистой масштабируемости (MGS - medium-grained scalability). MGS использует такую же конструкцию кодера и декодера, как CGS, но на промежуточном этапе каждому слайсу улучшающего уровня CGS назначается «уровень качества» в соответствии со степенью искажения в зависимости от меры искажения-скорости. При усечении битового потока до нужной скорости сначала отбрасывают слайсы CGS из самого верхнего уровня качества, и так до достижения необходимого битрейта.
[0012] Важно отметить, что количество уровней CGS, назначенных данному уровню качества, может не являться постоянным для всей последовательности, а может меняться от одного кадра к другому. К примеру {1A, 1B, 1C}, {2A, 2B, 2C}, {3A, 3В, 3C}, могут представлять девять слайсов. Цифра указывает номер кадра, а буква - уровень CGS. Базовое качество первого кадра - {1A}, среднее качество первого кадра формируется из {1A, 1B}, а максимальное качество первого кадра формируется из {1A, 1B, 1C}. Представление базового уровня всей трехкадровой последовательности будет состоять из {1A, 2A, 3A}. Традиционно, первый уровень CGS будет состоять из {1B, 2B, 3B}. С использованием MGS уровень качества может содержать {1В, 1C, 3B}, представляя два улучшения из первого кадра, ни одного из второго, и одно из третьего.
[0013] В результате среднее количество уровней CGS в последовательности не ограничивается целыми значениями, а может меняться в зависимости от структуры «уровня качества», и, так как используется принцип кодирования CGS, ухудшение эффективности кодирования относительно мало.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0014] Один аспект изобретения относится к способу кодирования изображения, включающему разделение вектора коэффициентов на множество субвекторов, указание положения субвектора из множества субвекторов в векторе коэффициентов и кодирование значений коэффициентов субвектора с использованием кодера переменной длины.
[0015] В одном варианте положение субвектора указывается начальным и конечным положением в векторе коэффициентов. В другом варианте положение субвектора указывается начальным положением в векторе коэффициентов и длиной субвектора.
[0016] В одном варианте способ также включает выбор кодера переменной длины для субвектора из группы кодеров переменной длины на основании длины субвектора. Выбор кодера может включать определение того, является ли длина субвектора большей или меньшей заранее заданного порогового значения. В одном варианте способ также включает назначение кодового слова переменной длины для представления коэффициента субвектора на основании длины субвектора.
[0017] В одном варианте способ также включает выбор кодера переменной длины для субвектора из группы кодеров переменной длины на основании положения субвектора в векторе коэффициентов.
[0018] В одном варианте способ также включает кодирование синтаксического элемента "завершающие единицы" для блока, соответствующего субвектору.
[0019] В одном варианте способ также включает кодирование шаблона кодированного блока для макроблока, где шаблон кодированного блока показывает, имеет ли множество субвекторов векторов коэффициентов, соответствующих множеству блоков макроблока, какие-либо ненулевые коэффициенты.
[0020] В одном варианте способ также включает кодирование индикации, показывающей, был ли шаблон кодированного блока для макроблока получен из шаблона кодированного блока для ранее кодированного макроблока, или нет; где шаблон кодированного блока показывает, имеет ли множество субвекторов векторов коэффициентов, соответствующих множеству блоков макроблока, какие-либо ненулевые коэффициенты.
[0021] В одном варианте матрица кодового слова VLC (variable-length code - код переменной длины), предназначенная для вектора одной длины, усекается при использовании с меньшим субвектором. N самых коротких кодовых слов, отбрасываемых при усечении, «вставляются» в матрицу кодовых слов VLC так, что кодовые слова VLC, сохраняемые для использования с субвектором, будут не длиннее отбрасываемых кодовых слов VLC. Подобным образом это может быть реализовано при помощи «матрицы отображения».
[0022] В одном варианте в битовый поток кодируется «индикатор продолжения», указывающий, должен ли использоваться CBP (coded block pattern - шаблон кодированного блока) предыдущего макроблока в качестве CBP для текущего макроблока. При наличии такого указания декодирование CBP для текущего макроблока может быть пропущено. В качестве альтернативы, «индикатору продолжения» может быть присвоено одно значение из возможного набора значений CBP, и он может быть кодирован кодом переменной длины.
[0023] В одном варианте таблица VLC, используемая для кодирования «полного прогона» в блоке, настраивается на основании длины и/или положения субвектора. Например, индекс таблицы VLC может инкрементироваться значением, пропорциональным разнице между длиной субвектора и следующей длиной наибольшего вектора.
[0024] В одном варианте каждый макроблок содержит индикатор завершающих единиц, имеющий значение, которое соответствует количеству завершающих единиц в субвекторе. В качестве альтернативы каждый макроблок содержит индикатор завершающих единиц со значением, соответствующим количеству ненулевых коэффициентов в субвекторе.
[0025] В другом аспекте изобретения устройство включает приемник для приема исходного видеосигнала и кодер, сконфигурированный для обработки видеосигнала; при этом кодер сконфигурирован для разделения вектора коэффициентов на множество субвекторов. Помимо этого кодер сконфигурирован для указания положения субвектора из множества субвекторов в векторе коэффицентов, а также для кодирования значений коэффициентов субвектора с использованием кодера переменной длины.
[0026] В другом аспекте изобретения устройство включает процессор и блок памяти, соединенный с процессором. Блок памяти содержит компьютерный код для разделения вектора коэффициентов на множество субвекторов, компьютерный код для указания положения субвектора из множества субвекторов в векторе коэффициентов и компьютерный код для кодирования значений коэффициентов субвектора с использованием кодера переменной длины.
[0027] В другом аспекте изобретение включает компьютерную программу, реализованную на машиночитаемом носителе. Компьютерная программа сконфигурирована для обеспечения способа, включающего разделение вектора коэффициентов на множество субвекторов, указание положения субвектора из множества субвекторов в векторе коэффициентов и кодирование значений коэффициентов субвектора с использованием кодера переменной длины.
[0028] В другом аспекте изобретения способ декодирования кодированного изображения включает прием положения субвектора в векторе коэффициентов, представляющем блок изображения, прием набора коэффициентов для субвектора, формирование вектора коэффициентов на основании принятого набора коэффициентов и положения субвектора и декодирование блока.
[0029] В другом аспекте изобретения устройство включает приемник для приема исходного видеосигнала и декодер, сконфигурированный для обработки видеосигнала. Декодер сконфигурирован для приема положения субвектора в векторе коэффициентов, представляющем блок изображения, приема набора коэффициентов для субвектора, формирования вектора коэффициентов на основании принятого набора коэффициентов и положения субвектора и декодирования блока.
[0030] В другом аспекте изобретения устройство содержит процессор и блок памяти, соединенный с процессором. Блок памяти содержит компьютерный код для приема положения субвектора в векторе коэффициентов, представляющем блок изображения, компьютерный код для приема набора коэффициентов для субвектора, компьютерный код для формирования вектора коэффициентов на основании принятого набора коэффициентов и положения субвектора и компьютерный код для декодирования блока.
[0031] В другом аспекте изобретение включает компьютерную программу, реализованную на машиночитаемом носителе. Компьютерная программа сконфигурирована для обеспечения способа, включающего прием положения субвектора в векторе коэффициентов, представляющем блок изображения, прием набора коэффициентов для субвектора, формирование вектора коэффициентов на основании принятого набора коэффициентов и положения субвектора и декодирование блока.
[0032] Эти и другие преимущества и особенности различных вариантов осуществления настоящего изобретения, а также организация и принцип их работы, станут понятны из нижеследующего подробного описания с приложенными чертежами, где на нескольких чертежах, описанных ниже, одинаковые элементы имеют одинаковые номера.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0033] Фиг.1 - общая схема системы, в которой может быть реализовано настоящее изобретение;
[0034] Фиг.2 - вид в перспективе мобильного устройства, которое может быть использовано для осуществления настоящего изобретения;
[0035] Фиг.3 - схематическое представление схем мобильного устройства, изображенного на фиг.2;
[0036] Фиг.4 - пример потока блоков NAL (Network Abstraction Layer - уровень сетевой абстракции) в соответствии с вариантом осуществления настоящего изобретения;
[0037] Фиг.5 - пример блока NAL в соответствии с вариантом осуществления настоящего изобретения; и
[0038] Фиг.6 - пример макроблока в блоке NAL, изображенном на фиг.5, в соответствии с вариантом осуществления настоящего изобретения.
ПОДРОБНОЕ ОПИСАНИЕ РАЗЛИЧНЫХ ВАРИАНТОВ ОСУЩЕСТВЛЕНИЯ ИЗОБРЕТЕНИЯ
[0039] Варианты осуществления настоящего изобретения относятся к энтропийному кодированию коэффициентов, когда они разделены на структуры MGS и CGS. Эффективность кодирования в такой структуре может быть улучшена разделением коэффициентов на отдельные уровни качества. Блок 4×4 может быть записан в векторной форме, например как [12 0 4 -2 0 0 1 0 1 0 0 0 0 0 0 0]. Имеется возможность разделить блок на два вектора, содержащих первые четыре и последние двенадцать коэффициентов («разделение 4-12»), записанные в виде суммы двух векторов: [12 0 4 -2 0 0 0 0 0 0 0 0 0 0 0 0]+[0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0]. Таким образом, существующая технология MGS может не только выбирать, какие слайсы CGS будут обеспечивать наилучшее увеличение отношения скорость передачи - искажение, но и какие коэффициенты будут в слайсе.
[0040] Однако, когда блок коэффициентов делится на два или более векторов, каждый из отдельных блоков дополняется нулями. Если блок делится на два вектора, то это в два раза увеличивает количество коэффициентов по сравнению с исходным вектором. Если блок делится на три части, количество коэффициентов утраивается, и т.д. Например, блок [12 0 4 -2 0 0 1 0 1 0 0 0 0 0 0 0] может быть разделен на два блока [12 0 4 -2 0 0 0 0 0 0 0 0 0 0 0 0]+[0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0]. Назовем эти векторы V1 и V2, а n-ый коэффициент вектора V1 - n. Если такое разделение используется для каждого блока в кадре, то тогда вероятность того, что коэффициент нулевой, для n>=4 равна 1 в V1, математически p(V1, n=0) = 1 для n>=4, и, подобным образом, p(V2, n=0) = 1 для n<4. Кодер переменной длины, такой как контекстно-адаптивный кодер переменной длины (CAVLG - context-adaptive variable length code), не может в достаточной мере адаптироваться к этим вероятностям, и поэтому кодирование «дополняющих» нулей таким кодером крайне невыгодно. Варианты настоящего изобретения направлены на решение этих проблем.
[0041] На фиг.1 показана обобщенная система мультимедийной связи для использования с вариантами настоящего изобретения. Как показано на фиг.1, источник 100 данных выдает исходный сигнал в аналоговом, несжатом цифровом или сжатом цифровом формате, или же в любой комбинации этих форматов. Кодер 110 кодирует исходный сигнал в кодированный мультимедийный битовый поток. Кодер 110 может иметь возможность кодирования более одного типа мультимедиа, например аудио и видео, или же для кодирования разных типов медиаданных в исходном сигнале может потребоваться более одного кодера 110. Кодер 110 также может получать искусственно созданные входные данные, такие как графика или текст, или иметь возможность формирования кодированных битовых потоков искусственных медиаданных. Далее для упрощения описания будет рассматриваться обработка только одного кодированного мультимедийного битового потока одного типа мультимедиа. Однако необходимо заметить, что обычно вещательные службы, работающие в режиме реального времени, содержат несколько потоков (обычно по меньшей мере один аудио, видео и текстовый субтитровый поток). Также необходимо заметить, что система может содержать много кодеров, но далее для упрощения описания без потери общности будет рассматриваться только один кодер 110.
[0042] Кодированный мультимедийный битовый поток передается в запоминающее устройство 120. Запоминающее устройство 120 может иметь любой тип массовой памяти для хранения кодированного мультимедийного битового потока. Формат кодированного мультимедийного битового потока в запоминающем устройстве 120 может быть элементарным независимым битовым потоком, или же один или более кодированных мультимедийных битовых потоков могут быть инкапсулированы в файл-контейнер. Некоторые системы работают в режиме реального времени, т.е. пропускают этап сохранения и передают кодированный мультимедийный битовый поток от кодера 110 непосредственно отправителю 130. Затем кодированный мультимедийный битовый поток передается отправителю 130, также называемому сервером. Формат, используемый при передаче, может быть элементарным независимым битовым потоком, или же один или более кодированных мультимедийных битовых потоков могут быть инкапсулированы в файл-контейнер. Кодер 110, запоминающее устройство 120 и отправитель 130 могут размещаться в одном физическом устройстве или могут быть включены в отдельные устройства. Кодер 110 и отправитель 130 могут работать с контентом в режиме реального времени, в этом случае кодированный мультимедийный битовый поток не хранится постоянно, а буферизуется небольшими интервалами времени в кодере 110 контента и/или в отправителе 130 для сглаживания изменений в задержке обработки, задержке передачи и битрейте кодированного мультимедиа.
[0043] Отправитель 130 отправляет кодированный мультимедийный битовый поток при помощи стека протоколов связи. Стек может включать транспортный протокол реального времени (RTP - Real-Time Transport Protocol), протокол пользовательских дейтаграмм (UDP - User Datagram Protocol) и Интернет-протокол (IP - Internet Protocol), но не ограничивается ими. Когда стек протоколов связи является пакетно-ориентированным, отправитель 130 инкапсулирует кодированный мультимедийный битовый поток в пакеты. Например, когда используется RTP, отправитель 130 инкапсулирует кодированный мультимедийный битовый поток в пакеты RTP в соответствии с форматом полезной нагрузки RTP. Обычно каждый тип мультимедиа имеет специальный формат полезной нагрузки RTP. Снова необходимо заметить, что система может содержать более одного отправителя 130, но ради простоты в дальнейшем описании будет рассматриваться только один отправитель 130.
[0044] Отправитель 130 может быть соединен или не соединен со шлюзом 140 через сеть связи. Шлюз 140 может выполнять различные функции, такие как преобразование потока пакетов, соответствующего одному стеку протоколов связи, в другой стек протоколов связи, объединение и разделение потоков данных и управление потоком данных в соответствии с возможностями нисходящей линии связи и/или приемника, например, управление скоростью передачи перенаправленного потока в соответствии с доминирующими условиями сети нисходящей связи. Примеры шлюзов 140 включают устройства управления многоточечными конференциями (MCU -multipoint conference control unit), шлюзы между видеотелефонией с канальной и пакетной коммутацией, серверы связи «нажми и говори» по сотовой сети (РоС - Push-to-talk over Cellular), инкапсуляторы IP в системах цифрового телевидения для портативных устройств (DVB-H - digital video broadcasting-handheld) или приставки, которые пересылают вещательные передачи локально в домашнюю беспроводную сеть. Когда используется RTP, шлюз 140 называется смесителем RTP и работает как конечная точка соединения RTP.
[0045] Система включает один или более приемников 150, обычно имеющих возможности приема, демодуляции и декапсуляции сигнала, переданного в кодированном мультимедийном битовом потоке. Кодированный мультимедийный битовый поток обычно далее обрабатывается декодером 160, на выходе которого выдается один или более несжатых мультимедийных потоков. Необходимо заметить, что декодируемый битовый поток может быть принят от удаленного устройства, расположенного практически в любой сети. Также битовый поток может быть принят от локального аппаратного или программного обеспечения. В заключение, рендерер 170 может воспроизводить несжатые мультимедийные потоки при помощи, например, динамика или экрана. Приемник 150, декодер 160 и рендерер 170 могут размещаться в одном физическом устройстве или могут быть включены в отдельные устройства.
[0046] С точки зрения скорости передачи, сложности декодирования и размера изображения масштабируемость является желательным свойством для разнородных и подверженных ошибкам сред. Это свойство желательно для противодействия ограничениям, таким как ограничения скорости передачи, разрешение экрана, пропускная способность сети и вычислительная мощность приемного устройства.
[0047] Необходимо понимать, что хотя текст и примеры, содержащиеся здесь, могут на конкретном примере описывать процесс кодирования, специалисты поймут, что те же идеи и принципы могут также быть применены к соответствующему процессу декодирования, и наоборот. Необходимо заметить, что декодируемый битовый поток может быть принят от удаленного устройства, расположенного практически в любой сети. Также битовый поток может быть принят от локального аппаратного или программного обеспечения.
[0048] Устройства связи в настоящем изобретении могут осуществлять связь при помощи различных технологий передачи, включая, но не ограничиваясь этим, многостанционный доступ с кодовым разделением каналов (CDMA - Code Division Multiple Access), Глобальную систему мобильной связи (GSM - Global System for Mobile Communications), Универсальную систему мобильной связи (UMTS - Universal Mobile Telecommunications System), многостанционный доступ с разделением по времени (TDMA - Time Division Multiple Access), многостанционный доступ с разделением по частотам (FDMA - Frequency Division Multiple Access), Протокол управления передачей/Интернет-протокол (TCP/IP - Transmission Control Protocol/Internet Protocol), Службу передачи коротких сообщений (SMS - Short Messaging Service), Службу передачи мультимедиасообщений (MMS - Multimedia Messaging Service), e-mail, Службу мгновенного обмена сообщениями (IMS - Instant Messaging Service), Bluetooth, IEEE 802.11 и т.д. Устройство связи может осуществлять связь через различные среды, включая, но не ограничиваясь этим, радио, инфракрасное, лазерное, кабельное соединение и т.п.
[0049] На фиг.2 и 3 показан пример мобильного устройства 12, в котором может быть реализовано настоящее изобретение. Однако необходимо понимать, что настоящее изобретение не должно ограничиваться определенным типом мобильного устройства 12 или другого электронного устройства.
[0050] Мобильное устройство 12 на фиг.2 и 3 содержит корпус 30, экран 32 в виде жидкокристаллического дисплея, клавиатуру 34, микрофон 36, динамик 38, батарею 40, инфракрасный порт 42, антенну 44, смарт-карту 46 в форме UICC в соответствии с вариантом осуществления изобретения, устройство 48 считывания карт, схему 52 радиоинтерфейса, схему кодека 54, контроллер 56 и память 58. Все типы отдельных схем и элементов хорошо известны в технике, например, в линейке мобильных устройств Nokia.
[0051] Теперь обратимся к фиг.4. На ней изображен пример потока 400 блоков NAL. Как отмечалось выше, поток 400 блоков NAL включает последовательность блоков NAL 410, генерированных кодером. Каждый блок NAL 410 в потоке отделяется стартовым кодом (или префиксом) в начале каждого блока NAL.
[0052] На фиг.5 более подробно изображен пример блока NAL 410 с различными компонентами блока NAL. Блок NAL 410 содержит префикс NAL 412 и заголовок NAL 414, за которыми следует один или более макроблоков 420. Каждый макроблок 420 включает данные, соответствующие кадру, части кадра, улучшающему уровню или части улучшающего уровня.
[0053] На фиг.6 изображен макроблок 420, соответствующий варианту осуществления настоящего изобретения. Изображенный на фиг.6 макроблок 420 показан с некоторыми компонентами. Специалисты должны понимать, что макроблок 420 при необходимости может содержать и другие компоненты. Компоненты макроблока 420 содержат раздел 422 шаблона кодированного блока, индикатор 424 "завершающих единиц" (trailing ones) и блок 426 коэффициентов, каждый из которых хорошо известен специалистам. Индикатор 424 завершающих единиц обычно имеет значение, соответствующее количеству завершающих единиц в векторе коэффициентов или субвекторе.
[0054] В соответствии с вариантами настоящего изобретения желательно разделить вектор коэффициентов на сумму нескольких разных векторов и кодировать каждый из них в макроблок при помощи энтропийного кодера типа CAVLC. В одном варианте вектор коэффициентов делится на два или более субвекторов. Субвекторы соответствуют двум описанным выше векторам коэффициентов с удаленными дополняющими нулями. Таким образом, в одном примере, когда вектор коэффициентов, как и в ранее приведенном примере, имеет значение [12 0 4 -2 0 0 1 0 1 0 0 0 0 0 0 0], он может быть разделен на два субвектора: [12 0 4 -2] и [0 0 1 0 1 0 0 0 0 0 0 0]. Для упрощения декодирования заголовок слайса может быть снабжен индикаторами, отображающими размер и положение каждого субвектора в векторе коэффициентов. В одном варианте размер и положение каждого субвектора могут быть указаны начальным и конечным положениями субвектора. Например, указание начального и конечного положений числами (0,3) и (4,15) повлечет за собой разделение вектора [12 0 4 -2 0 0 1 0 1 0 0 0 0 0 0 0] на два субвектора [12 0 4 -2] и [0 0 1 0 1 0 0 0 0 0 0 0], соответственно. Если начало субвектора всегда следует непосредственно за окончанием предыдущего субвектора, то кодирование начального либо конечного положения может быть пропущено. В другом варианте размер и положение каждого субвектора могут быть представлены начальным положением и длиной субвектора. Таким образом, код начального положения и длины (0,4) укажет на субвектор [12 0 4 -2], а код начального положения и длины [4,12] - на субвектор [0 0 1 0 1 0 0 0 0 0 0 0]. Если начало одного субвектора всегда следует непосредственно за окончанием предыдущего субвектора, начальное положение может быть пропущено, следовательно, длины субвекторов могут быть кодированы в виде [4,12]. Для каждого из этих вариантов может быть использован обычный кодер CAVLC.
[0055] В другом варианте данного изобретения кодер CAVLC, используемый для кодирования каждого субвектора, может быть выбран независимо. Например, конкретный кодер может быть более эффективен для субвектора одного размера по сравнению с другим. Таким образом, выбор кодера CAVLC из группы кодеров CAVLC может основываться на длине субвектора.
[0056] Например, H.264/AVC имеет два варианта: один для 16-значных векторов и другой для 4-значных векторов. Может быть задан такой порог, чтобы любые векторы такой же или меньшей длины кодировались 4-значным кодером CAVLC, а любой вектор большей длины кодировался 16-значным кодером CAVLC.
[0057] Соответствие между кодером CAVLC и длиной субвектора может быть получено при помощи, например, таблицы поиска или математической функции, такой как пороговая операция. Установка соответствия может быть запрограммирована жесткой логикой, чтобы оно легко определялось и было одинаково для конкретного субвектора и в кодере, и в декодере. В качестве альтернативы установка соответствия или выбор кодера могут задаваться в битовом потоке и поэтому передаваться декодеру.
[0058] В другом варианте настоящего изобретения индикатор 424 завершающих единиц может изменяться на основании длины субвектора. В одном варианте индикатор 424 завершающих единиц динамически меняется так, чтобы он указывал только ненулевое количество, зависящее от длины кодируемого вектора. Когда имеется данное изменение, количество завершающих единиц предполагается равным нулю, и может использоваться другая таблица кодовых слов VLC.
[0059] Например, если длина вектора меньше 5 или больше 10, индикатор 424 завершающих единиц может указывать и количество завершающих единиц, и количество ненулевых коэффициентов, и может использоваться обычное декодирование H.264/AVC CAVLC. С другой стороны, если длина вектора находится в пределах от 5 до 10, индикатор 424 завершающих единиц может меняться в соответствии с таблицей кодовых слов. такой как следующая:
Кодовое слово VLC | Кол-во ненулевых значений | Завершающие единицы |
0 | 0 | 0 |
10 | 1 | 0 |
110 | 2 | 0 |
11100 | 3 | 0 |
11110 | 4 | 0 |
111010 | 5 | 0 |
111011 | 6 | 0 |
111110 | 7 | 0 |
1111110 | 8 | 0 |
11111110 | 9 | 0 |
11111111 | 10 | 0 |
[0060] В одном варианте значение индикатора 424 завершающих единиц может иметь верхний предел. Например, максимальное значение индикатора 424 завершающих единиц может меняться от нуля до трех в зависимости от длины субвектора и/или количества ненулевых коэффициентов. Например, для субвектора, имеющего длину 6, значение индикатора 424 завершающих единиц может быть ограничено 1 и поэтому может иметь значение от 0 до 1.
[0061] В другом варианте настоящего изобретения для изменения соответствия кодовых слов H.264/AVC CAVLC индикатору 424 завершающих единиц на основании длины субвектора используется «функция отображения». В соответствии с H.264/AVC CAVLC, длина кодового слова VLC для индикатора 424 завершающих единиц основывается и на количестве завершающих единиц, и на общем количестве ненулевых значений в блоке. Например, для векторов размером 16 и контекстного нуля длины кодовых слов VLC задаются матрицей:
где индекс по вертикали - это количество завершающих единиц, а индекс по горизонтали - это общее количество ненулевых значений. Если длина субвектора равна 2, размер ограничивается, так как субвектор может иметь только 0, 1 или 2 завершающие единицы и только 0, 1 или 2 ненулевых значений:
[0062] Однако при использовании кодовых слов большей длины простое усечение матрицы VLC фактически запрещает некоторые кодовые слова меньшей длины. Например, вышеуказанная матрица VLC содержит длины 6 и 8, но исключает длину 5. Это вызывает потерю эффективности кодирования. Предпочтительно «вставлять» в матрицу более короткие исключенные длины VLC так, чтобы при вставке N более коротких кодовых слов удалять N наиболее длинных кодовых слов. Например, после вставки значения 5 матрица принимает следующий вид:
[0063] Характеристикой этой операции является то, что кодовое слово VLC в усеченной матрице длиннее, чем любое кодовое слово, удаленное усечением. Другой характеристикой является то, что относительная длина кодовых слов VLC в усеченной матрице сохраняется, и таким образом кодовое слово VLC, которое не длиннее второго кодового слова VLC в исходной матрице, будет оставаться короче второго кодового слова в усеченной матрице.
[0064] Такая "вставка" кодовых слов меньшей длины может быть эквивалентно записана как функция отображения (преобразования). Сначала кодовые слова записывают как упорядоченный вектор. Продолжая пример H.264/AVC CAVLC для вектора размером 16 и контекстного 0, длины будут [12356667788889999…]. «Матрица отображения» указывает, индекс какого кодового слова должен использоваться в каждой позиции матрицы длин VLC:
[0065] Так, для верхнего левого элемента матрицы должно использоваться кодовое слово с индексом 0, т.е. длиной 1. Для верхнего второго слева элемента матрицы должно использоваться кодовое слово с индексом 4, т.е. длиной 6. Таким образом становится возможным реконструировать исходную матрицу длины VLC из вектора VLC и «матрицы отображения».
[0066] Теперь, если субвектор, например, ограничен длиной 3, матрица отображения просто усекается и упаковывается для исключения разрывности:
[0067] Наконец, замена значений в «матрице отображения» соответствующими длинами кодовых слов VLC дает:
[0068] Как было отмечено, «функция отображения» является эквивалентом операции «вставки», гарантирующей, что кодовые слова VLC меньшей длины не пропадают при использовании субвекторов. Такой подход позволяет избежать необходимости хранить много разных таблиц VLC, соответствующих каждой длине субвектора, и таким образом может обеспечить уменьшение сложности, даже если таблицы не обязательно оптимальны для каждого случая. В данном варианте может использоваться возможность задания пороговой величины, упоминавшаяся ранее. Например, «матрица отображения», соответствующая длине вектора 4, может использоваться для субвекторов длиной не более 4, а вторая «матрица отображения», соответствующая длине 16, может использоваться для субвекторов длиной более 4.
[0069] В дальнейшем примере кодовые слова VLC могут быть «ограничены». Например, если имеется одно кодовое слово VLC длиной 7 и другое кодовое слово VLC длиной 8, но нет ни одного длиной 9 и более, то кодовое слово VLC длиной 8 может быть укорочено до длины 7, так как префиксные биты более не требуются.
[0070] В другом варианте осуществления настоящего изобретения VLC, используемый для раздела 422 шаблона кодированного блока, меняется в зависимости от длины субвектора и/или начального положения вектора. В этом случае один VLC может использоваться для векторов, начинающих в нулевой точке, а другие VLC - для остальных векторов. Например, для описанных ранее субвекторов [12 0 4 -2] и [001010000000] начальное положение первого субвектора - нуль, а начальное положение второго субвектора - 4. Для первого вектора может использоваться обычный VLC H.264/AVC CBP, а для второго вектора - другой VLC. Или, например, в случае описанных ранее субвекторов [12 0 4 -2] и [001010000000] длина первого субвектора 4, а