Commit 18eeb708 authored by Nicolas Roussin's avatar Nicolas Roussin
Browse files

Finalize optimization.

parent 32180c9b
Loading
Loading
Loading
Loading
Loading
+10 −17
Original line number Diff line number Diff line
@@ -68,8 +68,8 @@ void ivas_filters_init_fx(
            move32();
            move32();
#ifdef OPT_2239_IVAS_FILTER_PROCESS
            filter_state->num_q[IVAS_FILTER_STAGE_0][i] = Q30;
            filter_state->den_q[IVAS_FILTER_STAGE_0][i] = Q30;
            filter_state->num_shr[IVAS_FILTER_STAGE_0][i] = Q30 - Q31;
            filter_state->den_shr[IVAS_FILTER_STAGE_0][i] = Q30 - Q31;
            move16();
            move16();
#else
@@ -118,10 +118,10 @@ void ivas_filters_init_fx(
            move32();
            move32();
#ifdef OPT_2239_IVAS_FILTER_PROCESS
            filter_state->num_q[IVAS_FILTER_STAGE_0][i] = sub( 31, filt_coeff_e[i + 0 * IVAS_BIQUAD_FILT_LEN] );
            filter_state->den_q[IVAS_FILTER_STAGE_0][i] = sub( 31, filt_coeff_e[i + 1 * IVAS_BIQUAD_FILT_LEN] );
            filter_state->num_q[IVAS_FILTER_STAGE_1][i] = sub( 31, filt_coeff_e[i + 2 * IVAS_BIQUAD_FILT_LEN] );
            filter_state->den_q[IVAS_FILTER_STAGE_1][i] = sub( 31, filt_coeff_e[i + 3 * IVAS_BIQUAD_FILT_LEN] );
            filter_state->num_shr[IVAS_FILTER_STAGE_0][i] = sub( sub( 31, filt_coeff_e[i + 0 * IVAS_BIQUAD_FILT_LEN] ), Q31 );
            filter_state->den_shr[IVAS_FILTER_STAGE_0][i] = sub( sub( 31, filt_coeff_e[i + 1 * IVAS_BIQUAD_FILT_LEN] ), Q31 );
            filter_state->num_shr[IVAS_FILTER_STAGE_1][i] = sub( sub( 31, filt_coeff_e[i + 2 * IVAS_BIQUAD_FILT_LEN] ), Q31 );
            filter_state->den_shr[IVAS_FILTER_STAGE_1][i] = sub( sub( 31, filt_coeff_e[i + 3 * IVAS_BIQUAD_FILT_LEN] ), Q31 );
            move16();
            move16();
            move16();
@@ -222,23 +222,16 @@ static Word64 ivas_iir_2_filter_fx(
    const Word64 in )
{
    Word64 tmp_prod, tmp, out;
    Word16 j, 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 );
    Word16 j;

    tmp_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][0] ), filter_state->num_shr[stage][0] );
    out = W_add( filter_state->state_fx[stage][0], tmp_prod );

    FOR( j = 1; j < filter_state->filt_len; j++ )
    {
        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_prod = W_shr( Mpy_64_32( in, filter_state->num_fx[stage][j] ), filter_state->num_shr[stage][j] );
        tmp = W_add( filter_state->state_fx[stage][j], tmp_prod );

        shift = sub( filter_state->den_q[stage][j], 31 );
        tmp_prod = W_shr( Mpy_64_32( out, filter_state->den_fx[stage][j] ), shift );

        tmp_prod = W_shr( Mpy_64_32( out, filter_state->den_fx[stage][j] ), filter_state->den_shr[stage][j] );
        filter_state->state_fx[stage][j - 1] = W_sub( tmp, tmp_prod );
        move32();
    }
+2 −2
Original line number Diff line number Diff line
@@ -658,8 +658,8 @@ typedef struct ivas_filters_process_state_t
    Word32 den_fx[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];
#ifdef OPT_2239_IVAS_FILTER_PROCESS
    Word64 state_fx[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];
    Word16 num_q[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];
    Word16 den_q[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];
    Word16 num_shr[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];
    Word16 den_shr[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];
#else
    Word32 state_fx[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];
    Word16 num_e[IVAS_FILTER_MAX_STAGES][IVAS_BIQUAD_FILT_LEN];