Улучшение отношения сигнал/шум при микшировании видео изображения, сжатого по стандарту MPEG2, страница 9

Заголовок группы кадров (GOP)

Заголовок начинается с стартового кода 000001B8. Далее идет 25-битная структура time_code, включающая в себя временные метки drop_frame_flag, time_code_hours, time_code_minutes, marker_bit, time_code_seconds и time_code_pictures. Эта структура не влияет на процесс декодирования.

1-битный параметр closed_gop указывает на способ кодирования серии В-кадров, следующих за первым I-кадром. closed_gop=1 означает, что В-кадры кодировались внутрикадрово либо с использованием только предсказания назад.

Следующий параметр broken_link=0. Если он равен 1, это означает, что серия В-кадров, следующая за первым I-кадром, может быть декодирована неверно, так как опорный кадр утерян. Тогда декодер может не отображать эти кадры и в них может быть записана информация.

Заголовок кадра

Стартовый код – 32 бита – 00000100 в шестнадцатиричном формате.

Temporal_reference – 10-битная временная отметка. Ее значение зависит от значения рассматривающегося ранее параметра low_delay.

Если low_delay=0, то временная отметка изменяется внутри GOB от 0 и далее по модулю 1024. Если кадр кодировался как два поля, временная отметка у них будет одинаковой.

Если low_delay=1, то может возникнуть ситуация, когда к буферу переменной скорости кодер обращается несколько раз до того, как удалить «большой кадр». Если в потоке был «большой кадр», то временная отметка следующего за ним кадра будет равной временной отметке этого кадра плюс N+1 по модулю 1024, где N- число обращений кодера к буферу. Если «большим кадром» оказалось первое поле кадра, то временная отметка у полей одного кадра будет разная.

3-битный параметр picture_coding_type определяет тип кодирования изображения. В отличии от ISO/IEC 11172-2 в MPEG-2 нет такого типа как D-кадры, то есть внутрикодируемые кадры, у которых оставлены только DC-коэффициенты ДКП.

16-битное поле vbv_delay определяет задержку для декодера между приемом последнего байта стартового кода кадра и началом декодирования этого кадра. Используется при кодировании с переменной скоростью. Обычно равно FFFF.

Следующие биты остались для совместимости с MPEG-1, принимают постоянные значения и не участвуют в процессе декодирования: 01110111.

Флаг extra_bit_picture показывает наличие дополнительной информации. Если он равен нулю, то информации нет, в противном случае – есть. Однако, этот флаг введен на перспективу и пока он должен быть равен 0.

Соответственно, и extra_information_picture пока не применяется.

Дополнения кодирования кадра

f_code[s][t] – 4-битное целое, принимающее значения 1…9 или 15. Оно используется при декодировании векторов компенсации движения.

В I-кадрах concealment_motion_vectors равно нулю и f_code[s][t] не используется и должно быть равным 15.

Также в I-кадрах и Р-кадрах не используется и должно быть равным 15 f_code[1][t], относящееся к предсказанию назад.

Intra_dc_precision – показывает точность кодирования DC-коэффициентов. Принимает 4 значения, соответствующие 8..11 битам.

Этот параметр используется при инверсном квантовании.

Picture_structure – 2 бита, показывающие тип изображения:

00 – зарезервировано;

01 – верхнее поле;

10 – нижнее поле;

11 – кадр.

Первым кодированным полем кадра может быть, как нижнее, так и верхнее. Если кадр кодируется как два поля, то для полей могут быть независимо установлены следующие параметры:

•          f_code[0][0], f_code[0][1]

•          f_code[1][0], f_code[1][1]

•          intra_dc_precision, concealment_motion_vectors, q_scale_type

•          intra_vlc_format, alternate_scan.

Флаг top_field_first. Значение этого параметра зависит от значений picture_structure, progressive_sequence и repeat_first_field. Если progressive_sequence = 0, то флаг показывает, какое поле кадра декодируется первым: в ПК-кадрах он должен быть равен 0, а в КК-кадрах он может быть как равным 1 (первым декодируется верхний кадр), так и нулю. Если же progressive_sequence = 1, то этот флаг вместе с repeat_first_field показывает число уровней реконструкции (1,2,3).

Если флаг frame_pred_frame_dct=1, то используется только межкадровое предсказание. Если 0 – то на уровне полей.