Loading lib_enc/ivas_cpe_enc_fx.c +27 −0 Original line number Diff line number Diff line Loading @@ -700,6 +700,30 @@ ivas_error ivas_cpe_enc_fx( hCPE->hStereoDft->Spd_R_smooth_fx_e = sub( hCPE->hStereoDft->Spd_R_smooth_fx_e, temp ); move16(); #ifdef NONBE_FIX_ISSUE_2206 /* Align Q values of the signals that need to be aligned in stereo_td_channel_extrapolate_fx() */ FOR( n = 0; n < CPE_CHANNELS; n++ ) { q_com = MAX_16; move16(); q_com = s_min( q_com, sub( add( L_norm_arr( sts[n]->input32_fx, input_frame ), sts[n]->q_inp32 ), 16 ) ); q_com = s_min( q_com, add( norm_arr( hCPE->input_mem_fx[n], hCPE->hStereoDft->dft_ovl ), hCPE->q_input_mem[n] ) ); q_com = s_min( q_com, sub( add( L_norm_arr( sts[n]->old_input_signal32_fx, input_frame ), sts[n]->q_old_inp32 ), 16 ) ); Copy_Scale_sig_32_16( sts[n]->input32_fx, sts[n]->input_fx, input_frame, sub( q_com, sts[n]->q_inp32 ) ); sts[n]->q_inp = q_com; move16(); Copy_Scale_sig_32_16( sts[n]->old_input_signal32_fx, sts[n]->old_input_signal_fx, input_frame, sub( q_com, sts[n]->q_old_inp32 ) ); sts[n]->q_old_inp = q_com; move16(); scale_sig( hCPE->input_mem_fx[n], hCPE->hStereoDft->dft_ovl, sub( q_com, hCPE->q_input_mem[n] ) ); hCPE->q_input_mem[n] = q_com; move16(); } #else q_com = MAX_16; move16(); FOR( n = 0; n < CPE_CHANNELS; n++ ) Loading Loading @@ -728,6 +752,7 @@ ivas_error ivas_cpe_enc_fx( hCPE->q_input_mem[n] = q_com; move16(); } #endif stereo_dft_hybrid_ITD_flag_fx( hConfigDft, input_Fs, hCPE->hStereoDft->hItd->hybrid_itd_max ); Loading Loading @@ -802,6 +827,7 @@ ivas_error ivas_cpe_enc_fx( move16(); } #ifndef NONBE_FIX_ISSUE_2206 q_min = sts[1]->q_old_inp; move16(); q_min = s_min( q_min, sts[1]->q_inp ); Loading Loading @@ -837,6 +863,7 @@ ivas_error ivas_cpe_enc_fx( move16(); move16(); move16(); #endif } stereo_td_itd_mdct_stereo_fx( hCPE, vad_flag_dtx, vad_hover_flag, input_frame ); Loading lib_enc/ivas_stereo_dft_enc_fx.c +82 −0 Original line number Diff line number Diff line Loading @@ -1038,7 +1038,64 @@ void stereo_dft_enc_analyze_fx( pDFT_R[( ( NFFT - 1 ) - i )] = 0; move32(); } #ifdef NONBE_FIX_ISSUE_2206 /* Align Q values of the signals that need to be aligned in stereo_td_channel_extrapolate_fx() */ FOR( n = 0; n < n_channels; n++ ) { Scale_sig( &mem[n][0], dft_ovl, sub( sts[n]->q_inp, q_input_mem[n] ) ); // Q(sts[n]->q_inp) q_input_mem[n] = sts[n]->q_inp; move16(); } Word16 shift_input0, shift_input1, shift_mem0, shift_mem1; shift_mem0 = s_max( 0, sub( q_input_mem[0], sts[0]->q_inp ) ); shift_mem1 = s_max( 0, sub( q_input_mem[1], sts[1]->q_inp ) ); shift_input0 = s_max( 0, sub( sts[0]->q_inp, q_input_mem[0] ) ); shift_input1 = s_max( 0, sub( sts[1]->q_inp, q_input_mem[1] ) ); /*overlapping parts*/ FOR( i = 0; i < dft_ovl; i++ ) { pDFT_L[( dft_zp + i )] = L_shr( L_mult( mem[0][i], pWin[i] ), shift_mem0 ); move32(); pDFT_L[( ( ( dft_zp + N ) + dft_ovl ) - 1 - i )] = L_shr( L_mult( input[0][offset + N + dft_ovl - 1 - i], pWin[i] ), shift_input0 ); move32(); pDFT_R[dft_zp + i] = L_shr( L_mult( mem[1][i], pWin[i] ), shift_mem1 ); move32(); pDFT_R[( ( dft_zp + N ) + dft_ovl ) - 1 - i] = L_shr( L_mult( input[1][offset + N + dft_ovl - 1 - i], pWin[i] ), shift_input1 ); move32(); } /*middle part*/ FOR( i = 0; i < N - dft_ovl; i++ ) { pDFT_L[dft_zp + dft_ovl + i] = L_shr( L_deposit_h( input[0][offset + dft_ovl + i] ), shift_input0 ); move32(); pDFT_R[dft_zp + dft_ovl + i] = L_shr( L_deposit_h( input[1][offset + dft_ovl + i] ), shift_input1 ); move32(); } DFT_e[0] = sub( 31 - 16, s_min( q_input_mem[0], sts[0]->q_inp ) ); move16(); DFT_e[1] = sub( 31 - 16, s_min( q_input_mem[1], sts[1]->q_inp ) ); move16(); Word16 q_shift, guarded_bits; guarded_bits = find_guarded_bits_fx( NFFT ); q_shift = sub( L_norm_arr( pDFT_L, NFFT ), guarded_bits ); scale_sig32( pDFT_L, NFFT, q_shift ); DFT_e[0] = sub( DFT_e[0], q_shift ); move16(); q_shift = sub( L_norm_arr( pDFT_R, NFFT ), guarded_bits ); scale_sig32( pDFT_R, NFFT, q_shift ); DFT_e[1] = sub( DFT_e[1], q_shift ); move16(); #else FOR( n = 0; n < n_channels; n++ ) { Scale_sig( &mem[n][0], dft_ovl, sub( sts[n]->q_inp, q_input_mem[n] ) ); // Q(sts[n]->q_inp) Loading Loading @@ -1085,10 +1142,34 @@ void stereo_dft_enc_analyze_fx( scale_sig32( pDFT_R, NFFT, q_shift ); DFT_e[1] = sub( DFT_e[1], q_shift ); move16(); #endif rfft_fx( pDFT_L, trigo_enc, NFFT, -1 ); rfft_fx( pDFT_R, trigo_enc, NFFT, -1 ); #ifdef NONBE_FIX_ISSUE_2206 test(); test(); IF( hStereoDft != NULL && hStereoDft->hConfig->hybrid_itd_flag && hStereoDft->hItd->td_itd[STEREO_DFT_OFFSET] ) { FOR( n = 0; n < n_channels; n++ ) { Copy_Scale_sig_nosat( hStereoDft->input_mem_itd_fx[n], input_mem[n], dft_ovl, sub( sts[n]->q_inp, hStereoDft->q_input_mem_itd[n] ) ); } } ELSE { FOR( n = 0; n < n_channels; n++ ) { Word16 tmp; tmp = norm_arr( input[n] + input_frame - dft_ovl, dft_ovl ); Copy_Scale_sig( input[n] + input_frame - dft_ovl, input_mem[n], dft_ovl, tmp ); q_input_mem[n] = add( sts[n]->q_inp, tmp ); move16(); } } #else /* update pointers to overlap memory */ FOR( n = 0; n < n_channels; n++ ) { Loading @@ -1113,6 +1194,7 @@ void stereo_dft_enc_analyze_fx( Copy( input[n] + input_frame - dft_ovl, input_mem[n], dft_ovl ); } } #endif pop_wmops(); return; Loading Loading
lib_enc/ivas_cpe_enc_fx.c +27 −0 Original line number Diff line number Diff line Loading @@ -700,6 +700,30 @@ ivas_error ivas_cpe_enc_fx( hCPE->hStereoDft->Spd_R_smooth_fx_e = sub( hCPE->hStereoDft->Spd_R_smooth_fx_e, temp ); move16(); #ifdef NONBE_FIX_ISSUE_2206 /* Align Q values of the signals that need to be aligned in stereo_td_channel_extrapolate_fx() */ FOR( n = 0; n < CPE_CHANNELS; n++ ) { q_com = MAX_16; move16(); q_com = s_min( q_com, sub( add( L_norm_arr( sts[n]->input32_fx, input_frame ), sts[n]->q_inp32 ), 16 ) ); q_com = s_min( q_com, add( norm_arr( hCPE->input_mem_fx[n], hCPE->hStereoDft->dft_ovl ), hCPE->q_input_mem[n] ) ); q_com = s_min( q_com, sub( add( L_norm_arr( sts[n]->old_input_signal32_fx, input_frame ), sts[n]->q_old_inp32 ), 16 ) ); Copy_Scale_sig_32_16( sts[n]->input32_fx, sts[n]->input_fx, input_frame, sub( q_com, sts[n]->q_inp32 ) ); sts[n]->q_inp = q_com; move16(); Copy_Scale_sig_32_16( sts[n]->old_input_signal32_fx, sts[n]->old_input_signal_fx, input_frame, sub( q_com, sts[n]->q_old_inp32 ) ); sts[n]->q_old_inp = q_com; move16(); scale_sig( hCPE->input_mem_fx[n], hCPE->hStereoDft->dft_ovl, sub( q_com, hCPE->q_input_mem[n] ) ); hCPE->q_input_mem[n] = q_com; move16(); } #else q_com = MAX_16; move16(); FOR( n = 0; n < CPE_CHANNELS; n++ ) Loading Loading @@ -728,6 +752,7 @@ ivas_error ivas_cpe_enc_fx( hCPE->q_input_mem[n] = q_com; move16(); } #endif stereo_dft_hybrid_ITD_flag_fx( hConfigDft, input_Fs, hCPE->hStereoDft->hItd->hybrid_itd_max ); Loading Loading @@ -802,6 +827,7 @@ ivas_error ivas_cpe_enc_fx( move16(); } #ifndef NONBE_FIX_ISSUE_2206 q_min = sts[1]->q_old_inp; move16(); q_min = s_min( q_min, sts[1]->q_inp ); Loading Loading @@ -837,6 +863,7 @@ ivas_error ivas_cpe_enc_fx( move16(); move16(); move16(); #endif } stereo_td_itd_mdct_stereo_fx( hCPE, vad_flag_dtx, vad_hover_flag, input_frame ); Loading
lib_enc/ivas_stereo_dft_enc_fx.c +82 −0 Original line number Diff line number Diff line Loading @@ -1038,7 +1038,64 @@ void stereo_dft_enc_analyze_fx( pDFT_R[( ( NFFT - 1 ) - i )] = 0; move32(); } #ifdef NONBE_FIX_ISSUE_2206 /* Align Q values of the signals that need to be aligned in stereo_td_channel_extrapolate_fx() */ FOR( n = 0; n < n_channels; n++ ) { Scale_sig( &mem[n][0], dft_ovl, sub( sts[n]->q_inp, q_input_mem[n] ) ); // Q(sts[n]->q_inp) q_input_mem[n] = sts[n]->q_inp; move16(); } Word16 shift_input0, shift_input1, shift_mem0, shift_mem1; shift_mem0 = s_max( 0, sub( q_input_mem[0], sts[0]->q_inp ) ); shift_mem1 = s_max( 0, sub( q_input_mem[1], sts[1]->q_inp ) ); shift_input0 = s_max( 0, sub( sts[0]->q_inp, q_input_mem[0] ) ); shift_input1 = s_max( 0, sub( sts[1]->q_inp, q_input_mem[1] ) ); /*overlapping parts*/ FOR( i = 0; i < dft_ovl; i++ ) { pDFT_L[( dft_zp + i )] = L_shr( L_mult( mem[0][i], pWin[i] ), shift_mem0 ); move32(); pDFT_L[( ( ( dft_zp + N ) + dft_ovl ) - 1 - i )] = L_shr( L_mult( input[0][offset + N + dft_ovl - 1 - i], pWin[i] ), shift_input0 ); move32(); pDFT_R[dft_zp + i] = L_shr( L_mult( mem[1][i], pWin[i] ), shift_mem1 ); move32(); pDFT_R[( ( dft_zp + N ) + dft_ovl ) - 1 - i] = L_shr( L_mult( input[1][offset + N + dft_ovl - 1 - i], pWin[i] ), shift_input1 ); move32(); } /*middle part*/ FOR( i = 0; i < N - dft_ovl; i++ ) { pDFT_L[dft_zp + dft_ovl + i] = L_shr( L_deposit_h( input[0][offset + dft_ovl + i] ), shift_input0 ); move32(); pDFT_R[dft_zp + dft_ovl + i] = L_shr( L_deposit_h( input[1][offset + dft_ovl + i] ), shift_input1 ); move32(); } DFT_e[0] = sub( 31 - 16, s_min( q_input_mem[0], sts[0]->q_inp ) ); move16(); DFT_e[1] = sub( 31 - 16, s_min( q_input_mem[1], sts[1]->q_inp ) ); move16(); Word16 q_shift, guarded_bits; guarded_bits = find_guarded_bits_fx( NFFT ); q_shift = sub( L_norm_arr( pDFT_L, NFFT ), guarded_bits ); scale_sig32( pDFT_L, NFFT, q_shift ); DFT_e[0] = sub( DFT_e[0], q_shift ); move16(); q_shift = sub( L_norm_arr( pDFT_R, NFFT ), guarded_bits ); scale_sig32( pDFT_R, NFFT, q_shift ); DFT_e[1] = sub( DFT_e[1], q_shift ); move16(); #else FOR( n = 0; n < n_channels; n++ ) { Scale_sig( &mem[n][0], dft_ovl, sub( sts[n]->q_inp, q_input_mem[n] ) ); // Q(sts[n]->q_inp) Loading Loading @@ -1085,10 +1142,34 @@ void stereo_dft_enc_analyze_fx( scale_sig32( pDFT_R, NFFT, q_shift ); DFT_e[1] = sub( DFT_e[1], q_shift ); move16(); #endif rfft_fx( pDFT_L, trigo_enc, NFFT, -1 ); rfft_fx( pDFT_R, trigo_enc, NFFT, -1 ); #ifdef NONBE_FIX_ISSUE_2206 test(); test(); IF( hStereoDft != NULL && hStereoDft->hConfig->hybrid_itd_flag && hStereoDft->hItd->td_itd[STEREO_DFT_OFFSET] ) { FOR( n = 0; n < n_channels; n++ ) { Copy_Scale_sig_nosat( hStereoDft->input_mem_itd_fx[n], input_mem[n], dft_ovl, sub( sts[n]->q_inp, hStereoDft->q_input_mem_itd[n] ) ); } } ELSE { FOR( n = 0; n < n_channels; n++ ) { Word16 tmp; tmp = norm_arr( input[n] + input_frame - dft_ovl, dft_ovl ); Copy_Scale_sig( input[n] + input_frame - dft_ovl, input_mem[n], dft_ovl, tmp ); q_input_mem[n] = add( sts[n]->q_inp, tmp ); move16(); } } #else /* update pointers to overlap memory */ FOR( n = 0; n < n_channels; n++ ) { Loading @@ -1113,6 +1194,7 @@ void stereo_dft_enc_analyze_fx( Copy( input[n] + input_frame - dft_ovl, input_mem[n], dft_ovl ); } } #endif pop_wmops(); return; Loading