Commit f45eced7 authored by Sandesh Venkatesh's avatar Sandesh Venkatesh Committed by Fabian Bauer
Browse files

LTV crash fixes, Q-documentation for lib_enc

parent 62e25ef0
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -239,7 +239,6 @@
    <ClCompile Include="..\lib_enc\ivas_stereo_dft_enc_itd.c" />
    <ClCompile Include="..\lib_enc\ivas_stereo_dft_td_itd.c" />
    <ClCompile Include="..\lib_enc\ivas_stereo_dmx_evs.c" />
    <ClCompile Include="..\lib_enc\analy_sp.c" />
    <ClCompile Include="..\lib_enc\arith_coder_enc.c" />
    <ClCompile Include="..\lib_enc\ari_enc.c" />
    <ClCompile Include="..\lib_enc\ari_hm_enc.c" />
@@ -273,13 +272,7 @@
    <ClCompile Include="..\lib_enc\enc_amr_wb.c" />
    <ClCompile Include="..\lib_enc\enc_gain.c" />
    <ClCompile Include="..\lib_enc\enc_gen_voic.c" />
    <ClCompile Include="..\lib_enc\enc_gen_voic_rf.c" />
    <ClCompile Include="..\lib_enc\enc_higher_acelp.c" />
    <ClCompile Include="..\lib_enc\enc_prm.c" />
    <ClCompile Include="..\lib_enc\enc_uv.c" />
    <ClCompile Include="..\lib_enc\energy.c" />
    <ClCompile Include="..\lib_enc\eval_pit_contr.c" />
    <ClCompile Include="..\lib_enc\evs_enc.c" />
    <ClCompile Include="..\lib_enc\fd_cng_enc.c" />
    <ClCompile Include="..\lib_enc\find_tilt.c" />
    <ClCompile Include="..\lib_enc\find_uv.c" />
+0 −12
Original line number Diff line number Diff line
@@ -52,15 +52,9 @@
    <ClCompile Include="..\lib_enc\enc_amr_wb.c">
      <Filter>enc_evs_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\enc_gen_voic_rf.c">
      <Filter>enc_evs_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\enc_prm.c">
      <Filter>enc_evs_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\evs_enc.c">
      <Filter>enc_evs_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\hf_cod_amrwb.c">
      <Filter>enc_evs_c</Filter>
    </ClCompile>
@@ -103,9 +97,6 @@
    <ClCompile Include="..\lib_enc\vad_proc.c">
      <Filter>enc_evs_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\analy_sp.c">
      <Filter>enc_all_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\ari_enc.c">
      <Filter>enc_all_c</Filter>
    </ClCompile>
@@ -169,9 +160,6 @@
    <ClCompile Include="..\lib_enc\enc_gen_voic.c">
      <Filter>enc_all_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\enc_higher_acelp.c">
      <Filter>enc_all_c</Filter>
    </ClCompile>
    <ClCompile Include="..\lib_enc\enc_uv.c">
      <Filter>enc_all_c</Filter>
    </ClCompile>
+277 −5
Original line number Diff line number Diff line
@@ -437,11 +437,11 @@ void cldfbAnalysis_ts_fx(
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )] ); // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )] ); // q

            i2_fx = Msub_32_16( 0, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )] );     // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )] ); // q
            i2_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] );     // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] ); // q

            r1_fx = Mpy_32_16_1( r1_fx, ptr_pf_sf ); // q - 1
            r2_fx = Mpy_32_16_1( r2_fx, ptr_pf_sf ); // q - 1
@@ -569,6 +569,278 @@ void cldfbAnalysis_ts_fx(
    return;
}

void cldfbAnalysis_ts_fx_var_q(
    const Word32 *timeIn_fx,
    /* i  : time buffer         */ // q
    Word32 realBuffer_fx[CLDFB_NO_CHANNELS_MAX],
    /* o  : real value buffer   */ // q_cldfb - 5
    Word32 imagBuffer_fx[CLDFB_NO_CHANNELS_MAX],
    /* o  : imag value buffer   */    // q_cldfb - 5
    const Word16 samplesToProcess,    /* i  : samples to process  */
    HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i  : filterbank state    */
    Word16 *q_cldfb )

{
    Word16 i, k;
    Word16 L2, M1, M2, M4;
    Word16 no_col = h_cldfb->no_col;
    move16();
    Word32 r1_fx, r2_fx, rr12_fx, ir12_fx;
    Word32 i1_fx, i2_fx, ri12_fx, ii12_fx;
    Word32 rBuffer_fx[2 * CLDFB_NO_CHANNELS_MAX];
    Word32 iBuffer_fx[2 * CLDFB_NO_CHANNELS_MAX];
    const Word32 *rot_vctr_re_fx;
    const Word32 *rot_vctr_im_fx;
    const Word32 *rot_vctr_delay_re_fx;
    const Word32 *rot_vctr_delay_im_fx;
    const Word16 *ptr_pf_fx;
    Word16 ptr_pf_sf;
    Word32 *timeBuffer_fx, buffer_fx[( CLDFB_NO_CHANNELS_MAX * CLDFB_NO_COL_MAX ) + ( 9 * CLDFB_NO_CHANNELS_MAX )];
    Word16 offset, frameSize;

    offset = sub( h_cldfb->p_filter_length, h_cldfb->no_channels );
    frameSize = i_mult( h_cldfb->no_channels, h_cldfb->no_col );

    /* prepare input buffer */
    timeBuffer_fx = buffer_fx;
    Copy32( h_cldfb->cldfb_state_fx, timeBuffer_fx, offset );

    IF( GT_16( samplesToProcess, -1 ) )
    {
        Copy32( timeIn_fx, timeBuffer_fx + offset, samplesToProcess );
        set32_fx( timeBuffer_fx + add( offset, samplesToProcess ), 0, sub( frameSize, samplesToProcess ) );
    }
    ELSE
    {
        Copy32( timeIn_fx, timeBuffer_fx + offset, frameSize );
    }

    IF( NE_16( h_cldfb->Q_cldfb_state, *q_cldfb ) )
    {
        Word16 norm_st = L_norm_arr( timeBuffer_fx, offset );
        IF( GE_16( norm_st, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) ) )
        {
            scale_sig32( timeBuffer_fx, offset, sub( *q_cldfb, h_cldfb->Q_cldfb_state ) );
            /* cldfb_state will get updated at end of processing with values whose q is same as
             * *q_cldfb.
             */
            h_cldfb->Q_cldfb_state = *q_cldfb;
            move16();
        }
        ELSE
        {
            scale_sig32( &timeBuffer_fx[offset], frameSize, sub( h_cldfb->Q_cldfb_state, *q_cldfb ) );
            *q_cldfb = h_cldfb->Q_cldfb_state;
            move16();
        }
    }

    /* only process needed cols */
    IF( GT_16( samplesToProcess, -1 ) )
    {
        no_col = s_min( no_col, idiv1616( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), h_cldfb->no_channels ) );
        assert( no_col == 1 );
    }

    M1 = h_cldfb->no_channels;
    M2 = shr( M1, 1 );
    M4 = shr( M1, 2 );
    L2 = shl( M1, 1 );
    move16();

    if ( s_and( M2, 1 ) )
    {
        M4 = add( M4, 1 );
    }

    rot_vctr_re_fx = h_cldfb->rot_vec_ana_re_fx;             // q = 29
    rot_vctr_im_fx = h_cldfb->rot_vec_ana_im_fx;             // q = 29
    rot_vctr_delay_re_fx = h_cldfb->rot_vec_ana_delay_re_fx; // q = 31
    rot_vctr_delay_im_fx = h_cldfb->rot_vec_ana_delay_im_fx; // q = 31

    ptr_pf_fx = h_cldfb->p_filter;
    ptr_pf_sf = h_cldfb->p_filter_sf; // Q14
    move16();

    FOR( i = 0; i < no_col; i++ )
    {
        FOR( k = 0; k < M4; k++ )
        {
            /* prototype filter */
            r1_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] );     // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] ); // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] ); // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] ); // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] ); // q

            r2_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 0 * L2 )] );     // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 1 * L2 )] ); // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 2 * L2 )] ); // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 3 * L2 )] ); // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 4 * L2 )] ); // q

            i1_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] );     // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] ); // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] ); // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] ); // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] ); // q

            i2_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 0 * L2 )] );     // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 1 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 2 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 3 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - 3 * M2 - 1 - ( 2 * k ) + 4 * L2 )] ); // q

            r1_fx = Mpy_32_16_1( r1_fx, ptr_pf_sf ); // q - 1
            r2_fx = Mpy_32_16_1( r2_fx, ptr_pf_sf ); // q - 1
            i1_fx = Mpy_32_16_1( i1_fx, ptr_pf_sf ); // q - 1
            i2_fx = Mpy_32_16_1( i2_fx, ptr_pf_sf ); // q - 1

            /* folding + pre modulation of DST IV */
            rr12_fx = L_sub( r1_fx, r2_fx );             // q -1
            ri12_fx = L_negate( L_add( i1_fx, i2_fx ) ); // q - 1
            /*cplxMult(&rBuffer[2*k],&rBuffer[2*k+1],rr12,ri12,rot_vctr_re[k],rot_vctr_im[k]);*/
            rBuffer_fx[2 * k] = Msub_32_32( Mpy_32_32( rr12_fx, rot_vctr_re_fx[k] ), ri12_fx, rot_vctr_im_fx[k] );     // q - 3
            rBuffer_fx[2 * k + 1] = Madd_32_32( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), ri12_fx, rot_vctr_re_fx[k] ); // q - 3
            move32();
            move32();

            ///* folding + pre modulation of DCT IV */
            ir12_fx = L_add( r1_fx, r2_fx ); // q - 1
            ii12_fx = L_sub( i1_fx, i2_fx ); // q - 1
            /*cplxMult(&iBuffer[2*k],&iBuffer[2*k+1],ir12,ii12,rot_vctr_re[k],rot_vctr_im[k]);*/
            iBuffer_fx[2 * k] = Msub_32_32( Mpy_32_32( ir12_fx, rot_vctr_re_fx[k] ), ii12_fx, rot_vctr_im_fx[k] );     // q - 3
            iBuffer_fx[2 * k + 1] = Madd_32_32( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), ii12_fx, rot_vctr_re_fx[k] ); // q - 3
            move32();
            move32();
        }

        FOR( k = M4; k < M2; k++ )
        {
            /* prototype filter */
            r1_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 0 * L2 )] );     // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 1 * L2 )] ); // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 2 * L2 )] ); // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 3 * L2 )] ); // q
            r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - M2 - 1 - ( 2 * k ) + 4 * L2 )] ); // q

            r2_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - 5 * M2 + ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - 5 * M2 + ( 2 * k ) + 0 * L2 )] );     // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - 5 * M2 + ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - 5 * M2 + ( 2 * k ) + 1 * L2 )] ); // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - 5 * M2 + ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - 5 * M2 + ( 2 * k ) + 2 * L2 )] ); // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - 5 * M2 + ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - 5 * M2 + ( 2 * k ) + 3 * L2 )] ); // q
            r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - 5 * M2 + ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - 5 * M2 + ( 2 * k ) + 4 * L2 )] ); // q

            i1_fx = Msub_32_16( 0, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 0 * L2 )] );     // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 1 * L2 )] ); // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 2 * L2 )] ); // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 3 * L2 )] ); // q
            i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 + M2 - 1 - ( 2 * k ) + 4 * L2 )] ); // q

            i2_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 0 * L2 )] );     // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 1 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 2 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 3 * L2 )] ); // q
            i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - 3 * M2 + ( 2 * k ) + 4 * L2 )] ); // q

            r1_fx = Mpy_32_16_1( r1_fx, ptr_pf_sf ); // q - 1
            r2_fx = Mpy_32_16_1( r2_fx, ptr_pf_sf ); // q - 1
            i1_fx = Mpy_32_16_1( i1_fx, ptr_pf_sf ); // q - 1
            i2_fx = Mpy_32_16_1( i2_fx, ptr_pf_sf ); // q - 1

            /* folding + pre modulation of DST IV */
            rr12_fx = L_add( r1_fx, r2_fx ); // q - 1
            ri12_fx = L_sub( i1_fx, i2_fx ); // q - 1
            /*cplxMult(&rBuffer[2*k],&rBuffer[2*k+1],rr12,ri12,rot_vctr_re[k],rot_vctr_im[k]);*/
            rBuffer_fx[2 * k] = Msub_32_32( Mpy_32_32( rr12_fx, rot_vctr_re_fx[k] ), ri12_fx, rot_vctr_im_fx[k] );     // q - 3
            rBuffer_fx[2 * k + 1] = Madd_32_32( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), ri12_fx, rot_vctr_re_fx[k] ); // q - 3
            move32();
            move32();

            /* folding + pre modulation of DCT IV */
            ir12_fx = L_sub( r1_fx, r2_fx ); // q - 1
            ii12_fx = L_add( i1_fx, i2_fx ); // q - 1
            /*cplxMult(&iBuffer[2*k],&iBuffer[2*k+1],ir12,ii12,rot_vctr_re[k],rot_vctr_im[k]);*/
            iBuffer_fx[2 * k] = Msub_32_32( Mpy_32_32( ir12_fx, rot_vctr_re_fx[k] ), ii12_fx, rot_vctr_im_fx[k] );     // q - 3
            iBuffer_fx[2 * k + 1] = Madd_32_32( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), ii12_fx, rot_vctr_re_fx[k] ); // q - 3
            move32();
            move32();
        }

        *q_cldfb = sub( *q_cldfb, 3 );
        move16();

        /* FFT of DST IV */
        fft_cldfb_fx( rBuffer_fx, M2 );

        /* post modulation of DST IV */
        FOR( k = 0; k < M2; k++ )
        {
            /*cplxMult(&realBuffer[M1-1-(2*k)],&realBuffer[2*k],rBuffer[2*k],rBuffer[2*k+1],rot_vctr_re[k],rot_vctr_im[k]);*/
            realBuffer_fx[( M1 - 1 ) - ( k * 2 )] = Msub_32_32( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_re_fx[k] ), rBuffer_fx[2 * k + 1], rot_vctr_im_fx[k] ); // q - 5
            realBuffer_fx[2 * k] = Madd_32_32( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_im_fx[k] ), rBuffer_fx[2 * k + 1], rot_vctr_re_fx[k] );                  // q - 5
            move32();
            move32();
        }
        *q_cldfb = sub( *q_cldfb, 2 );
        move16();

        /* FFT of DCT IV */
        fft_cldfb_fx( iBuffer_fx, M2 );

        /* post modulation of DCT IV */
        FOR( k = 0; k < M2; k++ )
        {
            /* do it inplace */
            /*cplxMult(&imagBuffer[2*k],&imagBuffer[M1-1-(2*k)],iBuffer[2*k],iBuffer[2*k+1],rot_vctr_re[k],rot_vctr_im[k]);*/
            imagBuffer_fx[2 * k] = Msub_32_32( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_re_fx[k] ), iBuffer_fx[2 * k + 1], rot_vctr_im_fx[k] );                  // q - 5
            imagBuffer_fx[( M1 - 1 ) - ( k * 2 )] = Madd_32_32( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_im_fx[k] ), iBuffer_fx[2 * k + 1], rot_vctr_re_fx[k] ); // q - 5
            move32();
            move32();
        }

        IF( EQ_32( h_cldfb->prototype, CLDFB_PROTOTYPE_5_00MS ) )
        {
            /* rotation due to delay*/
            /*if(h_cldfb->da != M1)*/
            IF( rot_vctr_delay_re_fx != NULL )
            {
                FOR( k = 0; k < M1; k++ )
                {
                    Word32 cplx_aux_fx;
                    /* delay */
                    /*cplxMult(&rBuffer[k], &iBuffer[k], realBuffer[i][k], imagBuffer[i][k], cos((EVS_PI/M1)*(k+0.5)*((h_cldfb->da-M1)*0.5)),
                            sin((EVS_PI/M1)*(k+0.5)*((h_cldfb->da-M1)*0.5)));*/
                    /*cplxMult(&rBuffer[k], &iBuffer[k], realBuffer[k], imagBuffer[k], rot_vctr_delay_re[k], rot_vctr_delay_im[k]);*/
                    /*cplxMult(&realBuffer[k], &imagBuffer[k], realBuffer[k], imagBuffer[k], rot_vctr_delay_re[k], rot_vctr_delay_im[k]);*/
                    /*realBuffer[k] = rBuffer[k];
                    imagBuffer[k] = iBuffer[k];*/
                    cplx_aux_fx = Msub_32_32( Mpy_32_32( realBuffer_fx[k], rot_vctr_delay_re_fx[k] ), imagBuffer_fx[k], rot_vctr_delay_im_fx[k] );      // q - 5
                    imagBuffer_fx[k] = Madd_32_32( Mpy_32_32( realBuffer_fx[k], rot_vctr_delay_im_fx[k] ), imagBuffer_fx[k], rot_vctr_delay_re_fx[k] ); // q - 5
                    realBuffer_fx[k] = cplx_aux_fx;
                    move32();
                    move32();
                }
            }
        }

        timeBuffer_fx += i_mult( L2, 5 );
        timeBuffer_fx += sub( h_cldfb->no_channels, h_cldfb->p_filter_length );
    }

    /* update memory */
    IF( GT_16( samplesToProcess, -1 ) )
    {
        Copy32( buffer_fx + samplesToProcess, h_cldfb->cldfb_state_fx, offset );
    }
    ELSE
    {
        Copy32( buffer_fx + frameSize, h_cldfb->cldfb_state_fx, offset );
    }

    return;
}


void cldfbAnalysis_ts_fx_fixed_q(
    const Word32 *timeIn_fx,
    /* i  : time buffer         */ // q
+25 −25

File changed.

Preview size limit exceeded, changes collapsed.

+27 −11
Original line number Diff line number Diff line
@@ -9614,6 +9614,17 @@ void cldfbAnalysis_ts_fx(
    Word16 *q_cldfb );
Word16 floor_log_2( Word32 num );
void cldfbAnalysis_ts_fx_var_q(
    const Word32 *timeIn_fx,
    /* i  : time buffer         */ // q
    Word32 realBuffer_fx[CLDFB_NO_CHANNELS_MAX],
    /* o  : real value buffer   */ // q_cldfb - 5
    Word32 imagBuffer_fx[CLDFB_NO_CHANNELS_MAX],
    /* o  : imag value buffer   */    // q_cldfb - 5
    const Word16 samplesToProcess,    /* i  : samples to process  */
    HANDLE_CLDFB_FILTER_BANK h_cldfb, /* i  : filterbank state    */
    Word16 *q_cldfb );
void cldfbAnalysis_ts_fx_fixed_q(
    const Word32 *timeIn_fx,
    /* i  : time buffer         */ // q
@@ -10852,19 +10863,24 @@ Word16 IGFSCFEncoderEncode(
    const Word16 indepFlag                 /* i  : if 1 frame is independent, 0 = frame is coded with data from previous frame                   */
);
/*ari_enc.c*/
Word16 ari_encode_14bits_ext(
    Word16 *ptr,
    Word16 bp,
Word16 ari_encode_14bits_ext_ivas_fx(
    Word16 *ptr, /* Q0 */
    Word16 bp,   /* Q0 */
    Tastat *s,
    Word32 symbol,
    const UWord16 *cum_freq );
Word16 ari_encode_14bits_sign(
    Word16 *ptr,
    Word16 bp,
    Word32 bits,
    Word32 symbol,          /* Q0 */
    UWord16 const *cum_freq /* Q0 */
);
Word16 ari_encode_14bits_sign_ivas_fx(
    Word16 *ptr, /* Q0 */
    Word16 bp,   /* Q0 */
    Word32 bits, /* Q0 */
    Tastat *s,
    Word16 sign );
Word16 ari_done_encoding_14bits( Word16 *ptr, Word16 bp, Tastat *s );
    Word16 sign /* Q0 */
);
Word16 ari_done_encoding_14bits_ivas_fx(
    Word16 *ptr, /* Q0 */
    Word16 bp,   /* Q0 */
    Tastat *s );
void pack_bit(
    const Word16 bit, /* i:   bit to be packed */
    UWord8 **pt,      /* i/o: pointer to octet array into which bit will be placed */
Loading