Commit 32ac36e4 authored by emerit's avatar emerit
Browse files

reduce complexity

parent cc02ae9f
Loading
Loading
Loading
Loading
+45 −17
Original line number Diff line number Diff line
@@ -4219,7 +4219,7 @@ static ivas_error ivas_rend_crendConvolver(
#ifdef FIX_CREND_CHANGES
    Word32 *pFreq_buf2_re, *pFreq_buf2_im;
#endif
    const Word32 *pFreq_filt_re, *pFreq_filt_im;
    Word32 *pFreq_filt_re, *pFreq_filt_im;
    Word32 pOut[L_FRAME48k * 2];
    Word32 tmp_out_re[L_FRAME48k];
    Word32 tmp_out_im[L_FRAME48k];
@@ -4277,6 +4277,18 @@ static ivas_error ivas_rend_crendConvolver(
    }

    i = 0;
    if ( pCrend->hHrtfCrend->same_inv_diffuse_weight )
    {
        pFreq_buf_re = &hCrend->freq_buffer_re_diffuse_fx[0][offset_diffuse];
        pFreq_buf_im = &hCrend->freq_buffer_im_diffuse_fx[0][offset_diffuse];
    }
    else
    {
        pFreq_buf_re = &hCrend->freq_buffer_re_diffuse_fx[0][offset_diffuse];
        pFreq_buf_im = &hCrend->freq_buffer_im_diffuse_fx[0][offset_diffuse];
        pFreq_buf2_re = &hCrend->freq_buffer_re_diffuse_fx[1][offset_diffuse];
        pFreq_buf2_im = &hCrend->freq_buffer_im_diffuse_fx[1][offset_diffuse];
    }
    for ( idx_in = 0; idx_in < nchan_in; idx_in++ )
    {
        pIn = &pcm_in[idx_in][i_ts * subframe_length];
@@ -4286,39 +4298,32 @@ static ivas_error ivas_rend_crendConvolver(
            {
                if ( pCrend->hHrtfCrend->same_inv_diffuse_weight )
                {

                    pFreq_buf_re = &hCrend->freq_buffer_re_diffuse_fx[0][offset_diffuse];
                    pFreq_buf_im = &hCrend->freq_buffer_im_diffuse_fx[0][offset_diffuse];
                    pFreq_filt_re = &hCrend->freq_buffer_re_fx[i][offset];
                    pFreq_filt_im = &hCrend->freq_buffer_im_fx[i][offset];
                    for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ )
                    {
                        pFreq_buf_re[k] = L_add( L_shr( Mpy_32_16_r( pFreq_filt_re[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx ), pFreq_buf_re[k] );
                        pFreq_buf_im[k] = L_add( L_shr( Mpy_32_16_r( pFreq_filt_im[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx ), pFreq_buf_im[k] );
                        pFreq_buf_re[k] = L_add( Mpy_32_16_r( pFreq_filt_re[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pFreq_buf_re[k] );
                        pFreq_buf_im[k] = L_add( Mpy_32_16_r( pFreq_filt_im[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pFreq_buf_im[k] );
                    }
                }
                else
                {
                    pFreq_buf_re = &hCrend->freq_buffer_re_diffuse_fx[0][offset_diffuse];
                    pFreq_buf_im = &hCrend->freq_buffer_im_diffuse_fx[0][offset_diffuse];
                    pFreq_buf2_re = &hCrend->freq_buffer_re_diffuse_fx[1][offset_diffuse];
                    pFreq_buf2_im = &hCrend->freq_buffer_im_diffuse_fx[1][offset_diffuse];
                    pFreq_filt_re = &hCrend->freq_buffer_re_fx[i][offset];
                    pFreq_filt_im = &hCrend->freq_buffer_im_fx[i][offset];

                    for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ )
                    {
                        pFreq_buf_re[k] = L_add( L_shr( Mpy_32_16_r( pFreq_filt_re[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx ), pFreq_buf_re[k] );
                        pFreq_buf_im[k] = L_add( L_shr( Mpy_32_16_r( pFreq_filt_im[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx ), pFreq_buf_im[k] );
                        pFreq_buf2_re[k] = L_add( L_shr( Mpy_32_16_r( pFreq_filt_re[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[1][i] ), pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx ), pFreq_buf_re[k] );
                        pFreq_buf2_im[k] = L_add( L_shr( Mpy_32_16_r( pFreq_filt_im[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[1][i] ), pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx ), pFreq_buf_im[k] );
                        pFreq_buf_re[k] = L_add( Mpy_32_16_r( pFreq_filt_re[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pFreq_buf_re[k] );
                        pFreq_buf_im[k] = L_add( Mpy_32_16_r( pFreq_filt_im[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[0][i] ), pFreq_buf_im[k] );
                        pFreq_buf2_re[k] = L_add( Mpy_32_16_r( pFreq_filt_re[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[1][i] ), pFreq_buf_re[k] );
                        pFreq_buf2_im[k] = L_add( Mpy_32_16_r( pFreq_filt_im[k], pCrend->hHrtfCrend->inv_diffuse_weight_fx[1][i] ), pFreq_buf_im[k] );
                    }
                }
            }
            pFreq_buf_re = &hCrend->freq_buffer_re_fx[i][offset];
            pFreq_buf_im = &hCrend->freq_buffer_im_fx[i][offset];
            pFreq_filt_re = &hCrend->freq_buffer_re_fx[i][offset];
            pFreq_filt_im = &hCrend->freq_buffer_im_fx[i][offset];

            ivas_mdft_fx( pIn, pFreq_buf_re, pFreq_buf_im, subframe_length, subframe_length );
            ivas_mdft_fx( pIn, pFreq_filt_re, pFreq_filt_im, subframe_length, subframe_length );
#ifdef DEBUGGING
            dbgwrite_txt( pFreq_buf_re, subframe_length, "Fixed_pFreq_buf_re_mdft.txt", NULL );
            dbgwrite_txt( pFreq_buf_im, subframe_length, "Fixed_pFreq_buf_im_mdft.txt", NULL );
@@ -4327,6 +4332,29 @@ static ivas_error ivas_rend_crendConvolver(
        }
    }

    if ( pCrend->hHrtfCrend->num_iterations_diffuse[0] > 0 )
    {
        if ( pCrend->hHrtfCrend->same_inv_diffuse_weight )
        {
            for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ )
            {
                pFreq_buf_re[k] = L_shr( pFreq_buf_re[k], pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx );
                pFreq_buf_im[k] = L_shr( pFreq_buf_im[k], pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx );
            }
        }
        else
        {
            for ( k = 0; k < pCrend->hHrtfCrend->index_frequency_max_diffuse; k++ )
            {
                pFreq_buf_re[k] = L_shr( pFreq_buf_re[k], pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx );
                pFreq_buf_im[k] = L_shr( pFreq_buf_im[k], pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx );
                pFreq_buf2_re[k] = L_shr( pFreq_buf2_re[k], pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx );
                pFreq_buf2_im[k] = L_shr( pFreq_buf2_im[k], pCrend->hHrtfCrend->factor_Q_inv_diffuse_weight_fx );
            }
        }
    }


    for ( j = 0; j < nchan_out; j++ )
    {
        set_val_Word32( tmp_out_re, 0, subframe_length );