Loading lib_com/ivas_filters_fx.c +15 −22 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ void ivas_filters_init_fx( } #ifdef OPT_2239_IVAS_FILTER_PROCESS static void ivas_iir_2_filter_fx32( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, const Word16 length, const Word16 stage ); static void ivas_iir_2_filter_fx64( ivas_filters_process_state_t *filter_state, Word64 *pIn_Out_fx, const Word16 length, const Word16 stage ); static Word64 Mpy_64_32( Word64 W_var1, Word32 L_var2 ); Loading Loading @@ -215,38 +216,37 @@ static Word64 Mpy_64_32( Word64 W_var1, Word32 L_var2 ) * * Process call for filtering a signal *-----------------------------------------------------------------------------------------*/ #if 0 static void ivas_iir_2_filter_fx32( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, const Word16 length, const Word16 stage ); static void ivas_iir_2_filter_fx32( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, const Word16 length, const Word16 stage ) { Word64 tmp_prod, tmp; Word32 in, out; Word64 tmp_prod, tmp, in, out; Word16 i, j, shift; FOR( i = 0; i < length; i++ ) { in = pIn_Out_fx[i]; in = W_deposit32_h( pIn_Out_fx[i] ); move32(); shift = sub( filter_state->num_q[stage][0], 31 ); // (num_q + q + 1) - (q + 32) tmp_prod = W_shr( W_mult_32_32( filter_state->num_fx[stage][0], in ), shift ); shift = sub( filter_state->num_q[stage][0], 31 ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][0] ), shift ); pIn_Out_fx[i] = out = W_extract_h( W_add( filter_state->state64_fx[stage][0], tmp_prod ) ); out = W_add( filter_state->state64_fx[stage][0], tmp_prod ); pIn_Out_fx[i] = W_extract_h( out ); move32(); FOR( j = 1; j < filter_state->filt_len; j++ ) { shift = sub( filter_state->num_q[stage][j], 31 ); tmp_prod = W_shr( W_mult_32_32( filter_state->num_fx[stage][j], in ), shift ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][j] ), shift ); tmp = W_add( filter_state->state64_fx[stage][j], tmp_prod ); shift = sub( filter_state->den_q[stage][j], 31 ); tmp_prod = W_shr( W_mult_32_32( filter_state->den_fx[stage][j], out ), shift ); tmp_prod = W_shr( Mpy_64_32( out, filter_state->den_fx[stage][j] ), shift ); filter_state->state64_fx[stage][j - 1] = W_sub( tmp, tmp_prod ); move32(); Loading @@ -255,7 +255,6 @@ static void ivas_iir_2_filter_fx32( return; } #endif /*-----------------------------------------------------------------------------------------* * Function ivas_filter_process_fx32() Loading @@ -266,12 +265,8 @@ static void ivas_iir_2_filter_fx32( void ivas_filter_process_fx32( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering Q(q) */ const Word16 length, /* i : filter order */ Word16 q ) const Word16 length ) /* i : filter order */ { #if 1 ivas_filter_process_fx( filter_state, pIn_Out_fx, length, q ); #else SWITCH( filter_state->order ) { case IVAS_FILTER_ORDER_1: Loading @@ -284,7 +279,6 @@ void ivas_filter_process_fx32( default: BREAK; } #endif return; } Loading @@ -309,21 +303,20 @@ static void ivas_iir_2_filter_fx64( in = pIn_Out_fx[i]; move32(); shift = sub( filter_state->num_q[stage][0], 30 ); shift = sub( filter_state->num_q[stage][0], 31 ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][0] ), shift ); out = W_add( filter_state->state64_fx[stage][0], tmp_prod ); pIn_Out_fx[i] = W_shl( out, 1 ); pIn_Out_fx[i] = out = W_add( filter_state->state64_fx[stage][0], tmp_prod ); move32(); FOR( j = 1; j < filter_state->filt_len; j++ ) { shift = sub( filter_state->num_q[stage][j], 30 ); shift = sub( filter_state->num_q[stage][j], 31 ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][j] ), shift ); tmp = W_add( filter_state->state64_fx[stage][j], tmp_prod ); shift = sub( filter_state->den_q[stage][j], 30 ); shift = sub( filter_state->den_q[stage][j], 31 ); tmp_prod = W_shr( Mpy_64_32( out, filter_state->den_fx[stage][j] ), shift ); filter_state->state64_fx[stage][j - 1] = W_sub( tmp, tmp_prod ); Loading lib_com/ivas_prot_fx.h +1 −2 Original line number Diff line number Diff line Loading @@ -3807,8 +3807,7 @@ void ivas_lfe_enc_fx( void ivas_filter_process_fx32( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i : signal subject to filtering */ const Word16 length, /* i : filter order */ Word16 q const Word16 length /* i : filter order */ ); void ivas_filter_process_fx64( Loading lib_dec/ivas_lfe_dec_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -409,7 +409,7 @@ void ivas_lfe_dec_fx( { /* Low Pass Filter */ #ifdef OPT_2239_IVAS_FILTER_PROCESS ivas_filter_process_fx32( &hLFE->filter_state, output_lfe_ch, output_frame, q_out ); ivas_filter_process_fx32( &hLFE->filter_state, output_lfe_ch, output_frame ); #else ivas_filter_process_fx( &hLFE->filter_state, output_lfe_ch, output_frame, q_out ); #endif Loading lib_enc/ivas_lfe_enc_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -685,7 +685,7 @@ void ivas_lfe_lpf_enc_apply_fx( ) { #ifdef OPT_2239_IVAS_FILTER_PROCESS ivas_filter_process_fx32( hLfeLpf, data_lfe_ch, input_frame, (Word16) Q11 ); ivas_filter_process_fx32( hLfeLpf, data_lfe_ch, input_frame ); #else ivas_filter_process_fx( hLfeLpf, data_lfe_ch, input_frame, (Word16) Q11 ); #endif Loading Loading
lib_com/ivas_filters_fx.c +15 −22 Original line number Diff line number Diff line Loading @@ -183,6 +183,7 @@ void ivas_filters_init_fx( } #ifdef OPT_2239_IVAS_FILTER_PROCESS static void ivas_iir_2_filter_fx32( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, const Word16 length, const Word16 stage ); static void ivas_iir_2_filter_fx64( ivas_filters_process_state_t *filter_state, Word64 *pIn_Out_fx, const Word16 length, const Word16 stage ); static Word64 Mpy_64_32( Word64 W_var1, Word32 L_var2 ); Loading Loading @@ -215,38 +216,37 @@ static Word64 Mpy_64_32( Word64 W_var1, Word32 L_var2 ) * * Process call for filtering a signal *-----------------------------------------------------------------------------------------*/ #if 0 static void ivas_iir_2_filter_fx32( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, const Word16 length, const Word16 stage ); static void ivas_iir_2_filter_fx32( ivas_filters_process_state_t *filter_state, Word32 *pIn_Out_fx, const Word16 length, const Word16 stage ) { Word64 tmp_prod, tmp; Word32 in, out; Word64 tmp_prod, tmp, in, out; Word16 i, j, shift; FOR( i = 0; i < length; i++ ) { in = pIn_Out_fx[i]; in = W_deposit32_h( pIn_Out_fx[i] ); move32(); shift = sub( filter_state->num_q[stage][0], 31 ); // (num_q + q + 1) - (q + 32) tmp_prod = W_shr( W_mult_32_32( filter_state->num_fx[stage][0], in ), shift ); shift = sub( filter_state->num_q[stage][0], 31 ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][0] ), shift ); pIn_Out_fx[i] = out = W_extract_h( W_add( filter_state->state64_fx[stage][0], tmp_prod ) ); out = W_add( filter_state->state64_fx[stage][0], tmp_prod ); pIn_Out_fx[i] = W_extract_h( out ); move32(); FOR( j = 1; j < filter_state->filt_len; j++ ) { shift = sub( filter_state->num_q[stage][j], 31 ); tmp_prod = W_shr( W_mult_32_32( filter_state->num_fx[stage][j], in ), shift ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][j] ), shift ); tmp = W_add( filter_state->state64_fx[stage][j], tmp_prod ); shift = sub( filter_state->den_q[stage][j], 31 ); tmp_prod = W_shr( W_mult_32_32( filter_state->den_fx[stage][j], out ), shift ); tmp_prod = W_shr( Mpy_64_32( out, filter_state->den_fx[stage][j] ), shift ); filter_state->state64_fx[stage][j - 1] = W_sub( tmp, tmp_prod ); move32(); Loading @@ -255,7 +255,6 @@ static void ivas_iir_2_filter_fx32( return; } #endif /*-----------------------------------------------------------------------------------------* * Function ivas_filter_process_fx32() Loading @@ -266,12 +265,8 @@ static void ivas_iir_2_filter_fx32( void ivas_filter_process_fx32( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i/o: signal subject to filtering Q(q) */ const Word16 length, /* i : filter order */ Word16 q ) const Word16 length ) /* i : filter order */ { #if 1 ivas_filter_process_fx( filter_state, pIn_Out_fx, length, q ); #else SWITCH( filter_state->order ) { case IVAS_FILTER_ORDER_1: Loading @@ -284,7 +279,6 @@ void ivas_filter_process_fx32( default: BREAK; } #endif return; } Loading @@ -309,21 +303,20 @@ static void ivas_iir_2_filter_fx64( in = pIn_Out_fx[i]; move32(); shift = sub( filter_state->num_q[stage][0], 30 ); shift = sub( filter_state->num_q[stage][0], 31 ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][0] ), shift ); out = W_add( filter_state->state64_fx[stage][0], tmp_prod ); pIn_Out_fx[i] = W_shl( out, 1 ); pIn_Out_fx[i] = out = W_add( filter_state->state64_fx[stage][0], tmp_prod ); move32(); FOR( j = 1; j < filter_state->filt_len; j++ ) { shift = sub( filter_state->num_q[stage][j], 30 ); shift = sub( filter_state->num_q[stage][j], 31 ); tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][j] ), shift ); tmp = W_add( filter_state->state64_fx[stage][j], tmp_prod ); shift = sub( filter_state->den_q[stage][j], 30 ); shift = sub( filter_state->den_q[stage][j], 31 ); tmp_prod = W_shr( Mpy_64_32( out, filter_state->den_fx[stage][j] ), shift ); filter_state->state64_fx[stage][j - 1] = W_sub( tmp, tmp_prod ); Loading
lib_com/ivas_prot_fx.h +1 −2 Original line number Diff line number Diff line Loading @@ -3807,8 +3807,7 @@ void ivas_lfe_enc_fx( void ivas_filter_process_fx32( ivas_filters_process_state_t *filter_state, /* i/o: filter state handle */ Word32 *pIn_Out_fx, /* i : signal subject to filtering */ const Word16 length, /* i : filter order */ Word16 q const Word16 length /* i : filter order */ ); void ivas_filter_process_fx64( Loading
lib_dec/ivas_lfe_dec_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -409,7 +409,7 @@ void ivas_lfe_dec_fx( { /* Low Pass Filter */ #ifdef OPT_2239_IVAS_FILTER_PROCESS ivas_filter_process_fx32( &hLFE->filter_state, output_lfe_ch, output_frame, q_out ); ivas_filter_process_fx32( &hLFE->filter_state, output_lfe_ch, output_frame ); #else ivas_filter_process_fx( &hLFE->filter_state, output_lfe_ch, output_frame, q_out ); #endif Loading
lib_enc/ivas_lfe_enc_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -685,7 +685,7 @@ void ivas_lfe_lpf_enc_apply_fx( ) { #ifdef OPT_2239_IVAS_FILTER_PROCESS ivas_filter_process_fx32( hLfeLpf, data_lfe_ch, input_frame, (Word16) Q11 ); ivas_filter_process_fx32( hLfeLpf, data_lfe_ch, input_frame ); #else ivas_filter_process_fx( hLfeLpf, data_lfe_ch, input_frame, (Word16) Q11 ); #endif Loading