6.2. Кодек Н.264
Как и в предыдущих стандартах, рекомендация Н.264 не дает явного описания «кодека» (т.е. пары КОдер/ДЕКодер). Вместо этого делается описание синтаксиса закодированного битового видеопотока вместе с методом его декодирования. По всей видимости, на практике «правильные» кодер и декодер будут состоять из функциональных элементов, показанных на рис. 6.1 и 6.2. За исключением деблокирующего фильтра большинство функциональных элементов (прогноз, преобразование, квантование, энтропийное кодирование) присутствовали и в предыдущих стандартах (MPEG-1, MPEG-2, MPEG-4, Н.261, Н.263). Однако в Н.264 произошла существенная переработка всех функциональных элементов.

Рис. 6.1. Кодер Н.264.

Рис. 6.2. Декодер Н.264.
Кодер (рис. 6.1) имеет два направления потоков данных: «прямое» (слева направо) и «реконструированное» (справа налево). Поток данных в декодере (рис. 6.2) изображен в направлении справа налево, для того чтобы подчеркнуть его схожесть с потоком кодера. Перед детальным объяснением стандарта Н.264 мы приведем основные шаги кодирования и декодирования кадра (или полукадра) видеопоследовательности. Здесь мы сознательно упрощаем описание для лучшего обзора ключевых этапов кодирования и декодирования. Термин «блок» используется для обозначения части макроблока или части подмакроблока (при кодировании в моде inter) сэмплов яркости и связанных с ними компонентов хроматичноcти (при кодировании в моде intra).
Кодер (прямое направление потока данных). Входной кадр или полукадр
обрабатывается единицами макроблоков. Каждый макроблок кодируется в моде intra или inter, и для каждого блока макроблока формируется прогноз PRED (помеченный на рис. 6.1 буквой Р) на основе реконструкции сэмплов снимка. В моде intra прогноз PRED формируется с помощью сэмплов текущего слоя, ранее закодированных, декодированных и реконструированных (
на рис. 6.1: заметим, что при создании PRED используются нефильтрованные сэмплы). В моде inter прогноз PRED строится с помощью компенсации движения по одному или двум ссылочным кадрам, выбранным из списка 0 и/или из списка 1 ссылочных снимков. На рисунках ссылочный кадр показан в виде ранее закодированного снимка
, а ссылочный прогноз для каждой части макроблока (в моде inter) может быть взят из прошлых или будущих снимков (в порядке их отображения на дисплее), которые уже были закодированы ранее, реконструированы и отфильтрованы.
Прогноз PRED вычитается из текущего блока, и их разность (которую мы будем для удобства называть остатком) обозначается
. Далее к блоку
применяется соответствующее преобразование, результат квантуется, и создается блок
. Полученное множество квантованных коэффициентов переупорядочивается и кодируется энтропийным кодером. Выходные коэффициенты энтропийного кодера вместе с некоторой дополнительной информацией, необходимой при декодировании каждого блока данного макроблока (мода прогноза, параметры квантователя, информация о векторах движения и т.п.), записываются в битовый поток, который проходит через «абстрактный сетевой модуль» NAL (Network Abstraction Layer) для дальнейшей передачи или хранения.
Кодер (направление реконструкции потока данных). Каждый закодированный и переданный блок макроблока декодируется (реконструируется) самим кодером для получения ссылочного материала последующих прогнозов. При этом коэффициенты
деквантуются (
) и к результату применяется обратное преобразование (
) для получения разностного (остаточного) блока
. Прогнозный блок PRED складывается с блоком
для образования реконструированного блока
, (декодированная версия исходного блока, и означает, что он не фильтрован). Затем применяется фильтр для погашения эффекта блочной дисторсии (искажения). В итоге реконструированный ссылочный кадр строится по ряду блоков
.
Декодер. Декодер получает сжатый битовый поток из NAL, и сначала применяет энтропийный декодер для получения элементов данных, из которых формируются множества квантованных коэффициентов
. Эти коэффициенты деквантуются, к результату применяется обратное преобразование, и получается блок
(идентичный блоку
кодера). Используя информационный заголовок, извлеченный из битового потока, декодер создает блок-прогноз PRED, который в точности совпадает с исходным блоком PRED кодера. Этот блок складывается с
для получения блока
, который затем фильтруется для формирования декодированного блока
.