Контекстно-адаптивное кодирование переменной длины - Context-adaptive variable-length coding
Контекстно-адаптивный кодирование с переменной длиной слова (CAVLC) является формой энтропийное кодирование используется в H.264 / MPEG-4 AVC кодирование видео. Это по своей сути сжатие без потерь техника, как и почти все энтропийные кодеры. В H.264 / MPEG-4 AVC он используется для кодирования остаточных зигзагообразных блоков коэффициентов преобразования. Это альтернатива контекстно-зависимому адаптивному бинарному арифметическое кодирование (CABAC). CAVLC требует значительно меньше обработки для декодирования, чем CABAC, хотя он не так эффективно сжимает данные. CAVLC поддерживается во всех профилях H.264, в отличие от CABAC, который не поддерживается в базовых и расширенных профилях.
CAVLC используется для кодирования остаточных, зигзагообразно упорядоченных блоков коэффициентов преобразования 4x4 (и 2x2). CAVLC разработан, чтобы воспользоваться преимуществами нескольких характеристик квантованных блоков 4x4:
- После предсказания, преобразования и квантования блоки, как правило, разрежены (содержат в основном нули).
- Наивысшие ненулевые коэффициенты после зигзагообразного сканирования часто представляют собой последовательности +/- 1. CAVLC компактно сигнализирует количество высокочастотных +/- 1 коэффициентов.
- Количество ненулевых коэффициентов в соседних блоках коррелируется. Количество коэффициентов кодируется с помощью справочной таблицы; выбор справочной таблицы зависит от количества ненулевых коэффициентов в соседних блоках.
- Уровень (величина) ненулевых коэффициентов имеет тенденцию быть выше в начале переупорядоченного массива (около коэффициента постоянного тока) и ниже по направлению к более высоким частотам. CAVLC использует это преимущество, адаптируя выбор таблицы поиска VLC для параметра «уровень» в зависимости от недавно закодированных величин уровня.
Кодированные элементы
Параметры, которые необходимо закодировать и передать, включают следующую таблицу:
Параметры | Описание |
---|---|
Тип макроблока | Метод прогнозирования для каждого кодированного макроблока |
Шаблон кодированного блока | Указывает, какие блоки в макроблоке содержат кодированные коэффициенты |
Опорный кадр параметра квантователя | Передается как дельта-значение от предыдущего значения QP. |
Индекс системы отсчета | Определите опорный кадр (ы) для межкадрового предсказания |
Вектор движения | Передается как разность (mvd) от предсказанного вектора движения |
Остаточные данные | Данные коэффициента для каждого блока 4x4 или 2x2 |
Примеры CAVLC
Элемент | Ценить | Код |
---|---|---|
coeff_token | TotalCoeffs = 5, T1s = 3 | 0000100 |
Знак Т1 (4) | + | 0 |
Знак Т1 (3) | - | 1 |
Знак Т1 (2) | - | 1 |
1-й уровень) | +1 (используйте Level_VLC0) | 1 |
Уровень (0) | +3 (используйте Level_VLC1) | 0010 |
TotalZeros | 3 | 111 |
run_before (4) | ZerosLeft = 3; run_before = 1 | 10 |
run_before (3) | ZerosLeft = 2; run_before = 0 | 1 |
run_before (2) | ZerosLeft = 2; run_before = 0 | 1 |
run_before (1) | ZerosLeft = 2; run_before = 1 | 01 |
run_before (0) | ZerosLeft = 1; run_before = 1 | Код не требуется; последний коэффициент. |
Код | Элемент | Ценить | Выходной массив |
---|---|---|---|
0000100 | coeff_token | Общие коэффициенты = 5, T1s = 3 | Пустой |
0 | Знак Т1 | + | 1 |
1 | Знак Т1 | - | −1, 1 |
1 | Знак Т1 | - | −1, −1, 1 |
1 | Уровень | +1 | 1, −1, −1, 1 |
0010 | Уровень | +3 | 3, 1, −1, −1, 1 |
111 | TotalZeros | 3 | 3, 1, −1, −1, 1 |
10 | run_before | 1 | 3, 1, −1, −1, 0, 1 |
1 | run_before | 0 | 3, 1, −1, −1, 0, 1 |
1 | run_before | 0 | 3, 1, −1, −1, 0, 1 |
01 | run_before | 1 | 3, 0, 1, −1, −1, 0, 1 |
Во всех следующих примерах мы предполагаем, что таблица Num-VLC0 используется для кодирования coeff_token.
0, 3, 0, 1, -1, -1, 0, 1, 0… TotalCoeffs = 5 (индексируется от самой высокой частоты [4] до самой низкой частоты [0])
TotalZeros = 3
T1s = 3 (на самом деле есть 4 завершающих, но только 3 могут быть закодированы как «особый случай»)
Кодировка:
Переданный битовый поток для этого блока - 000010001110010111101101.
Декодирование: выходной массив «строится» из декодированных значений, как показано ниже. Значения, добавляемые в выходной массив на каждом этапе, подчеркнуты.
Декодер вставил два нуля; однако TotalZeros равно 3, и поэтому перед самым низким коэффициентом вставляется еще 1 ноль, в результате чего получается окончательный выходной массив: 0, 3, 0, 1, -1, -1, 0, 1
Смотрите также
внешняя ссылка
Этот Информатика статья - это заглушка. Вы можете помочь Википедии расширяя это. |