macroblock_address определяет абсолютную координату текущего макроблока. Для верхнего левого макроблока этот параметр равен 0.
previous_macroblock_address определяет абсолютную координату предыдущего макроблока, не являющегося пропущенным и началом слоя.
В начале слоя previous_macroblock_address =(mb_row * mb_width)-1, где mb_column – горизонтальная координата макроблока в кадре, измеренная в единицах макроблока, mb_column = macroblock_address % mb_width, где mb_width – число макроблоков в строке кадра.
macroblock_type – параметр, показывающий тип кодирования содержимого макроблока, определенного в табл.В2..В8 стандарта.
macroblock_quant – вычисляется из macroblock_type по таблицам. Если равен 1, то quantiser_scale_code присутствует в потоке.
macroblock_motion_forward(backward) – также находится на основе macroblock_type. Этот флаг влияет на синтаксис битового потока.
macroblock_pattern - также находится на основе macroblock_type. Если равен 1, то в потоке присутствует coded_block_pattern().
macroblock_intra – также находится на основе macroblock_type. Этот флаг влияет на синтаксис битового потока.
spatial_temporal_weight_code_flag - Если равен 1, то в потоке присутствует spatial_temporal_weight_code. Если флаг равен 0, то spatial_temporal_weight_class находится по табл.В5-В7 стандарта.
spatial_temporal_weight_code – 2 бита, показывающие как пространственное и временное предсказание комбинируется. Подробнее описано в разделе 4.
frame_motion_type – 2 бита, показывающие тип предсказания в макроблоке, как показано в табл.П.2.36. Если frame_pred_frame_dct=1, то параметр frame_motion_type отсутствует. Это эквивалентно типу предсказания на основе кадра. В случае интра макроблоков при наличии флага concealment_motion_vectors frame_motion_type также отсутствует.
field_motion_type – два бита, показывающие тип предсказания в макроблоке – табл.П.2.37.
dct_type – флаг, показывающий к чему применялось ДКП у интра макроблока. Если равен 1, то к полю, если 0 – то к кадру.
motion_vector_count, а также mv_format, dmv находятся на основе field_motion_type или frame_motion_type, как показано в вышеприведенных таблицах.
motion_vertical_field_select[r][s] – флаг, показывающий какое поле будет опорным. Если флаг=0, то используется верхнее поле, 1 – нижнее.
motion_code[r][s][t] – код переменно длины, определенный в табл.В-10 стандарта.
motion_residual[r][s][t] – целое, число бит в котором на единицу меньше f_code[s][t].
dmvector[t] – код переменной длины, определенный в табл.В-11 стандарта.
coded_block_pattern_420 – переменной длины, служит для определения по табл.В-9 стандарта переменной vbp.
coded_block_pattern_1 и coded_block_pattern_2 – для 4:2:2 и 4:4:4 coded_block добавляется 2 или 6 битами. Тогда pattern_code[i] находится так:
for (i=0; i<12; I++) { if (macroblock_intra) pattern_code[i] = 1; else pattern_code[i] = 0; } if (macroblock_pattern) { for (i=0; i<6; i++) if ( cbp & (1<<(5-i)) ) pattern_code[i] = 1; if (chroma_format == “4:2:2”) for (i=6; i<8; i++) if ( coded_block_pattern_1 & (1<<(7-i)) ) pattern_code[i] = 1; if (chroma_format == “4:4:4”) for (i=8; i<12; i++) if ( coded_block_pattern_2 & (1<<(11-i)) ) pattern_code[i] = 1; } |
Если pattern_code[i]=1, то блок с номером i содержится в макроблоке. Возможное число блоков в макроблоке равно 6, 8, 12 – соответственно для 4:2:0, 4:2:2, 4:4:4.
Процесс декодирования описан в стандарте таким образом, что все декодеры дают на выходе численно идентичные результаты, за исключением выполнения операции обратного ДКП (ОДКП). ОДКП определено статистически, и возможны различные его реализации.
Вначале рассмотрим процесс декодирования без использования функций масштабирования видео, а потом – эти функции.
Упрощенная блок-диаграмма декодера приведена на рис.1.6.1.
Рис.1.6.1. Упрощенная блок-диаграмма декодера
Обозначим через сс компонент цвета. Его связь с номером блока показана в табл.П.2.38. сс=0 для Y-компоненты, сс=1 для Cb и сс=2 для Cr.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.