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 кодера. Этот блок складывается с для получения блока , который затем фильтруется для формирования декодированного блока .
|