ГОСТ Р 53556.11—2014
Декодер должен инвертировать возможную перестановку каналов (флаг chan_sort). присваивая
каждому каналу его исходную позицию, которая хранится в chan_pos Q.
6.1.6 Декодирование фреймов
Фрейм составляет высокоуровневую полезную нагрузку (frame_data). то есть основной блок
аудиоданных (см. в таблице 2 о синтаксисе и таблице 10 о семантике). Если используется переключе
ние блоков, каждый канал фрейма может быть подразделен на 32 блока. Иначе, блок состоит из всех
выборок канала фрейма.
6.1.7 Декодирование блоков
Структура block_data {) содержит информацию об одном блоке (то есть сегмент аудиоданных из
одного канала). Она определяет, является ли блок «нормальным» блоком (то есть содержащим зако
дированные аудиовыборки), постоянным блоком (все аудиовыборки являются одними и теми же) или
блоком тишины (все аудиовыборки являются нулем). Кроме того поле «joint_storeo» указывает, содер жит
ли блок разностный сигнал (правый канал минус левый). Либо левый, либо правый канал может быть
заменен этим разностным сигналом. Структура, в случае блочного переключения, также содержит
информацию когда длина блока может быть короче, чем длина фрейма.
Для «нормальных» блоков блочные данные включают:
- индексы кода.
- порядок прогнозирующего устройства К:
- квантованные и закодированные коэффициенты прогнозирующего устройства (или параметры
прогнозирующего устройства RLS-LMS в случае режима RLSLMS):
- параметры LTP в случае режима LTP:
- кодированные остаточные значения по Райсу или BGMC.
Если блок дополнительно подразделяется на подблоки для кодирования энтропии (обозначенный
как ec_sub), параметры кода s и sx передаются для каждого подблока.
В случае адаптивного порядка прогнозирующего устройства (adapt_ordor) указывается порядок
для блока (opt_ordor). Имеется также флаг (shiftJsbs) , определяющий есть ли у всех аудиовыборок в
текущем блоке некоторые LSB, которые являются перманентно нулевыми. В этом случае число пустых
LSB дается в другом поле (shift_pos). Это означает, что кодер сместил все значения выборок вправо на
shift_pos+1 позиций до выполнения прогноза. Таким образом декодер должен сместить выходные зна
чения выборок влево на shift_pos+1 позиций после того, как был применен инверсный фильтр прогноза.
Если процесс прогноза использует выборки из предыдущего блока, смещенная версия этих выборок
должна использоваться в качестве ввода как в фильтр прогноза, так и в инверсный фильтр прогноза
(то есть как в кодере, так и в декодере), даже если LSB но являются нулем в предыдущем блоке. Это
необходимо, чтобы выровнять амплитудный диапазон входных выборок прогнозирующего устройства с
выборками, которые будут спрогнозированы.
6.1.8 Чередование
Наиболее несжатые форматы аудиофайла хранят два канала стереосигнала как последователь
ность чередующихся выборок (L1. R’\, L2, R2, L3. R3, ... ). Для многоканальных данных с М каналами
каждый шаг выборки включает М чередующихся выборок. Так как кодер создает блоки выборок для
каждого канала, декодируемые выборки всех каналов вероятно придется снова чередовать прежде,
чем записать их в выходной аудиофайл.
6.2 Переключение блоков
Если включено block_switching. каждый канал фрейма может быть иерархически подразделен на
блоки вплоть до 32 блоков.
Произвольные комбинации блоков cNB= N. N12. N14. N18. N/16 и N/32 возможны в пределах фрей
ма до тех пор. пока каждый блок получается из подразделения вышестоящего блока двойной длины.
О фактическом разделении сообщается в дополнительном поле bs_info. длина которого зависит
от числа уровней переключения блоков (таблица 18). Фрейм длиной N должен быть разделен на 2MveI*
без остатка, чтобы получить целочисленные длины блока Nfl.
Таблица 18— Уровни переключения блоков
Максимальное количество уровней
Минимальное
NB
Количествово байтов для
bs_into
0
N
0
1
N12
1
19