Контекстно-адаптивное кодирование переменной длины
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2022 г. ) |
Контекстно-адаптивное кодирование переменной длины ( CAVLC ) — это форма энтропийного кодирования, используемая при кодировании видео H.264/MPEG-4 AVC . Это по своей сути метод сжатия без потерь , как и почти все энтропийные кодеры. В H.264/MPEG-4 AVC он используется для кодирования остаточных блоков коэффициентов преобразования зигзагообразного порядка. Это альтернатива контекстно-ориентированному адаптивному двоичному арифметическому кодированию (CABAC). CAVLC требует значительно меньше обработки для декодирования, чем CABAC, хотя он не так эффективно сжимает данные. CAVLC поддерживается во всех профилях H.264, в отличие от CABAC, который не поддерживается в базовом и расширенном профилях.
CAVLC используется для кодирования остаточных зигзагообразных блоков коэффициентов преобразования 4×4 (и 2×2). CAVLC разработан с учетом нескольких характеристик квантованных блоков 4×4:
- После прогнозирования, преобразования и квантования блоки обычно разрежены (содержат в основном нули).
- Самые высокие ненулевые коэффициенты после зигзагообразного сканирования часто представляют собой последовательности +/- 1. CAVLC компактно сигнализирует о количестве высокочастотных коэффициентов +/-1.
- Количество ненулевых коэффициентов в соседних блоках коррелирует. Количество коэффициентов кодируется с помощью справочной таблицы; выбор справочной таблицы зависит от количества ненулевых коэффициентов в соседних блоках.
- Уровень (величина) ненулевых коэффициентов имеет тенденцию быть выше в начале переупорядоченного массива (около коэффициента постоянного тока) и ниже по направлению к более высоким частотам. CAVLC использует это в своих интересах, адаптируя выбор таблицы поиска VLC для параметра «уровень» в зависимости от недавно закодированных величин уровня.
Кодированные элементы [ править ]
Параметры, которые необходимо кодировать и передавать, включают следующую таблицу:
Параметры | Описание |
---|---|
Тип макроблока | Метод прогнозирования для каждого кодированного макроблока |
Шаблон кодированного блока | Указывает, какие блоки внутри макроблока содержат кодированные коэффициенты. |
Система отсчета параметров квантователя | Передается как значение разницы от предыдущего значения QP. |
Индекс опорного кадра | Определить опорные кадры для взаимного предсказания |
Вектор движения | Передается как разница (mvd) от прогнозируемого вектора движения. |
Остаточные данные | Данные коэффициентов для каждого блока 4×4 или 2×2. |
Примеры 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 |
ВсегоНулей | 3 | 111 |
run_before(4) | НольЛефт=3; run_before=1 | 10 |
run_before(3) | НольЛефт=2; run_before=0 | 1 |
run_before(2) | НольЛефт=2; run_before=0 | 1 |
run_before(1) | НольЛефт=2; run_before=1 | 01 |
run_before (0) | НольЛефт=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 | ВсегоНулей | 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])
ВсегоНулей = 3
T1s = 3 (на самом деле их 4 в конце, но только 3 можно закодировать как «специальные»случай")
Кодировка:
Передаваемый битовый поток для этого блока — 000010001110010111101101.
Расшифровка:Выходной массив «составлен» из декодированных значений, как показано ниже. Значения, добавляемые в выходной массив на каждом этапе, подчеркнуты.
Декодер вставил два нуля; однако TotalZeros равен 3, поэтому перед наименьшим коэффициентом вставляется еще один ноль, образуя окончательный выходной массив: 0, 3, 0, 1, -1, -1, 0, 1.