Commit 0a2bad9b authored by Dominik Weckbecker's avatar Dominik Weckbecker 💬
Browse files

remove temporary Q array Q_temp_cy_cross_dir_smooth_fx

parent b98b50d2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -200,8 +200,8 @@
#define NONBE_FIX_1204_MDCT_STEREO_NOISE_EST_SCALING    /* FhG: fixes for decoder-side noise level estimation in MDCT-Stereo to prevent noise bursts in stereo switching */
/* ################## End DEVELOPMENT switches ######################### */

//#define FIX_867
//#define FIX_867_DBG
#define FIX_867
#define FIX_867_DBG

/* clang-format on */
#define NONBE_FIX_1010_STEREO_CNG_DIV_BY_ZERO
+4 −2
Original line number Diff line number Diff line
@@ -5068,12 +5068,14 @@ void ivas_dirac_dec_render_sf_fx(
        {
            IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth[l], Q26 ) )
            {
                hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx[l] = L_shl( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx[l], sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth[l] ) ); // Q26
                hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx[l] = 
					L_shl( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_fx[l], sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth[l] ) ); // Q26
                hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth[l] = Q26;
            }
            IF( NE_16( hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev[l], Q26 ) )
            {
                hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx[l] = L_shl( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx[l], sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev[l] ) ); // Q26
                hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx[l] = 
					L_shl( hDirACRend->h_output_synthesis_psd_state.cy_cross_dir_smooth_prev_fx[l], sub( Q26, hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev[l] ) ); // Q26
                hDirACRend->h_output_synthesis_psd_state.q_cy_cross_dir_smooth_prev[l] = Q26;
            }
        }
+50 −33
Original line number Diff line number Diff line
@@ -1609,20 +1609,15 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                           num_freq_bands ); /*h_dirac_output_synthesis_state->diffuse_power_factor_q+Q31-Q31->h_dirac_output_synthesis_state->diffuse_power_factor_q*/

            /*Direct gain*/

#ifndef FIX_867
            Word16 *Q_temp_cy_cross_dir_smooth_fx = (Word16 *) malloc( num_freq_bands * num_channels_dir * sizeof( Word16 ) );

            tmp16 = imult1616( num_freq_bands, num_channels_dir );
            FOR( Word16 kk = 0; kk < tmp16; kk++ )
            {
#ifdef FIX_867
                Q_temp_cy_cross_dir_smooth_fx[kk] = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[kk];
                move16();
#else
                Q_temp_cy_cross_dir_smooth_fx[kk] = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth;
                move16();
#endif
            }
#endif

            FOR( ch_idx = 0; ch_idx < s_min( 4, nchan_transport ); ch_idx++ )
            {
@@ -1702,13 +1697,12 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                                    L_shr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k],
                                           sub( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k], sub( 31, sqr_exp ) ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth-> (31-sqr_exp) */
                                move32();
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
								h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
                                move16();
                            }
                            ELSE
                            {
                                sqr = L_shr( sqr, sub( sub( 31, sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] ) ); /*( 31- sqr_exp )-> h_dirac_output_synthesis_state->q_cy_cross_dir_smooth*/
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k];
                                move16();
                            }
#else
@@ -1733,8 +1727,12 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                        {
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*31-sqr_exp*/
                            move32();
#ifdef FIX_867
							h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub(31, sqr_exp);
#else
                            Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
                            move16();
#endif
                        }
                    }
                    FOR( ; k < num_freq_bands; k++ )
@@ -1803,13 +1801,12 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                                h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] =
                                    L_shr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sub( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k], sub( 31, sqr_exp ) ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth->Q( 31- sqr_exp )*/
                                move32();
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
								h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
                                move16();
                            }
                            ELSE
                            {
                                sqr = L_shr( sqr, sub( sub( 31, sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] ) ); /*Q(31- sqr_exp)->h_dirac_output_synthesis_state->q_cy_cross_dir_smooth*/
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k];
                                move16();
                            }
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k]*/
@@ -1834,10 +1831,16 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                        }
                        ELSE
                        {
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q(31- sqr_exp)*/
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = 
								L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q(31- sqr_exp)*/
     						move32();
#ifdef FIX_867
						    h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub(31, sqr_exp);
							move16();
#else
                            Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
                            move16();
#endif
                        }
                    }
                }
@@ -1859,16 +1862,15 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
#ifdef FIX_867
                            IF( LT_16( sub( 31, sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] ) )
                            {
                                h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_shr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sub( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k], sub( 31, sqr_exp ) ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth->Q(31- sqr_exp)*/
                                h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = 
									L_shr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sub( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k], sub( 31, sqr_exp ) ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth->Q(31- sqr_exp)*/
                                move32();
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
                                h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
                                move16();
                            }
                            ELSE
                            {
                                sqr = L_shr( sqr, sub( sub( 31, sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] ) ); /*Q(31-sqr_exp)->h_dirac_output_synthesis_state->q_cy_cross_dir_smooth*/
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k];
                                move16();
                            }
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k]*/
                            move32();
@@ -1892,10 +1894,18 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                        }
                        ELSE
                        {
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q(31-sqr_exp)*/
#ifdef FIX_867
							h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sqr; /*Q(31-sqr_exp)*/
						    move32();
							h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub(31, sqr_exp);
#else
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = 
							    L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q(31-sqr_exp)*/
							move32();
							Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub(31, sqr_exp);
							move16();
#endif

                        }
                    }
                    FOR( ; k < num_freq_bands; k++ )
@@ -1910,16 +1920,15 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
#ifdef FIX_867
                            IF( LT_16( sub( 31, sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] ) )
                            {
                                h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_shr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sub( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k], sub( 31, sqr_exp ) ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, Q( 31- sqr_exp )*/
                                h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = 
									L_shr( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sub( h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k], sub( 31, sqr_exp ) ) ); /*h_dirac_output_synthesis_state->q_cy_cross_dir_smooth, Q( 31- sqr_exp )*/
                                move32();
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
								h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
                                move16();
                            }
                            ELSE
                            {
                                sqr = L_shr( sqr, sub( sub( 31, sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] ) ); /*Q( 31- sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth*/
                                Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k];
                                move16();
                            }
#else
                            IF( LT_16( sub( 31, sqr_exp ), h_dirac_output_synthesis_state->q_cy_cross_dir_smooth ) )
@@ -1936,39 +1945,47 @@ void ivas_dirac_dec_output_synthesis_process_slot_fx(
                                move16();
                            }
#endif
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k]*/
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = 
								L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); 
							    /*Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k]*/
                            move32();
                        }
                        ELSE
                        {
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q(31-sqr_exp)*/
                            h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] =
							    L_add( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k], sqr ); /*Q(31-sqr_exp)*/
                            move32();
#ifdef FIX_867
							h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[ch_idx * num_freq_bands + k] = sub(31, sqr_exp);
#else
                            Q_temp_cy_cross_dir_smooth_fx[ch_idx * num_freq_bands + k] = sub( 31, sqr_exp );
#endif
                            move16();
                        }
                    }
                }
            }

			tmp16 = imult1616(num_freq_bands, num_channels_dir);

#ifndef FIX_867
            Word16 temp = MAX_16; /*q0*/
            move16();
            tmp16 = imult1616( num_freq_bands, num_channels_dir );
            FOR( Word16 kk = 0; kk < tmp16; kk++ )
            {
                temp = s_min( Q_temp_cy_cross_dir_smooth_fx[kk], temp );
            }
#ifndef FIX_867
            h_dirac_output_synthesis_state->q_cy_cross_dir_smooth = temp;
#endif
            move16();
            FOR( Word16 kk = 0; kk < tmp16; kk++ )
            {
                h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk] = L_shl( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk], sub( temp, Q_temp_cy_cross_dir_smooth_fx[kk] ) ); /*Q_temp_cy_cross_dir_smooth_fx[kk]->temp*/
                h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk] = 
					L_shl( h_dirac_output_synthesis_state->cy_cross_dir_smooth_fx[kk], sub( temp, Q_temp_cy_cross_dir_smooth_fx[kk] ) ); /*Q_temp_cy_cross_dir_smooth_fx[kk]->temp*/
                move32();
#ifdef FIX_867
                h_dirac_output_synthesis_state->q_cy_cross_dir_smooth[kk] = temp;
#endif
            }
            free( Q_temp_cy_cross_dir_smooth_fx );
#endif
            /*Directional gain (panning)*/
            Word16 temp_q = sub( add( h_dirac_output_synthesis_state->direct_power_factor_q, h_dirac_output_synthesis_state->direct_responses_q ), 31 );
#ifdef FIX_867
+25 −6
Original line number Diff line number Diff line
@@ -2523,7 +2523,8 @@ void protoSignalComputation_shd_fx(

                *proto_direct_buffer_f_q = add( q_cldfb, min_q_shift );
#ifdef FIX_867
				reference_power_q[l] = sub(add(*proto_direct_buffer_f_q, *proto_direct_buffer_f_q), 31);
				reference_power_q[l] = add(sub(add(*proto_direct_buffer_f_q, *proto_direct_buffer_f_q), 31), norm_l(reference_power_fx[l]));
				reference_power_fx[l] = L_shl( reference_power_fx[l],  norm_l(reference_power_fx[l]) );
#else
                *reference_power_q = sub( add( *proto_direct_buffer_f_q, *proto_direct_buffer_f_q ), 31 );
#endif
@@ -2557,15 +2558,17 @@ void protoSignalComputation_shd_fx(
                    reference_power_fx[l] = L_add( reference_power_fx[l], L_shr( reference_power_fx[l + ( k + 1 ) * num_freq_bands], 1 ) ); // 2*(q_cldfb+min_q_shift)-31-1
                    move32();

#ifdef FIX_867
					reference_power_q[l] = sub(add(add(q_cldfb, min_q_shift), add(q_cldfb, min_q_shift)), 31);
					move16();
#endif
                }
            }
            *proto_direct_buffer_f_q = q_cldfb;
            move16();
#ifndef FIX_867
#ifdef FIX_867
			FOR(l = 0; l < num_freq_bands; l++)
			{
				reference_power_q[l] = add(sub(add(add(q_cldfb, min_q_shift), add(q_cldfb, min_q_shift)), 31), norm_l(reference_power_fx[l]) );
				reference_power_fx[l] = L_shl(reference_power_fx[l], norm_l(reference_power_fx[l]));
			}
#else
            *reference_power_q = sub( add( add( q_cldfb, min_q_shift ), add( q_cldfb, min_q_shift ) ), 31 );
            move16();
#endif
@@ -2602,6 +2605,22 @@ void protoSignalComputation_shd_fx(
        }
    }

#ifdef FIX_867_DBG
	FOR(l = 0; l < num_freq_bands; l++)
	{
		static FILE *f = 0;
		if (f == 0)
			f = fopen("reference_power_fx", "w");

		Word32 m = reference_power_fx[l];
		Word16 e = reference_power_q[l];
		float f1_m = (float)m;
		float f1_e = powf(2, e);
		float f1 = f1_m / f1_e;
		fprintf(f, "%d %d %d %f\n", l, m, e, f1);
	}
#endif

    return;
}
#else