ГОСТ Р 53556.4—2013
end_sfb[g] = layer_end_sfbpayer):
};
’
- как определить availablejen [i], доступный максимальный размер потока битов /-го уровня. Если
арифметическое кодирование было инициализировано в начале уровня, из availablejen fi] нужно
вычесть 1. так какдополнительный 1бит требуется при завершении арифметического кодирования. Макси
мальная длина дополнительной информации нулевой полосы кодирования (max_cbandO_si_len)определя
ется как 11:
for(layer =0: layer <(topJayer+slayer_size): layer* *) {
layer_si_maxlen[layerj =0:
for (cband = layer_start_cband[layer): cband < layer_end_cband[layer); cband**) {
for (ch=0; ch <ncb: ch**) {
if (cband == 0)
layer_si_maxlen[layer] *= max_cband0_sijen;
else
layer_si_maxlen[layer] *= max_cband_sijen[cband_sijype[ch)]:
}
}
for (sfb = layer_start_sfb[layer]; sfb < layer_end_sfbpayer]; sfb++)
for (ch = 0; ch < nch: ch**)
layer_si maxlen[layer) *= max_sfb_si_len[ch] *
5;
}
for (layer =slayer_size: layer <= (topjayer * slayer_sizo); layer**) {
layer_bitrate = nch * ( (layer-slayer_size) * 1000 + 16000J.
layer_bit_offsetpayer) =layer_bitrato *BLOCK_SIZE_SAMPLESJN_FRAME:
layer_bit_offsetpayer] = (inl)(layer_bit_offsetpayer]/ SAMPLING_FREQUENCY/8) *8.
if(layer_bit_offsetpayer] >frame_length*8)
layer_bit_offsetpayer] =framejength*8.
}
for (layer = (topjayer +slayer_size -1>; layer >= slayer_size; layer- -) {
bit_offset =layer_bit_offsetpayer*‘\] - layer_si_maxlenpayer]
if ( bit_offset < !ayer_bit_offsetpayer])
layer_bit_offsotpayer] = bit_offsot
}
for (layer = slayer_size - 1; layer >= 0. slayer-)
layor_bit_offsetpayer] = layerJ>it_offsetpayer*1] - layer_si_maxlenpayer];
overflow_size = (headorjongth * 7) *8 - layer_bit_offset[0]:
layer_bit_offset[0) = (headerjength * 7) *8.
if(overflov/_size > 0 ){
for(layer= (topJayer*slayer_size-1): layer >= slayor_size: layer- -) {
layer_bit_size = layer_bit_offsetpayer*-\]- layer_bit_offsetpayer]:
layer_bit_size -= layer_si_maxlenpayer).
if (layer_bit_size >= overflow_size) {
layer_bit_size = overflow_size.
overflow_size =0;
;
else
ovorflow_size =overflow_size - layer_bit_size;
for (m = 1; m <= layer: m **)
layer_bit_offset[m] *= layer_bit_size;
if (overflow_size <= 0)
break;
}
}
else {
underflow_size = -overflow_size:
85