Loading lib_rend/ivas_reverb_fft_filter_fx.c +3 −0 Original line number Diff line number Diff line Loading @@ -232,6 +232,9 @@ void ivas_reverb_t2f_f2t_ClearHistory( move32(); } t2f_f2t->prev_shift = 31; move16(); return; } /*-----------------------------------------------------------------------------------------* Loading lib_rend/ivas_reverb_fx.c +24 −2 Original line number Diff line number Diff line Loading @@ -1824,6 +1824,7 @@ static void reverb_block_fx( Word32 pTemp_fx[INNER_BLK_SIZE]; Word32 *ppOutput_fx[IVAS_REV_MAX_NR_BRANCHES]; Word32 Output_fx[IVAS_REV_MAX_NR_BRANCHES][INNER_BLK_SIZE]; Word16 shift; move16(); move16(); move16(); Loading Loading @@ -1894,6 +1895,27 @@ static void reverb_block_fx( } } shift = s_min( L_norm_arr( pOut0_fx, hReverb->fft_filter_ols.block_size ), L_norm_arr( pOut1_fx, hReverb->fft_filter_ols.block_size ) ); IF( LT_16( shift, hReverb->fft_filter_ols.prev_shift ) ) { scale_sig32( pOut0_fx, hReverb->fft_filter_ols.block_size, shift ); scale_sig32( pOut1_fx, hReverb->fft_filter_ols.block_size, shift ); scale_sig32( hReverb->fft_filter_ols.fft_history_L_fx, hReverb->fft_filter_ols.hist_size, sub( shift, hReverb->fft_filter_ols.prev_shift ) ); scale_sig32( hReverb->fft_filter_ols.fft_history_R_fx, hReverb->fft_filter_ols.hist_size, sub( shift, hReverb->fft_filter_ols.prev_shift ) ); hReverb->fft_filter_ols.prev_shift = shift; move16(); } ELSE { scale_sig32( pOut0_fx, hReverb->fft_filter_ols.block_size, hReverb->fft_filter_ols.prev_shift ); scale_sig32( pOut1_fx, hReverb->fft_filter_ols.block_size, hReverb->fft_filter_ols.prev_shift ); shift = hReverb->fft_filter_ols.prev_shift; move16(); } Word16 r_shift; r_shift = add( find_guarded_bits_fx( hReverb->fft_filter_ols.fft_size ), 1 ); // Applying guard bits for the DoRTFT inside the post_fft_filter function Loading @@ -1913,9 +1935,9 @@ static void reverb_block_fx( FOR( k = 0; k < hReverb->fft_filter_ols.block_size; k++ ) { pOut0_fx[k] = (Word32) L_shl( pOut0_fx[k], 1 ); pOut0_fx[k] = (Word32) L_shl( pOut0_fx[k], sub( 1, shift ) ); move32(); pOut1_fx[k] = (Word32) L_shl( pOut1_fx[k], 1 ); pOut1_fx[k] = (Word32) L_shl( pOut1_fx[k], sub( 1, shift ) ); move32(); } Loading lib_rend/ivas_stat_rend.h +1 −0 Original line number Diff line number Diff line Loading @@ -895,6 +895,7 @@ typedef struct ivas_reverb_t2f_f2t_t Word32 fft_history_L_fx[RV_FILTER_MAX_HISTORY]; // float fft_history_R[RV_FILTER_MAX_HISTORY]; Word32 fft_history_R_fx[RV_FILTER_MAX_HISTORY]; Word16 prev_shift; } ivas_reverb_t2f_f2t_t; /* FFT filter with its frequency response coefficients */ Loading Loading
lib_rend/ivas_reverb_fft_filter_fx.c +3 −0 Original line number Diff line number Diff line Loading @@ -232,6 +232,9 @@ void ivas_reverb_t2f_f2t_ClearHistory( move32(); } t2f_f2t->prev_shift = 31; move16(); return; } /*-----------------------------------------------------------------------------------------* Loading
lib_rend/ivas_reverb_fx.c +24 −2 Original line number Diff line number Diff line Loading @@ -1824,6 +1824,7 @@ static void reverb_block_fx( Word32 pTemp_fx[INNER_BLK_SIZE]; Word32 *ppOutput_fx[IVAS_REV_MAX_NR_BRANCHES]; Word32 Output_fx[IVAS_REV_MAX_NR_BRANCHES][INNER_BLK_SIZE]; Word16 shift; move16(); move16(); move16(); Loading Loading @@ -1894,6 +1895,27 @@ static void reverb_block_fx( } } shift = s_min( L_norm_arr( pOut0_fx, hReverb->fft_filter_ols.block_size ), L_norm_arr( pOut1_fx, hReverb->fft_filter_ols.block_size ) ); IF( LT_16( shift, hReverb->fft_filter_ols.prev_shift ) ) { scale_sig32( pOut0_fx, hReverb->fft_filter_ols.block_size, shift ); scale_sig32( pOut1_fx, hReverb->fft_filter_ols.block_size, shift ); scale_sig32( hReverb->fft_filter_ols.fft_history_L_fx, hReverb->fft_filter_ols.hist_size, sub( shift, hReverb->fft_filter_ols.prev_shift ) ); scale_sig32( hReverb->fft_filter_ols.fft_history_R_fx, hReverb->fft_filter_ols.hist_size, sub( shift, hReverb->fft_filter_ols.prev_shift ) ); hReverb->fft_filter_ols.prev_shift = shift; move16(); } ELSE { scale_sig32( pOut0_fx, hReverb->fft_filter_ols.block_size, hReverb->fft_filter_ols.prev_shift ); scale_sig32( pOut1_fx, hReverb->fft_filter_ols.block_size, hReverb->fft_filter_ols.prev_shift ); shift = hReverb->fft_filter_ols.prev_shift; move16(); } Word16 r_shift; r_shift = add( find_guarded_bits_fx( hReverb->fft_filter_ols.fft_size ), 1 ); // Applying guard bits for the DoRTFT inside the post_fft_filter function Loading @@ -1913,9 +1935,9 @@ static void reverb_block_fx( FOR( k = 0; k < hReverb->fft_filter_ols.block_size; k++ ) { pOut0_fx[k] = (Word32) L_shl( pOut0_fx[k], 1 ); pOut0_fx[k] = (Word32) L_shl( pOut0_fx[k], sub( 1, shift ) ); move32(); pOut1_fx[k] = (Word32) L_shl( pOut1_fx[k], 1 ); pOut1_fx[k] = (Word32) L_shl( pOut1_fx[k], sub( 1, shift ) ); move32(); } Loading
lib_rend/ivas_stat_rend.h +1 −0 Original line number Diff line number Diff line Loading @@ -895,6 +895,7 @@ typedef struct ivas_reverb_t2f_f2t_t Word32 fft_history_L_fx[RV_FILTER_MAX_HISTORY]; // float fft_history_R[RV_FILTER_MAX_HISTORY]; Word32 fft_history_R_fx[RV_FILTER_MAX_HISTORY]; Word16 prev_shift; } ivas_reverb_t2f_f2t_t; /* FFT filter with its frequency response coefficients */ Loading