71
целью, как предполагается, равны 0, т. е. спаренный канал добавляется к спаренному целевому каналу с его масштабированием. Иначе спектральные коэффициенты масштабируются и добавляются к коэффициентам спаренных целевых каналов, используя соответствующий список значений gain_element.
Независимо коммутируемый CCE декодируется как зависимо коммутируемый CCE, имеющий только элементы common_gain_element. Однако получающийся масштабированный спектр преобразовывается обратно к его временному представлению и затем спаривается.
Следует учесть, что списки gain_element могут быть совместно использованы левым и правым каналами целевого элемента пары каналов. Это сигнализируется нулевыми cc_l и cc_r, как обозначено в таблице 60.
decode_coupling_channel ()
{
- декодирует спектральные коэффициенты встроенного single_channel_element в буфер
«cc_spectrum []».
/* Объединение спектральных коэффициентов по целевым каналам */ listindex = 0;
for (c = 0; c <num_coupled_elements+1; c ++) { if (! cc_target_is_cpe [c]) {
couple_channel (cc_spectrum, spectrum_m (cc_target_tag_select [c], cc_domain), list_index ++);
}
if (cc_target_is_cpe [c]) { if (! cc_l [c] &&! cc_r [c]) {
couple_channel (cc_spectrum,spectrum_l (cc_target_tag_select [c], cc_domain), list_index); couple_channel (cc_spectrum, spectrum_r (cc_target_tag_select [c], cc_domain), list_index ++);
}
if (cc_l [c]) {
couple_channel (cc_spectrum,
spectrum_l (cc_target_tag_select [c], cc_domain), list_index ++)); if (cc_r [c]) {
couple_channel (cc_spectrum, spectrum_r (cc_target_tag_select [c], cc_domain), list_index ++)); couple_channel (source_spectrum [ ], dest_spectrum [ ], gain_list_index)
{
idx = gain_list_index; a = 0;
cc_scale = cc_scale_table [gain_element_scale]; for (g = 0; g <num_window_groups; g + +) {
/* Декодировать спаренные элементы усиления для этой группы */ if (common_gain_element_present [idx]) { for (sfb = 0; sfb <max_sfb; sfb ++) { cc_sign [idx] [g] [sfb] = 1;
gain_element [idx] [g] [sfb] = common_gain_element [idx];} else {
for (sfb = 0; sfb <max_sfb; sfb ++) { if (sfb_cb [g] [sfb] == ZERO_HCB) continue;
if (gain_element_sign) {
cc_sign [idx] [g] [sfb] = 1 - 2* (dpcm_gain_element [idx] [g] [sfb] & 0x1); gain_element [idx] [g] [sfb] = a+ = (dpcm_gain_element [idx] [g] [sfb]>> 1);
} else {
cc_sign [idx] [g] [sfb] = 1;
gain_element [idx] [g] [sfb] = a+ = dpcm_gain_element [idx] [g] [sfb];}