Commit 012b3385 authored by Dominik Weckbecker's avatar Dominik Weckbecker 💬
Browse files

fix calculation of cy_auto_dir_smooth and cy_cross_dir_smooth

parent 2685f3ae
Loading
Loading
Loading
Loading
+26 −14
Original line number Diff line number Diff line
@@ -6703,7 +6703,11 @@ static void computeTargetPSDs_direct_fx(

    /* segment auxiliary buffer */
    Word32 direct_power[CLDFB_NO_CHANNELS_MAX];   /* size: num_freq_bands. */
#ifdef FIX_867
    Word32 aux_buffer_res; /* size: num_freq_bands. */
#else
	Word32 aux_buffer_res[CLDFB_NO_CHANNELS_MAX]; /* size: num_freq_bands. */
#endif

    /* estimate direct and diffuse power */
    v_mult_fixed( direct_power_factor, reference_power, direct_power, num_freq_bands ); /* Q31 + Q(q_reference_power) - Q31 = Q(q_reference_power) */
@@ -6722,20 +6726,28 @@ static void computeTargetPSDs_direct_fx(
        {
            Word16 common1_q = s_min( q_cy_auto_dir_smooth[cur_idx + l], q_reference_power[l] );
            Word16 common2_q = s_min( q_cy_cross_dir_smooth[cur_idx + l], q_reference_power[l] );
            v_mult_fixed( direct_power, &direct_responses_square[cur_idx + l], aux_buffer_res, 1 );                       /* Q31 + Q(q_reference_power) - Q31 = Q(q_reference_power) */
            scale_sig32( &aux_buffer_res[l], 1, sub( common1_q, q_reference_power[l] ) );                                 /* Q(common1_q) */
            scale_sig32( &cy_auto_dir_smooth[cur_idx + l], 1, sub( common1_q, q_cy_auto_dir_smooth[cur_idx + l] ) );      /* Q(common1_q) */
            v_add_fixed( &cy_auto_dir_smooth[cur_idx + l], &aux_buffer_res[l], &cy_auto_dir_smooth[cur_idx + l], 1, Q1 ); /* Q(common1_q) - Q1 */
            
            v_mult_fixed( direct_power, &direct_responses[cur_idx + l], &aux_buffer_res[l], 1 );                            /* Q31 + Q(q_reference_power) - Q31 = Q(q_reference_power) */
            scale_sig32( &aux_buffer_res[l], 1, sub( common2_q, q_reference_power[l] ) );                                   /* Q(common2_q) */
            scale_sig32( &cy_cross_dir_smooth[cur_idx + l], 1, sub( common2_q, q_cy_cross_dir_smooth[cur_idx + l] ) );      /* Q(common2_q) */
            v_add_fixed( &cy_cross_dir_smooth[cur_idx + l], &aux_buffer_res[l], &cy_cross_dir_smooth[cur_idx + l], 1, Q1 ); /* Q(common2_q) - Q1 */
			aux_buffer_res = Mpy_32_32( direct_power[l], direct_responses_square[cur_idx + l] );    /* Q31 + Q(q_reference_power) - Q31 = Q(q_reference_power) */
            
            /* Q adjustment */
            q_cy_auto_dir_smooth[cur_idx + l] = sub( common1_q, Q1 );
			aux_buffer_res = L_shl( aux_buffer_res, sub( common1_q, q_reference_power[l] ) );                                                     /* Q(common1_q) */
			cy_auto_dir_smooth[cur_idx + l] = L_shl( cy_auto_dir_smooth[cur_idx + l], sub( common1_q, q_cy_auto_dir_smooth[cur_idx + l] ) );      /* Q(common1_q) */

			cy_auto_dir_smooth[cur_idx + l] = L_add( L_shr(cy_auto_dir_smooth[cur_idx + l],1), L_shr(aux_buffer_res,1) );                         /* Q(common1_q) - Q1 */

			aux_buffer_res = Mpy_32_32(direct_power[l], direct_responses[cur_idx + l]);                                                           /* Q31 + Q(q_reference_power) - Q31 = Q(q_reference_power) */
			aux_buffer_res = L_shl( aux_buffer_res, sub( common2_q, q_reference_power[l] ) );                                                  /* Q(common2_q) */
			cy_cross_dir_smooth[cur_idx + l] = L_shl( cy_cross_dir_smooth[cur_idx + l], sub( common2_q, q_cy_cross_dir_smooth[cur_idx + l] ) );   /* Q(common2_q) */
            
			cy_cross_dir_smooth[cur_idx + l] = L_add( L_shr(cy_cross_dir_smooth[cur_idx + l],1), L_shr(aux_buffer_res,1) );                       /* Q(common2_q) - Q1 */

			Word16 q_tmp = norm_l(cy_auto_dir_smooth[cur_idx + l]);
			cy_auto_dir_smooth[cur_idx + l] = L_shl(cy_auto_dir_smooth[cur_idx + l], q_tmp);
			q_cy_auto_dir_smooth[cur_idx + l] = add(sub(common1_q, Q1), q_tmp);
            move16();
            q_cy_cross_dir_smooth[cur_idx + l] = sub( common2_q, Q1 );

			q_tmp = norm_l(cy_cross_dir_smooth[cur_idx + l]);
			cy_cross_dir_smooth[cur_idx + l] = L_shl(cy_cross_dir_smooth[cur_idx + l], q_tmp);
            q_cy_cross_dir_smooth[cur_idx + l] = add(sub( common2_q, Q1 ), q_tmp);
            move16();
        }

+23 −23

File changed.

Contains only whitespace changes.

+13 −13

File changed.

Contains only whitespace changes.