Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

(по цифровому вещанию) Dvorkovich_V_Cifrovye_videoinformacionnye_sistemy

.pdf
Скачиваний:
258
Добавлен:
15.03.2016
Размер:
23.26 Mб
Скачать

Глава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 битов, обозначающих коэффициент квантования из основной или альтернативной таблицы коэффициентов квантования, согласно параметру код_шкалы_квантования, который используется до тех пор, пока не встретится новый код_ уровня_квантования на уровне слайса или макроблока.