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

Рассмотрим теперь процесс декодирования для DC-коэффициентов интра блоков. Они кодированы кодом переменной длины, записанным в числе dct_dc_size. Если оно не равно нулю, то далее идет код фиксированной длины dc_dct_differential длиной dct_dc_size бит. Таким образом, из закодированных данных получается разностное значение, которое складывается с предсказанным, в результате чего получается DC-коэффициент.

Если сс=0, то для определения dct_dc_size используется табл.П.2.39, иначе – табл.П.2.40.

Для каждой цветовой компоненты используется свой предсказатель (всего 3). К нему прибавляется разность, в результате чего получается коэффициент. После этого значение предсказателя становится равным значению коэффициента. Периодически значение предсказателя сбрасывается в значение 128,256,512 или 1024, в зависимости от того, сколько бит выделяется на кодирование (8,9,10,11). Сброс предсказателя происходит:

  • в начале слоя;
  • при декодировании не интра блока;
  • если пропущен макроблок.

Предсказатели обозначаются как dc_dct_pred[cc]. Значение DC-коэффициента QFS[0] может быть найдено следующим образом:

if ( dc_dct_size == 0 ) {

dct_diff = 0;

} else {

half_range = 2 ^ ( dc_dct_size - 1 );

if ( dc_dct_differential >= half_range )

dct_diff = dc_dct_differential;

else

dct_diff = (dc_dct_differential + 1) - (2 * half_range);

}

QFS[0] = dc_dct_pred[cc] + dct_diff;

dc_dct_pred[cc] = QFS[0]

Все остальные коэффициенты кроме DC-коэффициентов интра блоков кодированы с использованием табл.В-14, В-15, В-16 стандарта. Код переменной длины сначала декодируется на основе табл.В-14 и В-15. Декодированное значение может означать одно из трех:

- конец блока. В этом случае оставшиеся коэффициенты блока приравниваются нулю;

- «обычный» коэффициент, для которого декодируется значение серии и уровня, а затем знака. Серия коэффициентов приравнивается к нулю, а следующий за ней коэффициент – к уровню с учетом знака;

- коэффициент, кодированный ESC-последовательностью. В этом случае значения серии и уровня кодируются кодами фиксированной длины, как это описано ниже.

При кодировании DC-коэффициента не интраблока таблица В-14 модифицируется в одной строке для серии=0 и уровню +-1.

Смысл применения ESC-последовательностей состоит в следующем. Существует много сочетаний серий и уровня, для которых нет кода переменной длины. Для кодирования этих редко встречающихся комбинаций и применяются ESC-последовательности, описанные в табл.В-16. При этом 6 бит отводится на кодирование длины серии и 12 бит на кодирование значения с учетом знака.

Инверсное сканирование

Итак, в результате декодирования кода переменной длины мы получили для каждого блока 64 коэффициента, обозначаемых как QFS[n]. Этот одномерный массив необходимо преобразовать в двумерный QF[v][u]. Для этого определены два шаблона сканирования. Какой из них применен определяется значением параметра alternate_scan в дополнении к кодированию изображения.

Если этот флаг равен нулю, то сканирование следующее:

u

0

1

2

3

4

5

6

7

0

0

1

5

6

14

15

27

28

1

2

4

7

13

16

26

29

42

2

3

8

12

17

25

30

41

43

3

9

11

18

24

31

40

44

53

4

10

19

23

32

39

45

52

54

5

20

22

33

38

46

51

55

60

6

21

34

37

47

50

56

59

61

v

7

35

36

48

49

57

58

62

63