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

На высоком уровне описания битового потока применяются следующие правила:

- если после первого sequence_header() не следует sequence_extension(), то битовый поток должен удовлетворять стандарту ISO/IEC 11172-2 и не описан в текущем стандарте;

-          если после первого sequence_header() следует sequence_extension(), то и после всех последующих sequence_header() должны следовать sequence_extension();

- sequence_extension() может встречаться только непосредственно после sequence_header();

- между двумя sequence_header() или между sequence_header() и sequence_end() должен быть хотя бы один кадр;

- если в последовательности встретился sequence_extension(), то после каждого picture_header() должен следовать picture_coding_extension(), причем этот заголовок может следовать только непосредственно после picture_header();

- в конце битового потока должен находиться sequence_end_code;

-   первый кадр после group_of_pictures_header() должен быть I-типа.

Таким образом, стандарт предусматривает обязательность наличия полей для записи дополнительных параметров кодирования как всей последовательности, так и каждого кадра. Как будет показано далее, многие из этих полей могут быть использованы для записи дополнительной информации.

Помимо sequence_extension() и picture_coding_extension() допускается еще ряд дополнений, различный для различных точек битового потока. Эти дополнения показаны в табл.П.2.29 Приложения 2.

Каждое дополнение может появиться лишь однажды в допустимом для этого месте битового потока. Если код дополнения будет равным зарезервированному значению, то декодер пропустит все данные до следующего стартового кода. Отсюда следует, что в эти данные можно внедрять информацию, так как она все равно не читается декодером.

Структура заголовка последовательности

Видеопоток всегда заканчивается sequence_end_code  = 000001B7.

Начало потока sequence_header_code = 000001B3.

Далее идут значения размера кадра по горизонтали и вертикали. Эти значения представлены словами (horizontal)vertical_size_value, в которых значимыми являются 12 младших бит. Еще два бита значения размера (старшие) берутся из (horizontal)vertical_size_extension.

Далее идут биты, указывающие соотношение размеров сторон - aspect_ratio_information, значения которых представлено в табл.П.2.30.

После этого следуют четыре бита frame_rate_code, служащие для определения frame_rate_value, показанные в табл.П.2.31. Частота кадров может быть определена из значений frame_rate_value, frame_rate_extension_n и frame_rate_extension_d следующим образом:

frame_rate = frame_rate_value * (frame_rate_extension_n + 1) / (frame_rate_extension_d + 1).

Далее идет 30-битовое целое число bit_rate, указывающее битовую скорость. Младшие 18 бит этого числа есть bit_rate_value, а старшие 12 бит есть bit_rate_extension. Единицей измерения битовой скорости в данном случае является 400бит/сек.

После этого идет маркерный бит, равный 1. Он нужен для того, чтобы ошибочно не определить стартовый код.

Далее стоит размер буфера, необходимого для передачи с переменной скоростью. Это 18-битное целое число vbv_buffer_size, младшие 10 бит которого относятся к vbv_buffer_size_value, а старшие 8 бит – к vbv_buffer_size_extension. Размер буфера определяется как

B = 16 * 1024 * vbv_buffer_size.

Часть значения vbv_buffer_size может быть использовано для записи дополнительной информации.

Флаг constrained_parameters_flag оставлен для совместимости с ISO/IEC 11172-2 и равен 0.

После этого идут параметры матрицы квантования load_intra_quantiser_matrix, intra_quantiser_matrix, load_non_intra_quantiser_ matrix, non_intra_quantiser_matrix, описываемые позднее. На этом заголовок последовательности заканчивается.

Дополнительные и пользовательские данные

Строка бит 000001B5 показывает, что в битовом потоке имеются дополнения по сравнению со стандартом ISO/IEC 11172-2.

Строка бит 000001B2 означает начало пользовательских данных, окончание которых будет определяться наличием стартового кода.

Пользовательские данные – произвольное число произвольных байтов. Единственным ограничением является запрет на серию из 23 нулей (так как это – стартовый код).