62
if(unsigned){
mod = lav + 1; off = 0;
}
else {
mod = 2*lav + 1; off = lav;
}
if (dim == 4) {
w = INT (idx / (mod*mod*mod)) - off; idx -= (w+off) * (mod*mod*mod) x = InT (idx / (mod*mod)) - off; idx -= (x+off) * (mod*mod)
У = INT (idx/mod) - off; idx -= (y+off) *mod z = idx - off;
}
else {
Y = INT (idx/mod) - off; idx -= (y+off) *mod z = idx - off;
}
Если кодовая книга Хаффмана представляет знаковые значения, декодирование n квантованных спектральных значений заканчивается после декодирования Хаффмана и преобразования индекса кодового слова в квантованные спектральные коэффициенты.
Если кодовая книга представляет беззнаковые значения, биты знака, связанные с ненулевыми коэффициентами, следуют сразу за кодовой комбинацией Хаффмана, ' 1' указывает на отрицательный коэффициент, а ' 0' — на положительный. Например, если кодовая комбинация Хаффмана из сборника кодов 7 hcod [7] [y] [z]
была обнаружена, то сразу после нее в потоке битов следует
pair_sign_bits, которое является полем переменной длины от 0 до 2 битов. Это может быть обнаружено в потоке битов как if (y! = 0)
if (one_sign_bit == 1)
У =-y;
if (z! = 0)
if (one_sign_bit == 1)
z = - z,
где one_sign_bit — следующий бит в потоке битов, а pair_sign_bits — объединение one_sign_bit полей.
Кодовая книга ESC является особым случаем. Она представляет значения от 0 до 16 включительно, однако кодирует фактически значения от 0 до 15, и значение 16 является флагом escapeflag, который сигнализирует присутствие hcod_esc_y или hcodescz, любой из которых будет обозначен как escape_sequence. Этот escape_sequence разрешает кодирование квантованных спектральных элементов с LAV> 15. Он состоит из escape_prefix из N единичных бит, escapeseparator из одного нулевого бита, escape_word из (N+4) битов, представляющих беззнаковое целое. Декодированное значение escape_sequence равно 2 Л (N+4) + escape_word. Требуемый квантованный спектральный коэффициент получен, когда знак, определяемый pair_sign_bits, применен к значению escape_sequence. Другими словами, escape_sequence 00000 декодируется как 16, escape_sequence 01111 как 31, escape_sequence 1000000 как 32, один из 1011111 как 63, и т. д. Следует учесть, что ограничения в 10.3 диктуют, что длина escape_sequence всегда меньше, чем 22 бита. Для escape кодовых слов Хаффмана порядок элементов данных является кодовой комбинацией Хаффмана, сопровождаемой от 0 до 2 битов знака, сопровождаемых от 0 до 2 escape-последовательностями.
Когда pulse_data_present равен 1 (используется импульсный escape), один или несколько квантованных коэффициентов были заменены в кодере коэффициентами с меньшими амплитудами. Число замененных коэффициентов обозначается number_pulse. При восстановлении квантованных спектральных коэффициентов x_quant эта замена компенсируется путем добавления или вычитания pulse_amp из ранее декодированных коэффициентов, индексы частоты которых обозначаются pulse_start_sfb и pulse_offset. Следует учесть, что импульсный escape-метод недопустим для блока, window_sequence которого EIGHT_SHORT_SEQUENCE. Процесс декодирования определяется в следующем псевдо с-коде: if (pulse_data_present) {
g = 0;
win = 0;
k = swb_offset [pulse_start_sfb]; for (j =