62
Тип макроблока — один из кодов переменной длины, уточняющих структуру P-макроблока в элементарном потоке:
‘1’ — передаются векторы движения и закодированные трансформанты; код фактора квантования отсутствует;
‘01’ — передаются только закодированные трансформанты; код фактора квантования отсутствует; векторы движения равны нулю;
‘001’ — передаются только векторы движения; код фактора квантования отсутствует; трансформанты всех блоков равны нулю;
‘00010’ — передаются векторы движения, код фактора квантования и закодированные трансформанты;
‘00001’ — передаются закодированные трансформанты и код фактора квантования; векторы движения равны нулю.
Тип предсказания задается двухбитовым кодом фиксированной длины. Для пропущенных макроблоков подразумевается кадровый или полевой прогноз при кодировании соответственно кадра или поля.
Тип ПДКП кодируется одним битом: ‘0’ — кадровое, ‘1’ — полевое. Присутствует только в чересстрочной видеопоследовательности при кодировании кадра и сброшенном флаге «кадровые типы предсказания и ПДКП» ("frame_pred_frame_dct").
Векторы движения передаются в элементарном потоке в виде закодированных разностей между текущими значениями векторов и их предикторами — предсказанными значениями. Правила формирования предикторов представлены в таблице А.5.
П р и м е ч а н и е — Предиктор вектора, полученного прогнозом двойной опоры при кадровом кодировании, сохраняется с удвоенным значением вертикальной координаты.
При кодировании текущего макроблока P-кадра (поля) неизвестно, к какому типу (/- или P-) будет отнесен следующий макроблок, а если это будет P-макроблок, то какой из вариантов прогноза окажется для него наилучшим и соответственно сколько векторов (один или два) потребуется для компенсации движения такого P-макроблока. В связи с этим при обработке каждого макроблока формируется и запоминается пара предикторов: А и В. Предиктор А является основным и применяется для кодирования первого (возможно единственного) вектора движения следующего P-макроблока. Предиктор В используется для кодирования второго вектора, если таковой имеется. Оба предиктора полагаются равными нулю в следующих случаях:
- перед кодированием первого макроблока слайса;
- после передачи /-макроблока без скрытых векторов;
- после передачи P-макроблока без векторов;
- если текущий макроблок оказался пропущенным.
После передачи очередного непропущенного P-макроблока производится реконструирование всех его ненулевых блоков в порядке, обратном порядку их кодирования: инверсное сканирование, деквантование трансформант, вычисление ошибок предсказания посредством ОДКП, восстановление исходных отсчетов. Деквантование трансформант осуществляется в соответствии с выражениями:
S*(m, n) = ОБР [(S^m, n) + V2)QM(m, n)/16] для S^m, n) > 0;
S*(m, n) = 0, для S^m, n) = 0;
S*(m, n) = ОБР (S^m, n) - 1/2)QM(m, n) /16, для S^m, n) < 0,
где ОБР — операция округления до целого отбрасыванием ("обрубанием") дробной части числа.
Результаты деквантования вводятся в диапазон [-2048, +2047].