(по цифровому вещанию) Dvorkovich_V_Cifrovye_videoinformacionnye_sistemy
.pdfГлава14. Стандарты кодирования динамических изображений
где n > 0 — номер кадра, который будет удаляться из буфера; Bn — число битов в буфере, т. е. все биты, начиная с первого, следующего непосредственно за данными заголовков и поле стартовый_код_кадра и заканчивая последним битом данных кадра n; R — точное значение битового потока, а не округленное, передаваемое в заголовке видеопоследовательности.
Следующие четыре параметра использовались в стандарте MPEG-1 и сохранены для обеспечения совместимости потока.
–Целочисленный_вектор_движения_вперед (full_pel_forward_vector) и целочисленный_вектор_движения_назад (full_pel_backward_vector) — по 1 биту. Если они равны 1, то в MPEG-1 служат признаками передачи векторов движения с точностью до целого пиксела, в противном случае вектора движения передаются с точностью до полпиксела. Эти два параметра должны быть равны 0 в MPEG-2.
–Код_вектора_движения_вперед (forward_f_code) и код_вектора_движения_назад (backward_f_code) — по 3 бита, в MPEG-1 служат для передачи диапазона векторов движения. Эти коды должны быть равны 111 в двоичном формате в MPEG-2.
–Дополнительный_бит_кадра (extra_bit_picture) — 1 бит. Если он равен 0, то за ним не следует никаких дополнительных данных; в противном случае за ним могут следовать дополнительные данные кадра (extra_information_picture), которые могут использоваться в будущих расширениях стандарта.
Расширение заголовка кадра имеет следующую структуру:
расширение_заголовка_кадра() |
Количество битов |
{ |
|
стартовый_код_расширения |
32 |
код_идентификатора_расширения |
4 |
f_код[0][0] |
4 |
f_код[0][1] |
4 |
f_код[1][0] |
4 |
f_код[1][1] |
4 |
точность_нулевого_коэффициента_I |
2 |
структура_изображения |
2 |
верхнее_поле_первым |
1 |
покадровое_предсказание_и_ДКП |
1 |
скрытые_векторы_движения |
1 |
код_шкалы_квантования |
1 |
формат_таблицы_кодов_I |
1 |
альтернативное_переупорядочение |
1 |
повтор_первого_поля |
1 |
цветность_420 |
1 |
кадр_с_прогрессивной_разверткой |
1 |
композитный_сигнал |
1 |
if (композитный_сигнал) { |
|
v_ось |
1 |
|
|
14.4. MPEG-2. Кодирование динамических изображений
расширение_заголовка_кадра()Количество битов
последовательность_полей |
3 |
поднесущая |
1 |
амплитуда_вспышки |
7 |
фаза_поднесущей |
8 |
}
следующий_стартовый_код()
}
В него входят следующие переменные.
–Стартовый_код_расширения (extension_start_code) — константа длиной 32 бита, равная 000001В5 в шестнадцатиричном формате.
–Код_идентификатора_расширения (extension_start_code_identifier) — константа длиной 4 бита, равная 1000 в двоичном формате, обозначающая расширение заголовка кадра.
–f_код[0][0] (f_code[0][0]), f_код[0][1] (f_code[0][1]), f_код[1][0] (f_code[1][0]), f_код[1][1] (f_code[1][1]) — 4 элемента по 4 бита (от 0001 до 1001 в двоичном формате, значение 0000 запрещено), обозначающих максимальный диапазон векторов движения вперед по горизонтали, вперед по вертикали, назад по горизонтали, назад по вертикали соответственно. Если данный элемент потока не используется (например, в I-кадрах не используются все 4 элемента, а в P-кадрах — последние два), то значение его должно быть установлено 1111 в двоичном формате.
–Точность_нулевого_коэффициента_I (intra_dc_precision) — 2 бита, обозначающих точность передачи нулевого коэффициента ДКП согласно табл. 14.14.
Таблица 14.14. Коды точности передачи нулевого коэффициента ДКП
Точность_нулевого_коэффициента_I |
Количество битов |
00 |
8 |
01 |
9 |
|
|
10 |
10 |
|
|
11 |
11 |
–Структура_изображения (picture_structure) — 2 бита, означающих, какова структура данного кадра или поля согласно табл. 14.15.
–Верхнее_поле_первым (top_field_first) — 1 бит, смысл которого зависит от значений полей структура_изображения, прогрессивная_ развертка и повтор_первого_поля.
Если прогрессивная_развертка = 0, то данный бит указывает, какое из двух полей для данного восстановленного кадра идет первым, верхнее или нижнее. Под верхним полем подразумевается первое поле под нижним — второе. Для поля данный бит должен быть равен 0. Значение данного бита в кадре рассматривается в пояснении параметра повтор_первого_поля (repeat_first_field).
Глава14. Стандарты кодирования динамических изображений
Таблица 14.15. Коды структуры кадра или поля
Структура_изображения |
Структура данного кадра или поля |
00 |
зарезервировано |
01 |
верхнее поле |
|
|
10 |
нижнее поле |
|
|
11 |
кадр |
–Покадровое_предсказание_и_ДКП (frame_pred_frame_dct) —
1 бит, обозначающий, какой тип ДКП и компенсации движения используется. Если он равен 1 (это должно быть так, если кадр_с_прогрессивной_ разверткой=1), то используется предсказание только относительно кадра. Если передается поле, он должен быть равен 0.
–Скрытые_вектора_движения (concealment_motion_vectors) —
1 бит, обозначающий, передаются ли скрытые векторы движения вместе с I-блоками данного кадра или поля.
–Код_шкалы_квантования (q_scale_type) – 1 бит, обозначающий, какая шкала квантования используется при кодировании данного кадра или поля.
–Формат_таблицы_кодов_I (intra_vlc_format) – 1 бит, обозначающий, какая таблица кодов переменной длины используется при кодировании I-блоков данного кадра или поля.
–Альтернативное_переупорядочение (alternate_scan) — 1 бит, обозначающий, какая из двух возможных матриц используется при переупорядочивании коэффициентов ДКП для данного кадра или поля.
–Повтор_первого_поля (repeat_first_field) — 1 бит, который применяется только при передаче кадра. При передаче полей он должен быть равен 0 и не влияет на процесс декодирования. Таким образом, если прогрессивная_развертка = 0 и кадр_с_прогрессивной_разверткой
= 0, он должен быть равен 0, и на выходе декодера будут два поля.
Если прогрессивная_развертка = 0 и кадр_с_прогрессивной_разверткой = 1, то когда данный бит равен 0, на выходе декодера будут два поля для данного восстановленного кадра — первое поле (верхнее или нижнее, в зависимости от значения верхнее_поле_первым), за которым следует второе; если же он равен 1, то на выходе декодера будут три поля: первое поле (верхнее или нижнее, в зависимости от значения верхнее_поле_первым), за которым следует второе, и затем повторенное первое.
Если прогрессивная_развертка=1, то когда данный бит равен 0, на выходе декодера будет один кадр; если же он равен 1, то на выходе декодера будут два или три кадра, в зависимости от значения верхнее_поле_первым.
–Цветность_420 (chroma_420_type) — 1 бит, который должен быть равен значению кадр_с_прогрессивной_разверткой для формата цветности 4 : 2 : 0. В противном случае он должен быть равен 0 и не влияет на процесс декодирования.
–Кадр_с_прогрессивной_разверткой (progressive_frame) — 1 бит, обозначающий являются ли два поля данного кадра независимыми, отстоящими друг от друга на интервал времени между полями (тогда он
14.4. MPEG-2. Кодирование динамических изображений
должен быть равен 0 и повтор_первого_поля должен быть равен 0), или они принадлежат одному и тому же кадру (тогда он должен быть равен 1, поле структура_изображения должно быть равно 11 (кадр) и поле покадровое_предсказание_и_ДКП должно быть равно 1). Этот параметр используется также в синтаксисе потока с пространственной масштабируемостью. Он применяется в базовом уровне потока и влияет на формирование предсказания для расширенного уровня.
–Композитный_сигнал (composite_display_flag) — 1 бит, который указывает, присутствуют ли в заголовке следующие биты, которые используются, если исходное изображение перед кодированием представляло собой композитный сигнал. В этом случае он должен быть равен 1, в противном случае он должен быть равен 0.
–v_ось (v_axis) — 1 бит, который используется, если исходное изображение перед кодированием представляло собой ТВ-сигнал системы PAL. Он должен быть равен 1 при положительном знаке и 0 — в других случаях.
–Последовательность_полей (field_sequence) — 3 бита, обозначающих номер поля в последовательности восьми полей в системе PAL или четырех полей в системе NTSC согласно табл. 14.16.
–Поднесущая (sub_carrier) — 1 бит, который должен быть равен 0, если взаимосвязь между частотами поднесущей и строчной правильна. В противном случае он должен быть равен 1.
–Амплитуда_вспышки (burst_amplitude) — 7 битов, определяющих амплитуду вспышки для систем PAL или NTSC. Амплитуда вспышки поднесущей квантуется согласно Рекомендации ITU-R 601, с опусканием старшего бита, поскольку при оценке амплитуды вспышки он всегда постоянен.
–Фаза_поднесущей (sub_carrier_phase) — 7 битов, обозначающих фазу опорной (reference) поднесущей в данных синхронизации поля по отношению к началу поля, согласно Рекомендации ITU-R 470, как указано в табл. 14.17.
Таблица 14.16. Коды номера поля
Последовательность_полей |
Кадр |
Поле |
000 |
1 |
1 |
001 |
1 |
2 |
010 |
2 |
3 |
|
|
|
011 |
2 |
4 |
|
|
|
100 |
3 |
5 |
101 |
3 |
6 |
|
|
|
110 |
4 |
7 |
|
|
|
111 |
4 |
8 |
Таблица 14.17. Коды фазы опорной поднесущей
Фаза_поднесущей |
Фаза |
0 |
([360◦/256] · 0) |
1 |
([360◦/256] · 1) |
. . . |
. . . |
|
|
255 |
([360◦/256] · 255) |
Глава14. Стандарты кодирования динамических изображений
Расширение матрицы квантования
В потоке MPEG-2 используются две матрицы квантования коэффициентов ДКП при формате цветности 4 : 2 : 0 и четыре — при формате цветности 4 : 2 : 2 и 4 : 4 : 4. При раскодировании заголовка видеопоследовательности все они устанавливаются согласно их значениям по умолчанию. Синтаксис потока предусматривает возможность загрузки матриц квантования, определяемых пользователем, либо в заголовке видеопоследовательности, либо в расширении матрицы квантования.
Расширение имеет следующую структуру:
расширение_матрицы_квантования |
Количество битов |
{ |
|
код_идентификатора_расширения |
4 |
загружаемая_матрица_I |
1 |
if (загружаемая_матрица_I) |
|
матрица_I [64] 8 · 64 |
|
загружаемая_матрица_PB |
1 |
if (загружаемая_матрица_PB) |
|
матрица_PB [64] 8 · 64 |
|
загружаемая_матрица_цветности_I |
1 |
if (загружаемая_матрица_цветности_I) |
|
матрица_цветности_I [64] 8 · 64 |
|
загружаемая_матрица_цветности_PB |
1 |
if (загружаемая_матрица_цветности_PB) |
|
матрица_цветности_PB[64] 8 · 64 |
|
следующий_стартовый_код() |
|
} |
|
|
|
|
|
В него входят следующие переменные.
–Код_идентификатора_расширения (extension_start_code_identifier) – константа длиной 4 бита, равная 0011 в двоичном формате, обозначающая расширение матрицы квантования.
–Загружаемая_матрица_I (load_intra_quantizer_matrix) — 1 бит. Если он равен 1, то за ним следуют 64 байта данных пользовательской матрицы квантования для I-блоков как яркости, так и цветности. Первый байт матрицы квантования всегда должен быть равен 8, так как он используется для кодирования нулевого коэффициента ДКП.
–Загружаемая_матрица_PB (load_non_intra_quantizer_matrix) —
1 бит. Если он равен 1, то за ним следуют 64 байта данных пользовательской матрицы квантования для P- и B-блоков как яркости, так и цветности.
–Загружаемая_матрица_цветности_I (load_chroma_intra_quantizer_matrix) — 1 бит. Если он равен 1, то за ним следуют 64 байта данных пользовательской матрицы квантования для I-блоков только цветности в форматах 4 : 2 : 2 и 4 : 4 : 4. Для формата цветности 4 : 2 : 0 он должен быть равен 0. Первый байт матрицы квантования должен быть равен 8.
–Загружаемая_матрица_цветности_PB (load_chroma_non_intra_quantizer_matrix) — 1 бит. Если он равен 1, то за ним следуют 64 байта данных пользовательской матрицы квантования для P- и B-блоков цветности.
14.4. MPEG-2. Кодирование динамических изображений
Расширение воспроизведения кадра
Информация в данном разделе также не влияет на процесс декодирования, но может использоваться устройствами воспроизведения для смещения воспроизводимого фрагмента изображения, задаваемого в расширении воспроизведения видеопоследовательности, от кадра к кадру. Расширение воспроизведения кадра не может присутствовать в потоке, если отсутствует расширение воспроизведения видеопоследовательности.
Раздел имеет следующую структуру:
расширение_воспроизведения_кадра |
Количество битов |
{ |
|
код_идентификатора_расширения |
4 |
for (i = 0; i < смещение_центра_изображения; |
|
i + +) { |
|
смещение_центра_изображения_по_гори- |
|
зонтали |
16 |
маркер |
1 |
смещение_центра_изображения_по_верти- |
|
кали |
16 |
маркер |
1 |
} |
|
следующий_стартовый_код()
}
В него входят следующие переменные.
–Код_идентификатора_расширения (extension_start_code_identifier) – константа длиной 4 бита, равная 0111 в двоичном формате, обозначающая расширение воспроизведения кадра.
–Смещение_центра_изображения_по_горизонтали (frame_centre_ horizontal_o set) и Смещение_центра_изображения_по_вертикали (frame_centre_vertical_o set) — по 16 битов, задающих соответственно горизонтальное и вертикальное смещение воспроизводимого фрагмента изображения в единицах 1/16 отсчета вправо и вниз от центра фрагмента.
Параметр смещение_центра_изображения (number_of_frame_center_o sets) равен 1, если прогрессивная_развертка=1 или структура_изображения=«поле», в противном случае он равен 3, еслиповтор_первого_поля= =1, или 2.
Слайсы, макроблоки и блоки
В некоторых сочетаниях профиля и уровня структура разбиения на слайсы задается жестко, и не допускается пропусков между ними.
В слайсе кодируются данные кадра следующим образом:
Глава14. Стандарты кодирования динамических изображений
данные_кадра()
{
do {
слайc()
} while (следующие_биты() == стартовый_код_слайса) следующий_стартовый_код()
}
слайc() |
Количество битов |
{ |
|
стартовый_код_слайса |
32 |
if (размер_по_вертикали > 2800) |
|
расширение_вертикального_положения_ |
|
слайса |
3 |
if («признак масштабируемого потока |
|
присутствует в потоке») |
|
if (масштабируемость == «разделение |
|
данных») |
|
признак_приоритета |
7 |
код_уровня_квантования |
5 |
if (следующие_биты() == «1») { |
|
флаг_I_слайса |
1 |
I_слайc |
1 |
зарезервированные_биты |
7 |
while (следующие_биты() == 1) { |
|
дополнительный_бит_слайса |
|
/*со значением 1*/ |
1 |
дополнительные_данные_слайса |
8 |
} |
|
}
дополнительный_бит_слайса /*со значением 0*/ 1 do {
макроблок()
}while (следующие_биты() != «000 0000 0000 0000 0000 0000»)
следующий_стартовый_код()
}
макроблок() |
Количество битов |
{
while (следующие_биты() == «0000 0001 000») escape_код_макроблока 11
код_приращения_адреса_макроблока 1–11 типы_макроблока()
if (макроблок_с_изменением_уровня_ квантования)
14.4. MPEG-2. Кодирование динамических изображений
|
код_уровня_квантования |
5 |
|
|
if (макроблок_с_движением_вперед || |
||
|
(макроблок_I && скрытые_векторы_ |
||
|
векторы_движения(0) |
|
|
|
if (макроблок_с_движением_назад) |
|
|
|
векторы_движения(1) |
|
|
|
if (макроблок_I && скрытые_векторы_ |
||
|
движения)) |
|
|
|
маркер |
1 |
|
|
if (макроблок_кодируется) |
|
|
|
кодируемые_блоки() |
|
|
|
for (i = 0; i < число_блоков; i++) { |
|
|
|
блок(i) |
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
||
|
|
||
типы_макроблока() |
Количество битов |
||
{ |
|
|
|
тип_макроблока |
|
1–9 |
|
инкремент_адреса_макроблока |
|
1–11 |
|
if ( (флаг_пространственно_временного_ |
|
|
|
веса == 1) && |
|
|
|
(код_флага_пространственно_временного_ |
|
|
|
веса != «00») ) { |
|
|
|
код_пространственно_временного_веса |
2 |
||
} |
|
|
|
if (макроблок_с_движением_вперед || |
|
|
|
макроблок_с_движением_назад) { |
|
|
|
if (структура_изображения == «кадр») { |
|
|
|
if (покадровое_предсказание_и_ДКП == 0) |
|
|
|
движение_по_кадрам |
2 |
||
} else { |
|
|
|
движение_по_полям |
2 |
||
} |
|
|
|
} |
|
|
|
if (декодировать_тип_ДКП) { |
|
|
|
тип_ДКП |
1 |
||
} |
|
|
|
} |
|
|
|
|
|
|
|
Глава14. Стандарты кодирования динамических изображений
векторы_движения() Количество битов
{
if (счетчик_векторов_движения == 1) {
|
|
if ( (формат_векторов_движения |
|
|
|
|
||
|
|
== «поле») && |
|
|
|
|
|
|
|
|
(признак_dmv != 1) ) |
|
|
|
|
|
|
|
|
формат_векторов_движения[0][s] |
1 |
|||||
|
|
движение_вертикального_поля(0,s) |
||||||
|
} else { |
|
|
|
|
|
||
|
|
селектор_вертикального_поля[0][s] |
1 |
|||||
|
|
вектор_движения(0,s) |
|
|
|
|
|
|
|
|
селектор_вертикального_поля[1][s] |
1 |
|||||
|
|
вектор_движения(1,s) |
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вектор_движения(r,s) |
Количество битов |
|
||||
{ |
|
|
|
|
|
|
||
|
|
код_движения[r][s][0] |
|
|
1–11 |
|||
|
|
if ( (f_код[s][0] != 1) && |
|
|
|
|
|
|
|
|
(код_движения[r][s][0] != 0) ) |
|
|
|
|
||
|
|
|
остаток_движения[r][s][0] |
|
1–8 |
|||
|
|
if (признак_dmv == 1) |
|
|
|
|
|
|
|
|
|
вектор_движения_dm[0] |
|
1–2 |
|||
|
|
код_движения[r][s][1] |
|
1-11 |
|
|
||
|
|
if ( (f_код[s][0] != 1) && |
|
|
|
|
|
|
|
|
(код_движения[r][s][1] != 0) ) |
|
|
|
|
||
|
|
|
остаток_движения[r][s][1] |
|
1–8 |
|||
|
|
if (признак_dmv == 1) |
|
|
|
|
|
|
|
|
|
вектор_движения_dm[1] |
|
1–2 |
|||
} |
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
кодируемые_блоки() |
|
Количество битов |
|
||||
{ |
|
|
|
|
|
|
|
|
|
|
кодируемые_блоки420 |
|
|
3–9 |
|||
|
|
if (формат_цветности == 4 : 2 : 2) |
|
|
|
|
||
|
|
кодируемые_блоки1 |
|
2 |
|
|||
|
|
if (формат_цветности == 4 : 4 : 4) |
|
|
|
|
||
|
|
кодируемые_блоки2 |
|
6 |
|
|||
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
блок() |
Количество битов |
||||
|
{ |
|
|
|
|
|
if (код_блока[i]) {
if (макроблок_I) { if (i < 4) {
14.4. MPEG-2. Кодирование динамических изображений
размер_нулевого_коэффициента_яркости |
2–9 |
if (размер_нулевого_коэффициента_ |
|
яркости != 0) |
|
разностный_сигнал |
1–11 |
} else { |
|
размер_нулевого_коэффициента_цветности 2-10 if (размер_нулевого_коэффициента
_цветности != 0) |
|
разностный_сигнал |
1–11 |
}
} else {
нулевой коэффициент ДКП
}
while (следующие_биты() != КОНЕЦ_БЛОКА) последующие коэффициенты ДКП
КОНЕЦ_БЛОКА
}
}
В уровень слайсов входят следующие переменные.
–Стартовый_код_слайса (slice_start_code) — 32 бита, из которых первые 24 бита — это константа, равная 000001 в 16-ричном формате, обозначающая начало слайса, а последние 8 битов — вертикальное_положение_ слайсa (slice_vertical_position) — обозначают положение слайса по вертикали, выраженное в макроблоках, в пределах от 1 до 175. Таким образом, первый слайс имеет адрес 01. Слайс не может выходить за пределы одного ряда макроблоков, но в одном ряду может располагаться несколько слайсов. Если число строк в изображении превышает 2800, то используется следующий параметр —
–Расширение_вертикального_положения_слайса (slice_vertical_ position_extension), 3 бита. Параметр вертикальное_положение_слайсa не может быть больше 128, и положение слайса — параметр номер_ряда (mb_row) вычисляется по следующей формуле:
if (размер_по_вертикали > 2800)
номер_ряда = (расширение_вертикального_положения_ слайса << 7) + вертикальное_положение_слайса - 1;
else
номер_ряда = вертикальное_положение_слайса - 1.
–Признак_приоритета (priority_breakpoint) — 7 битов, обозначающих место разделения данных в потоке с использованием разделения данных. В базовом потоке этот параметр должен быть равен 0.
–Код_уровня_квантования (quantizer_scale_code) — 5 битов, обозначающих коэффициент квантования из основной или альтернативной таблицы коэффициентов квантования, согласно параметру код_шкалы_квантования, который используется до тех пор, пока не встретится новый код_ уровня_квантования на уровне слайса или макроблока.