ГОСТ Р 53556.12-2014
Этот алгоритм использует тот факт, что буфер декодирования все еще содержит значимую ин
формацию для арифметического декодирования, даже если не остается битов для подачи в бу
фер декодирования. Процесс декодирования продолжается, пока существует некоторая неодно
значность в определении символа.
Следующий псевдокод иллюстрирует алгоритм обнаружения неоднозначности в модуле
арифметического декодирования. Переменная
num_dummy_bits
представляет число вызовов
функции
read_bits (I)
в процессе арифметического декодирования сразу после точки усечения.
int ambiguity_check(intfreq)
(
/* if there is no ambiguity, returns 1*/
/* otherwise, returns
0*/
upper
=
\«num_dummy_bits;
decisionVal
=
((high-low)*freq>>PRE_SHTfvalue+low-\:
if(decisionVal>upper
II
decisionVal<0) return
0;
else return
1;
/
Когда
num_dummy_bits
больше 0, выполняется
smart_deeoding_cbac_bpgc ()
или
smart_decoding_low_energy ().
Чтобы предотвратить ошибки знакового бита, спектральное зна
чение текущей линии спектра должно быть обнулено, когда может произойти неоднозначность
при декодировании знакового бита. Все индексные переменные в интеллектуальном процессе
декодирования должны быть перенесены из предыдущего процесса арифметического декоди
рования.
smart_decoding_cbac_bpgc()
I
/*
ВPGС/СВАС normal decoding with ambiguity detection
*/
while ((max_bp[gj[sfh]
-
cur_bp[gJ{sfbJ<LAZY_BP) && (cur_bplg}fsfl>] >= 0)){
for (;g<num_window_groups:g++)/
for (;sfb<num_sfb;sjb++){
if«cur_bp[gjfsfl>]>=0) <&&(lazy_bplgj{sfbj > ())){
width =swb_offsetlgjfsfh+\ J -swb_offset(g][sfl>J;
for (:win<window_group_len[gJ:win++}{
for (:bin<widrh:bin++}f
if (inter\>al[gj[winj{sfb][binj >
amp[gHwin][sfb][bin)
+
(l«cur_bplg](sfljJ)
{
freq
=
determineJ’requencyi):
26