ГОСТ Р 53556.11—2014
Кроме того используется различная схема разделения на подблоки. Если флаг sb_part в заголовке
файла устанавливается, каждый блок может быть разделен на 1, 2. 4, или 8 подблоков, где фактиче
ское число обозначается 2-битовым полем ec_sub в заголовке блока. Если sb_part не устанавливается,
каждый блок может быть разделен только на 1 или 4 подблока, и фактическое число указывается 1-би
товым полем ac_sub.
6.6.2.1 Дополнительные параметры
В дополнение к параметру кода s (используется для создания кодов Райса), кодер/декодер BGMC
опирается на следующие величины:
Число самых младших значащих битов (LSBs) к остатков, которые будут переданы непосред
ственно:
Г0,если s £ В
к =\
[s - В. если s> В.
где s является параметром Райса и В является параметром, зависящим от размера подблока N:
В = (Гlog2N I - 3) » 1,
где 0 s В £ 5 (значения за пределами границ отсекаются до границ). Число отсутствующих (в таблицах
частот доступа) битов delta:
delta = 5 -s + к.
Индекс таблицы частот sx используется для того, чтобы кодировать/декодировать MSBs.
Параметр sx передается в дополнение к s для каждого подблока, где ’полный’ параметр BGMC
может быть представлен как S = 16 s + sx. Подобно режиму кодирования Райса первый параметр пере
дается непосредственно, в то время как для последующих параметров передаются только закодиро
ванные различия (таблица 37).
Таблица 37 — Кодирование BGMCкодирует параметры S(i]= 16- s[i]+ sx[/]
Параметр кода |
j
* индекс подблока)
Различно
Параметр кода Раиса ислользуемыи для различий
S[I]0 >0)
sm-sp-ч
2
6.6.2.2 Разделение остаточных значений на MSB. LSB и хвостовые части
Процесс получения отсеченных и с удаленным знаком значений MSB. LSB или хвостовых частей,
соответствующих остаточным выборкам (res [ij), может быть описан следующим образом:
for (i = 1; / <= N: /♦+)
{
long msbi = resfi] »
k;// remove Isbs
if (msbi >= max_msb[sx][delta]) {//positive tail
msb{l] = tail_code[sx][delta];
tailfi] = resfi] - (max_msb[sx)[dolta] « k);
} else
if (msbi <= -max_msb[sx)[dolta]) {//negative tail
msb[IJ = tail_codo[sx][delta]:
tailfi] = resfi] + ((max_msb[sx][delta] -1) « k):
} else {//normal msb range
if (msbi >= 0) msbi = msbi *2;
//remove sign
elsemsbi = -msbi *2-1;
if (msbi >= tail_code[sx][delta])
msbi ♦+;
msbfi] = msbi;
Isbfi] = resfi] & |Y1<<k)-1):
//skip tail code
// msb and Isb values
// to encode
}
}
41