diff --git a/lib_com/cb_shape_fx.c b/lib_com/cb_shape_fx.c index fcd9e06e4a237f67e8560474738803ff8d44b8b1..56d645ce087d5b54b9eef1509cc3a0009abc43d5 100644 --- a/lib_com/cb_shape_fx.c +++ b/lib_com/cb_shape_fx.c @@ -28,7 +28,7 @@ static void E_GAIN_f_pitch_sharpening( Word16 *x, Word16 pit_lag, Word16 L_subfr FOR( i = pit_lag; i < L_subfr; i++ ) { /*x[i] += x[i - pit_lag] * F_PIT_SHARP;*/ - tmp = mult_r( x[sub( i, pit_lag )], 27853 /*F_PIT_SHARP Q15*/ ); + tmp = mult_r( x[i - pit_lag], 27853 /*F_PIT_SHARP Q15*/ ); x[i] = add( x[i], tmp ); move16(); } @@ -47,12 +47,12 @@ void cb_shape_fx( const Word16 scramblingFlag, /* i : flag for phase scrambling */ const Word16 sharpFlag, /* i : flag for formant sharpening */ const Word16 formantTiltFlag, /* i : flag for formant tilt */ - const Word16 g1, /* i : formant sharpening numerator weighting */ - const Word16 g2, /* i : formant sharpening denominator weighting */ - const Word16 *p_Aq, /* i : LP filter coefficients */ - Word16 *code, /* i/o: signal to shape */ - const Word16 tilt_code, /* i : tilt of code */ - const Word16 pt_pitch, /* i : pointer to current subframe fractional pitch */ + const Word16 g1, /* i : formant sharpening numerator weighting Q15 */ + const Word16 g2, /* i : formant sharpening denominator weighting Q15 */ + const Word16 *p_Aq, /* i : LP filter coefficients Q12 */ + Word16 *code, /* i/o: signal to shape Q9 */ + const Word16 tilt_code, /* i : tilt of code Q15 */ + const Word16 pt_pitch, /* i : pointer to current subframe fractional pitch Q6 */ const Word16 shift, const Word16 L_subfr /* i : subframe lenght */ ) @@ -88,8 +88,8 @@ void cb_shape_fx( buff[i] = code[i]; move16(); /*code[i] = 0.7f*buff[i] + buff[i-1] - 0.7f*code[i-1]; */ - L_tmp = L_mult( 22938, buff[i] ); - tmp = mac_r( L_tmp, -22938, code[i - 1] ); + L_tmp = L_mult( 22938 /*.7f in Q15*/, buff[i] ); // Q15+Q9+1 + tmp = mac_r( L_tmp, -22938 /*-.7f in Q15*/, code[i - 1] ); // Q9 code[i] = add( tmp, buff[i - 1] ); move16(); } @@ -121,7 +121,6 @@ void cb_shape_fx( { Copy( code, buff, L_subfr ); - move16(); Residu3_lc_fx( A_num, M, buff, code, L_subfr, shift ); { syn_filt_s_lc_fx( shift, A_den, code, code, L_subfr ); diff --git a/lib_com/cldfb.c b/lib_com/cldfb.c index 4eae5458fefe3695f73731434990ece508351681..5b6e77394147ac6afba2255cf9548de53e585cbc 100644 --- a/lib_com/cldfb.c +++ b/lib_com/cldfb.c @@ -307,7 +307,7 @@ void cldfbAnalysis_ivas_fx( /* only process needed cols */ IF( GT_16( samplesToProcess, -1 ) ) { - no_col = min( no_col, div_l( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), shr( h_cldfb->no_channels, 1 ) ) ); + no_col = s_min( no_col, div_l( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), shr( h_cldfb->no_channels, 1 ) ) ); } M1 = h_cldfb->no_channels; @@ -333,29 +333,29 @@ void cldfbAnalysis_ivas_fx( FOR( k = 0; k < M4; k++ ) { /* prototype filter */ - r1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx - - r2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx - - i1_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx - - i2_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + + r2_fx = Msub_32_16( 0, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 0 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 0 * L2 )] ); // Qx + r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 1 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 1 * L2 )] ); // Qx + r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 2 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 2 * L2 )] ); // Qx + r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 3 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 3 * L2 )] ); // Qx + r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[( L2 - M2 + ( 2 * k ) + 4 * L2 )], ptr_pf_fx[( L2 - M2 + ( 2 * k ) + 4 * L2 )] ); // Qx + + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx r1_fx = Mpy_32_16_1( r1_fx, ptr_pf_sf ); // Qx - 1 r2_fx = Mpy_32_16_1( r2_fx, ptr_pf_sf ); // Qx - 1 @@ -368,7 +368,7 @@ void cldfbAnalysis_ivas_fx( // cplxMult( &rBuffer_fx[2 * k], &rBuffer_fx[2 * k + 1], rr12_fx, ri12_fx, rot_vctr_re_fx[k], rot_vctr_im_fx[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] ); // Qx - 3 move32(); - rBuffer_fx[add( 2 * k, 1 )] = Madd_32_32( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), ri12_fx, rot_vctr_re_fx[k] ); // Qx - 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] ); // Qx - 3 move32(); /* folding + pre modulation of DCT IV */ @@ -377,36 +377,36 @@ void cldfbAnalysis_ivas_fx( // cplxMult( &iBuffer_fx[2 * k], &iBuffer_fx[2 * k + 1], ir12_fx, ii12_fx, rot_vctr_re_fx[k], rot_vctr_im_fx[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] ); // Qx - 3 move32(); - iBuffer_fx[add( 2 * k, 1 )] = Madd_32_32( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), ii12_fx, rot_vctr_re_fx[k] ); // Qx - 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] ); // Qx - 3 move32(); } FOR( k = M4; k < M2; k++ ) { /* prototype filter */ - r1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx - - r2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx - - i1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx - - i2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // Qx - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx + 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 )] ); // Qx r1_fx = Mpy_32_16_1( r1_fx, ptr_pf_sf ); // Qx - 1 r2_fx = Mpy_32_16_1( r2_fx, ptr_pf_sf ); // Qx - 1 @@ -419,7 +419,7 @@ void cldfbAnalysis_ivas_fx( // cplxMult( &rBuffer_fx[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] ); // Qx - 3 move32(); - rBuffer_fx[add( 2 * k, 1 )] = Madd_32_32( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), ri12_fx, rot_vctr_re_fx[k] ); // Qx - 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] ); // Qx - 3 move32(); /* folding + pre modulation of DCT IV */ @@ -428,7 +428,7 @@ void cldfbAnalysis_ivas_fx( // 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] ); // Qx - 3 move32(); - iBuffer_fx[add( 2 * k, 1 )] = Madd_32_32( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), ii12_fx, rot_vctr_re_fx[k] ); // Qx - 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] ); // Qx - 3 move32(); } @@ -440,9 +440,9 @@ void cldfbAnalysis_ivas_fx( FOR( k = 0; k < M2; k++ ) { // cplxMult( &realBuffer[i][M1 - 1 - ( 2 * k )], &realBuffer[i][2 * k], rBuffer[2 * k], rBuffer[2 * k + 1], rot_vctr_re[k], rot_vctr_im[k] ); - realBuffer_fx[i][sub( sub( M1, 1 ), shl( k, 1 ) )] = Msub_32_32( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_re_fx[k] ), rBuffer_fx[add( 2 * k, 1 )], rot_vctr_im_fx[k] ); // Qx - 5 + realBuffer_fx[i][( 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] ); // Qx - 5 move32(); - realBuffer_fx[i][2 * k] = Madd_32_32( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_im_fx[k] ), rBuffer_fx[add( 2 * k, 1 )], rot_vctr_re_fx[k] ); // Qx - 5 + realBuffer_fx[i][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] ); // Qx - 5 move32(); } @@ -455,9 +455,9 @@ void cldfbAnalysis_ivas_fx( { /* do it inplace */ // cplxMult( &imagBuffer[i][2 * k], &imagBuffer[i][M1 - 1 - ( 2 * k )], iBuffer[2 * k], iBuffer[2 * k + 1], rot_vctr_re[k], rot_vctr_im[k] ); - imagBuffer_fx[i][2 * k] = Msub_32_32( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_re_fx[k] ), iBuffer_fx[add( 2 * k, 1 )], rot_vctr_im_fx[k] ); // QX - 5 + imagBuffer_fx[i][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] ); // QX - 5 move32(); - imagBuffer_fx[i][sub( sub( M1, 1 ), shl( k, 1 ) )] = Madd_32_32( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_im_fx[k] ), iBuffer_fx[add( 2 * k, 1 )], rot_vctr_re_fx[k] ); // Qx - 5 + imagBuffer_fx[i][( ( 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] ); // Qx - 5 move32(); } @@ -743,20 +743,17 @@ void cldfbAnalysis_ts_fx( move16(); /* only process needed cols */ - IF( samplesToProcess > -1 ) + IF( GT_16( samplesToProcess, -1 ) ) { - no_col = min( no_col, idiv1616( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), h_cldfb->no_channels ) ); + 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; move16(); M2 = shr( M1, 1 ); - move16(); M4 = shr( M1, 2 ); - move16(); L2 = shl( M1, 1 ); - move16(); if ( s_and( M2, 1 ) ) { @@ -777,29 +774,29 @@ void cldfbAnalysis_ts_fx( FOR( k = 0; k < M4; k++ ) { /* prototype filter */ - r1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - r2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i1_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i2_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q + 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 @@ -810,8 +807,8 @@ void cldfbAnalysis_ts_fx( 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] = L_sub( Mpy_32_32( rr12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_im_fx[k] ) ); // q - 3 - rBuffer_fx[add( 2 * k, 1 )] = L_add( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_re_fx[k] ) ); // q - 3 + rBuffer_fx[2 * k] = L_sub( Mpy_32_32( rr12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_im_fx[k] ) ); // q - 3 + rBuffer_fx[2 * k + 1] = L_add( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_re_fx[k] ) ); // q - 3 move32(); move32(); @@ -819,8 +816,8 @@ void cldfbAnalysis_ts_fx( 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] = L_sub( Mpy_32_32( ir12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_im_fx[k] ) ); // q - 3 - iBuffer_fx[add( 2 * k, 1 )] = L_add( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_re_fx[k] ) ); // q - 3 + iBuffer_fx[2 * k] = L_sub( Mpy_32_32( ir12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_im_fx[k] ) ); // q - 3 + iBuffer_fx[2 * k + 1] = L_add( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_re_fx[k] ) ); // q - 3 move32(); move32(); } @@ -828,29 +825,29 @@ void cldfbAnalysis_ts_fx( FOR( k = M4; k < M2; k++ ) { /* prototype filter */ - r1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - r2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q + 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 + 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 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 @@ -861,8 +858,8 @@ void cldfbAnalysis_ts_fx( 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] = L_sub( Mpy_32_32( rr12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_im_fx[k] ) ); // q - 3 - rBuffer_fx[add( 2 * k, 1 )] = L_add( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_re_fx[k] ) ); // q - 3 + rBuffer_fx[2 * k] = L_sub( Mpy_32_32( rr12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_im_fx[k] ) ); // q - 3 + rBuffer_fx[2 * k + 1] = L_add( Mpy_32_32( rr12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ri12_fx, rot_vctr_re_fx[k] ) ); // q - 3 move32(); move32(); @@ -870,8 +867,8 @@ void cldfbAnalysis_ts_fx( 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] = L_sub( Mpy_32_32( ir12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_im_fx[k] ) ); // q - 3 - iBuffer_fx[add( 2 * k, 1 )] = L_add( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_re_fx[k] ) ); // q - 3 + iBuffer_fx[2 * k] = L_sub( Mpy_32_32( ir12_fx, rot_vctr_re_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_im_fx[k] ) ); // q - 3 + iBuffer_fx[2 * k + 1] = L_add( Mpy_32_32( ir12_fx, rot_vctr_im_fx[k] ), Mpy_32_32( ii12_fx, rot_vctr_re_fx[k] ) ); // q - 3 move32(); move32(); } @@ -884,12 +881,12 @@ void cldfbAnalysis_ts_fx( q_shift = sub( s_min( getScaleFactor32( rBuffer_fx, shl( M2, 1 ) ), getScaleFactor32( iBuffer_fx, shl( M2, 1 ) ) ), find_guarded_bits_fx( M2 ) ); *q_cldfb = add( *q_cldfb, q_shift ); move16(); - FOR( Word16 ind = 0; ind < shl( M2, 1 ); ind++ ) + FOR( Word16 ind = 0; ind < M2 * 2; ind++ ) { rBuffer_fx[ind] = L_shl( rBuffer_fx[ind], q_shift ); move32(); } - FOR( Word16 ind = 0; ind < shl( M2, 1 ); ind++ ) + FOR( Word16 ind = 0; ind < M2 * 2; ind++ ) { iBuffer_fx[ind] = L_shl( iBuffer_fx[ind], q_shift ); move32(); @@ -900,8 +897,8 @@ void cldfbAnalysis_ts_fx( 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[sub( sub( M1, 1 ), shl( k, 1 ) )] = L_sub( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_re_fx[k] ), Mpy_32_32( rBuffer_fx[add( 2 * k, 1 )], rot_vctr_im_fx[k] ) ); // q - 5 - realBuffer_fx[2 * k] = L_add( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_im_fx[k] ), Mpy_32_32( rBuffer_fx[add( 2 * k, 1 )], rot_vctr_re_fx[k] ) ); // q - 5 + realBuffer_fx[( ( M1 - 1 ) - ( k * 2 ) )] = L_sub( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_re_fx[k] ), Mpy_32_32( rBuffer_fx[2 * k + 1], rot_vctr_im_fx[k] ) ); // q - 5 + realBuffer_fx[2 * k] = L_add( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_im_fx[k] ), Mpy_32_32( rBuffer_fx[2 * k + 1], rot_vctr_re_fx[k] ) ); // q - 5 move32(); move32(); } @@ -914,12 +911,12 @@ void cldfbAnalysis_ts_fx( q_shift = s_min( getScaleFactor32( rBuffer_fx, shl( M2, 1 ) ), getScaleFactor32( iBuffer_fx, shl( M2, 1 ) ) ); *q_cldfb = add( *q_cldfb, q_shift ); move16(); - FOR( Word16 ind = 0; ind < shl( M2, 1 ); ind++ ) + FOR( Word16 ind = 0; ind < M2 * 2; ind++ ) { rBuffer_fx[ind] = L_shl( rBuffer_fx[ind], q_shift ); move32(); } - FOR( Word16 ind = 0; ind < shl( M2, 1 ); ind++ ) + FOR( Word16 ind = 0; ind < M2 * 2; ind++ ) { iBuffer_fx[ind] = L_shl( iBuffer_fx[ind], q_shift ); move32(); @@ -930,8 +927,8 @@ void cldfbAnalysis_ts_fx( { /* 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] = L_sub( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_re_fx[k] ), Mpy_32_32( iBuffer_fx[add( 2 * k, 1 )], rot_vctr_im_fx[k] ) ); // q - 5 - imagBuffer_fx[sub( sub( M1, 1 ), shl( k, 1 ) )] = L_add( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_im_fx[k] ), Mpy_32_32( iBuffer_fx[add( 2 * k, 1 )], rot_vctr_re_fx[k] ) ); // q - 5 + imagBuffer_fx[2 * k] = L_sub( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_re_fx[k] ), Mpy_32_32( iBuffer_fx[2 * k + 1], rot_vctr_im_fx[k] ) ); // q - 5 + imagBuffer_fx[( M1 - 1 ) - ( k * 2 )] = L_add( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_im_fx[k] ), Mpy_32_32( iBuffer_fx[2 * k + 1], rot_vctr_re_fx[k] ) ); // q - 5 move32(); move32(); } @@ -1028,7 +1025,7 @@ void cldfbAnalysis_ts_fx_fixed_q( /* only process needed cols */ IF( GT_16( samplesToProcess, -1 ) ) { - no_col = min( no_col, idiv1616( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), h_cldfb->no_channels ) ); + no_col = s_min( no_col, idiv1616( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), h_cldfb->no_channels ) ); assert( no_col == 1 ); } @@ -1037,9 +1034,6 @@ void cldfbAnalysis_ts_fx_fixed_q( M4 = shr( M1, 2 ); L2 = shl( M1, 1 ); move16(); - move16(); - move16(); - move16(); if ( s_and( M2, 1 ) ) { @@ -1060,29 +1054,29 @@ void cldfbAnalysis_ts_fx_fixed_q( FOR( k = 0; k < M4; k++ ) { /* prototype filter */ - r1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - r2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, M2 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i1_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i2_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, i_mult( 3, M2 ) ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q + 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 @@ -1093,8 +1087,8 @@ void cldfbAnalysis_ts_fx_fixed_q( 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[add( 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 + 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(); @@ -1102,8 +1096,8 @@ void cldfbAnalysis_ts_fx_fixed_q( 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[add( 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 + 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(); } @@ -1111,29 +1105,29 @@ void cldfbAnalysis_ts_fx_fixed_q( FOR( k = M4; k < M2; k++ ) { /* prototype filter */ - r1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r1_fx = Msub_32_16( r1_fx, timeBuffer_fx[add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( sub( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - r2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - r2_fx = Msub_32_16( r2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 5, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i1_fx = Msub_32_16( 0, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i1_fx = Msub_32_16( i1_fx, timeBuffer_fx[add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( sub( sub( add( L2, M2 ), 1 ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q - - i2_fx = Msub_32_16( 0, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 0, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 1, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 2, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 3, L2 ) ) )] ); // q - i2_fx = Msub_32_16( i2_fx, timeBuffer_fx[add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) )], ptr_pf_fx[( add( add( sub( L2, i_mult( 3, M2 ) ), shl( k, 1 ) ), i_mult( 4, L2 ) ) )] ); // q + 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 @@ -1144,8 +1138,8 @@ void cldfbAnalysis_ts_fx_fixed_q( 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[add( 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 + 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(); @@ -1153,8 +1147,8 @@ void cldfbAnalysis_ts_fx_fixed_q( 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[add( 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 + 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(); } @@ -1169,8 +1163,8 @@ void cldfbAnalysis_ts_fx_fixed_q( 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[sub( sub( M1, 1 ), shl( k, 1 ) )] = Msub_32_32( Mpy_32_32( rBuffer_fx[2 * k], rot_vctr_re_fx[k] ), rBuffer_fx[add( 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[add( 2 * k, 1 )], rot_vctr_re_fx[k] ); // q - 5 + 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(); } @@ -1185,8 +1179,8 @@ void cldfbAnalysis_ts_fx_fixed_q( { /* 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[add( 2 * k, 1 )], rot_vctr_im_fx[k] ); // q - 5 - imagBuffer_fx[sub( sub( M1, 1 ), shl( k, 1 ) )] = Madd_32_32( Mpy_32_32( iBuffer_fx[2 * k], rot_vctr_im_fx[k] ), iBuffer_fx[add( 2 * k, 1 )], rot_vctr_re_fx[k] ); // q - 5 + 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(); } @@ -1459,6 +1453,7 @@ void cldfbSynthesis_ivas_fx( move16(); M1 = h_cldfb->no_channels; + move16(); L2 = shl( M1, 1 ); M2 = shr( M1, 1 ); M41 = shr( M2, 1 ); @@ -1468,7 +1463,7 @@ void cldfbSynthesis_ivas_fx( /* only process needed cols */ IF( GT_16( samplesToProcess, -1 ) ) { - no_col = min( no_col, idiv1616( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), h_cldfb->no_channels ) ); + no_col = s_min( no_col, idiv1616( sub( add( samplesToProcess, h_cldfb->no_channels ), 1 ), h_cldfb->no_channels ) ); move16(); } @@ -1491,7 +1486,7 @@ void cldfbSynthesis_ivas_fx( FOR( k = 0; k < no_col; k++ ) { - IF( EQ_16( (Word16) h_cldfb->prototype, (Word16) CLDFB_PROTOTYPE_5_00MS ) ) + IF( EQ_16( h_cldfb->prototype, CLDFB_PROTOTYPE_5_00MS ) ) { /* rotation due to delay*/ /*if(h_cldfb->ds != M1)*/ @@ -1527,16 +1522,16 @@ void cldfbSynthesis_ivas_fx( { /* pre modulation of DST IV */ /*cplxMult(&rBuffer[2*i], &rBuffer[2*i+1], realBuffer[k][2*i], realBuffer[k][M1-1-2*i], rot_vctr_re[i], rot_vctr_im[i]);*/ - rBuffer_fx[2 * i] = Msub_32_32( Mpy_32_32( realBuffer_fx[k][2 * i], rot_vctr_re_fx[i] ), realBuffer_fx[k][sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_im_fx[i] ); // Qx + rBuffer_fx[2 * i] = Msub_32_32( Mpy_32_32( realBuffer_fx[k][2 * i], rot_vctr_re_fx[i] ), realBuffer_fx[k][( M1 - 1 ) - ( i * 2 )], rot_vctr_im_fx[i] ); // Qx move32(); - rBuffer_fx[add( 2 * i, 1 )] = Madd_32_32( Mpy_32_32( realBuffer_fx[k][2 * i], rot_vctr_im_fx[i] ), realBuffer_fx[k][sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_re_fx[i] ); // Qx + rBuffer_fx[2 * i + 1] = Madd_32_32( Mpy_32_32( realBuffer_fx[k][2 * i], rot_vctr_im_fx[i] ), realBuffer_fx[k][( M1 - 1 ) - ( i * 2 )], rot_vctr_re_fx[i] ); // Qx move32(); /* pre modulation of DCT IV */ /*cplxMult(&iBuffer[2*i], &iBuffer[2*i+1],-imagBuffer[k][2*i], imagBuffer[k][M1-1-2*i], rot_vctr_re[i], rot_vctr_im[i]);*/ - iBuffer_fx[2 * i] = Msub_32_32( Mpy_32_32( ( L_negate( imagBuffer_fx[k][2 * i] ) ), rot_vctr_re_fx[i] ), imagBuffer_fx[k][sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_im_fx[i] ); // Qx + iBuffer_fx[2 * i] = Msub_32_32( Mpy_32_32( ( L_negate( imagBuffer_fx[k][2 * i] ) ), rot_vctr_re_fx[i] ), imagBuffer_fx[k][( M1 - 1 ) - ( i * 2 )], rot_vctr_im_fx[i] ); // Qx move32(); - iBuffer_fx[add( 2 * i, 1 )] = Madd_32_32( Mpy_32_32( ( L_negate( imagBuffer_fx[k][2 * i] ) ), rot_vctr_im_fx[i] ), imagBuffer_fx[k][sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_re_fx[i] ); // Qx + iBuffer_fx[2 * i + 1] = Madd_32_32( Mpy_32_32( ( L_negate( imagBuffer_fx[k][2 * i] ) ), rot_vctr_im_fx[i] ), imagBuffer_fx[k][( M1 - 1 ) - ( i * 2 )], rot_vctr_re_fx[i] ); // Qx move32(); } @@ -1550,69 +1545,69 @@ void cldfbSynthesis_ivas_fx( FOR( i = 0; i < M41; i++ ) { /* post modulation of DST IV */ - rr12_fx = Msub_32_32( Mpy_32_32( rBuffer_fx[sub( sub( M1, 2 ), shl( i, 1 ) )], rot_vctr_re_fx[sub( sub( M2, 1 ), i )] ), rBuffer_fx[sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_im_fx[sub( sub( M2, 1 ), i )] ); // Qx - ri12_fx = Madd_32_32( Mpy_32_32( rBuffer_fx[sub( sub( M1, 2 ), shl( i, 1 ) )], rot_vctr_im_fx[sub( sub( M2, 1 ), i )] ), rBuffer_fx[sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_re_fx[sub( sub( M2, 1 ), i )] ); // Qx + rr12_fx = Msub_32_32( Mpy_32_32( rBuffer_fx[( M1 - 2 ) - ( i * 2 )], rot_vctr_re_fx[( M2 - 1 ) - i] ), rBuffer_fx[( M1 - 1 ) - ( i * 2 )], rot_vctr_im_fx[( M2 - 1 ) - i] ); // Qx + ri12_fx = Madd_32_32( Mpy_32_32( rBuffer_fx[( M1 - 2 ) - ( i * 2 )], rot_vctr_im_fx[( M2 - 1 ) - i] ), rBuffer_fx[( M1 - 1 ) - ( i * 2 )], rot_vctr_re_fx[( M2 - 1 ) - i] ); // Qx /* post modulation of DCT IV */ - ir12_fx = Msub_32_32( Mpy_32_32( iBuffer_fx[sub( sub( M1, 2 ), shl( i, 1 ) )], rot_vctr_re_fx[sub( sub( M2, 1 ), i )] ), iBuffer_fx[sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_im_fx[sub( sub( M2, 1 ), i )] ); // Qx - ii12_fx = Madd_32_32( Mpy_32_32( iBuffer_fx[sub( sub( M1, 2 ), shl( i, 1 ) )], rot_vctr_im_fx[sub( sub( M2, 1 ), i )] ), iBuffer_fx[sub( sub( M1, 1 ), shl( i, 1 ) )], rot_vctr_re_fx[sub( sub( M2, 1 ), i )] ); // Qx + ir12_fx = Msub_32_32( Mpy_32_32( iBuffer_fx[( M1 - 2 ) - ( i * 2 )], rot_vctr_re_fx[( M2 - 1 ) - i] ), iBuffer_fx[( M1 - 1 ) - ( i * 2 )], rot_vctr_im_fx[( M2 - 1 ) - i] ); // Qx + ii12_fx = Madd_32_32( Mpy_32_32( iBuffer_fx[( M1 - 2 ) - ( i * 2 )], rot_vctr_im_fx[( M2 - 1 ) - i] ), iBuffer_fx[( M1 - 1 ) - ( i * 2 )], rot_vctr_re_fx[( M2 - 1 ) - i] ); // Qx - new_samples_fx[add( add( add( M1, M2 ), 1 ), shl( i, 1 ) )] = L_negate( L_add( rr12_fx, ii12_fx ) ); // Qx + new_samples_fx[M1 + M2 + 1 + 2 * i] = L_negate( L_add( rr12_fx, ii12_fx ) ); // Qx move32(); - new_samples_fx[sub( sub( M2, 2 ), shl( i, 1 ) )] = L_negate( L_add( ri12_fx, ir12_fx ) ); // Qx + new_samples_fx[M2 - 2 - 2 * i] = L_negate( L_add( ri12_fx, ir12_fx ) ); // Qx move32(); - new_samples_fx[sub( sub( add( M1, M2 ), 2 ), shl( i, 1 ) )] = L_sub( rr12_fx, ii12_fx ); // Qx + new_samples_fx[M1 + M2 - 2 - 2 * i] = L_sub( rr12_fx, ii12_fx ); // Qx move32(); - new_samples_fx[add( add( M2, 1 ), shl( i, 1 ) )] = L_sub( ir12_fx, ri12_fx ); // Qx + new_samples_fx[M2 + 1 + 2 * i] = L_sub( ir12_fx, ri12_fx ); // Qx move32(); } FOR( i = 0; i < M42; i++ ) { /* post modulation of DST IV */ - rr12_fx = Msub_32_32( Mpy_32_32( rBuffer_fx[2 * i], rot_vctr_re_fx[i] ), rBuffer_fx[add( 2 * i, 1 )], rot_vctr_im_fx[i] ); // Qx - ri12_fx = Madd_32_32( Mpy_32_32( rBuffer_fx[2 * i], rot_vctr_im_fx[i] ), rBuffer_fx[add( 2 * i, 1 )], rot_vctr_re_fx[i] ); // Qx + rr12_fx = Msub_32_32( Mpy_32_32( rBuffer_fx[2 * i], rot_vctr_re_fx[i] ), rBuffer_fx[2 * i + 1], rot_vctr_im_fx[i] ); // Qx + ri12_fx = Madd_32_32( Mpy_32_32( rBuffer_fx[2 * i], rot_vctr_im_fx[i] ), rBuffer_fx[2 * i + 1], rot_vctr_re_fx[i] ); // Qx /* post modulation of DCT IV */ - ir12_fx = Msub_32_32( Mpy_32_32( iBuffer_fx[2 * i], rot_vctr_re_fx[i] ), iBuffer_fx[add( 2 * i, 1 )], rot_vctr_im_fx[i] ); // Qx - ii12_fx = Madd_32_32( Mpy_32_32( iBuffer_fx[2 * i], rot_vctr_im_fx[i] ), iBuffer_fx[add( 2 * i, 1 )], rot_vctr_re_fx[i] ); // Qx + ir12_fx = Msub_32_32( Mpy_32_32( iBuffer_fx[2 * i], rot_vctr_re_fx[i] ), iBuffer_fx[2 * i + 1], rot_vctr_im_fx[i] ); // Qx + ii12_fx = Madd_32_32( Mpy_32_32( iBuffer_fx[2 * i], rot_vctr_im_fx[i] ), iBuffer_fx[2 * i + 1], rot_vctr_re_fx[i] ); // Qx - new_samples_fx[add( add( M1, M2 ), shl( i, 1 ) )] = L_add( ri12_fx, ir12_fx ); // Qx + new_samples_fx[M1 + M2 + 2 * i] = L_add( ri12_fx, ir12_fx ); // Qx move32(); - new_samples_fx[sub( sub( M2, 1 ), shl( i, 1 ) )] = L_add( rr12_fx, ii12_fx ); // Qx + new_samples_fx[M2 - 1 - 2 * i] = L_add( rr12_fx, ii12_fx ); // Qx move32(); - new_samples_fx[sub( sub( add( M1, M2 ), 1 ), shl( i, 1 ) )] = L_sub( ir12_fx, ri12_fx ); // Qx + new_samples_fx[M1 + M2 - 1 - 2 * i] = L_sub( ir12_fx, ri12_fx ); // Qx move32(); - new_samples_fx[add( M2, shl( i, 1 ) )] = L_sub( rr12_fx, ii12_fx ); // Qx + new_samples_fx[M2 + 2 * i] = L_sub( rr12_fx, ii12_fx ); // Qx move32(); } /* synthesis prototype filter */ FOR( i = 0; i < L2; i++ ) { - accu0 = Madd_32_16( synthesisBuffer_fx[i], Mpy_32_16_1( new_samples_fx[sub( sub( L2, 1 ), i )], p_filter[i] ), p_filter_sf ); // Qx - 1 - accu1 = Madd_32_16( synthesisBuffer_fx[add( L2, i )], Mpy_32_16_1( new_samples_fx[sub( sub( L2, 1 ), i )], p_filter[add( L2, i )] ), p_filter_sf ); // Qx - 1 - accu2 = Madd_32_16( synthesisBuffer_fx[add( i_mult( 2, L2 ), i )], Mpy_32_16_1( new_samples_fx[sub( sub( L2, 1 ), i )], p_filter[add( i_mult( 2, L2 ), i )] ), p_filter_sf ); // Qx - 1 - accu3 = Madd_32_16( synthesisBuffer_fx[add( i_mult( 3, L2 ), i )], Mpy_32_16_1( new_samples_fx[sub( sub( L2, 1 ), i )], p_filter[add( i_mult( 3, L2 ), i )] ), p_filter_sf ); // Qx - 1 - accu4 = Madd_32_16( synthesisBuffer_fx[add( i_mult( 4, L2 ), i )], Mpy_32_16_1( new_samples_fx[sub( sub( L2, 1 ), i )], p_filter[add( i_mult( 4, L2 ), i )] ), p_filter_sf ); // Qx - 1 + accu0 = Madd_32_16( synthesisBuffer_fx[i], Mpy_32_16_1( new_samples_fx[L2 - 1 - i], p_filter[i] ), p_filter_sf ); // Qx - 1 + accu1 = Madd_32_16( synthesisBuffer_fx[1 * L2 + i], Mpy_32_16_1( new_samples_fx[L2 - 1 - i], p_filter[( 1 * L2 + i )] ), p_filter_sf ); // Qx - 1 + accu2 = Madd_32_16( synthesisBuffer_fx[2 * L2 + i], Mpy_32_16_1( new_samples_fx[L2 - 1 - i], p_filter[( 2 * L2 + i )] ), p_filter_sf ); // Qx - 1 + accu3 = Madd_32_16( synthesisBuffer_fx[3 * L2 + i], Mpy_32_16_1( new_samples_fx[L2 - 1 - i], p_filter[( 3 * L2 + i )] ), p_filter_sf ); // Qx - 1 + accu4 = Madd_32_16( synthesisBuffer_fx[4 * L2 + i], Mpy_32_16_1( new_samples_fx[L2 - 1 - i], p_filter[( 4 * L2 + i )] ), p_filter_sf ); // Qx - 1 synthesisBuffer_fx[i] = accu0; move32(); - synthesisBuffer_fx[add( L2, i )] = accu1; + synthesisBuffer_fx[1 * L2 + i] = accu1; move32(); - synthesisBuffer_fx[add( i_mult( 2, L2 ), i )] = accu2; + synthesisBuffer_fx[2 * L2 + i] = accu2; move32(); - synthesisBuffer_fx[add( i_mult( 3, L2 ), i )] = accu3; + synthesisBuffer_fx[3 * L2 + i] = accu3; move32(); - synthesisBuffer_fx[add( i_mult( 4, L2 ), i )] = accu4; + synthesisBuffer_fx[4 * L2 + i] = accu4; move32(); } FOR( i = 0; i < M1; i++ ) { - ptr_time_out_fx[sub( sub( M1, 1 ), i )] = synthesisBuffer_fx[add( i_mult( 4, L2 ), add( M1, i ) )]; + ptr_time_out_fx[( M1 - 1 ) - i] = synthesisBuffer_fx[4 * L2 + M1 + i]; move32(); } @@ -1728,9 +1723,9 @@ ivas_error openCldfb_ivas_fx( } hs->type = type; - move16(); + move32(); hs->prototype = prototype; - move16(); + move32(); configureCldfb_ivas_fx( hs, sampling_rate ); hs->memory32 = NULL; hs->FilterStates = NULL; @@ -1958,11 +1953,11 @@ void analysisCldfbEncoder_ivas_fx( Word32 *timeIn, /*q11*/ Word16 timeInq, Word16 samplesToProcess, - Word32 realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - Word32 imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - Word16 realBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - Word16 imagBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - Word32 *ppBuf_Ener, + Word32 realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], // Q(scale.lb_scale) + Word32 imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], // Q(scale.lb_scale) + Word16 realBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], // Q15 + Word16 imagBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], // Q15 + Word32 *ppBuf_Ener, // Q(31-enerBuffSum_exp) Word16 *enerBuffSum_exp, CLDFB_SCALE_FACTOR *scale ) { @@ -2135,6 +2130,7 @@ void deleteCldfb_ivas_fx( { HANDLE_CLDFB_FILTER_BANK hs = *h_cldfb; + test(); IF( h_cldfb == NULL || *h_cldfb == NULL ) { return; @@ -3239,7 +3235,7 @@ ivas_error cldfb_save_memory_ivas_fx( ) { UWord16 offset = sub( hs->p_filter_length, hs->no_channels ); - + test(); IF( hs->memory32 != NULL || ( hs->memory_length != 0 ) ) { /* memory already stored; Free memory first */ diff --git a/lib_com/cldfb_evs.c b/lib_com/cldfb_evs.c index 1186c82fae9369424ac970c12f58424e70536ae4..c22e583be72911deda754f7d5297659237654203 100644 --- a/lib_com/cldfb_evs.c +++ b/lib_com/cldfb_evs.c @@ -241,9 +241,9 @@ static void calcModulation( Word32 *rYR, C_c = C_form( *cr, *ci ); CL_z = CL_mult_32x16( CL_x, C_c ); *rYR = CL_Extract_real( CL_z ); - move64(); + move32(); *rYI = CL_Extract_imag( CL_z ); - move64(); + move32(); rYR += srYR; rYI += srYI; rXR += srXR; @@ -252,9 +252,9 @@ static void calcModulation( Word32 *rYR, CL_x = CL_form( *iXR, *iXI ); CL_z = CL_mult_32x16( CL_x, C_c ); *iYR = CL_Extract_real( CL_z ); - move64(); + move32(); *iYI = CL_Extract_imag( CL_z ); - move64(); + move32(); iYR += siYR; iYI += siYI; iXR += siXR; @@ -301,14 +301,14 @@ static void calcModulationAndFolding( Word16 *rY, const Word16 *r11, *r12, *r21, *r22; - y11 = &rY[add( add( m, m2 ), 1 )]; - y12 = &rY[sub( m2, 2 )]; - y13 = &rY[sub( add( m, m2 ), 2 )]; + y11 = &rY[( m + m2 ) + 1]; + y12 = &rY[m2 - 2]; + y13 = &rY[( m + m2 ) - 2]; y14 = &rY[m2 + 1]; - y21 = &rY[add( m, m2 )]; + y21 = &rY[m + m2]; y22 = &rY[m2 - 1]; - y23 = &rY[sub( add( m, m2 ), 1 )]; + y23 = &rY[( m + m2 ) - 1]; y24 = &rY[m2]; x11 = &rX[m - 2]; @@ -376,10 +376,11 @@ void cldfbAnalysisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, Word32 **rAnalysis, Word32 **iAnalysis, CLDFB_SCALE_FACTOR *scaleFactor, - const Word16 *timeIn, + const Word16 *timeIn, // Q(15-timeIn_e) const Word16 timeIn_e, const Word16 nTimeSlots, - Word32 *pWorkBuffer ) + Word32 *pWorkBuffer // Qx +) { Word16 i, k; @@ -450,13 +451,14 @@ void cldfbAnalysisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, pStates6 = &pStates[M0M2]; p_stride = CLDFB_NO_POLY; + move16(); pFilter = &cldfbBank->p_filter[p_stride - CLDFB_NO_POLY]; - pFilter1 = &pFilter[i_mult( p_stride, L3M1 )]; - pFilter2 = &pFilter[i_mult( p_stride, L3 )]; - pFilter3 = &pFilter[i_mult( p_stride, m2 )]; - pFilter4 = &pFilter[i_mult( p_stride, M2M1 )]; - pFilter5 = &pFilter[i_mult( p_stride, L4M1 )]; - pFilter6 = &pFilter[i_mult( p_stride, M0M2 )]; + pFilter1 = &pFilter[p_stride * L3M1]; + pFilter2 = &pFilter[p_stride * L3]; + pFilter3 = &pFilter[p_stride * m2]; + pFilter4 = &pFilter[p_stride * M2M1]; + pFilter5 = &pFilter[p_stride * L4M1]; + pFilter6 = &pFilter[p_stride * M0M2]; nSamples = i_mult( nTimeSlots, cldfbBank->no_channels ); nSamplesUpd = i_mult( cldfbBank->no_col, cldfbBank->no_channels ); @@ -469,7 +471,7 @@ void cldfbAnalysisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, move16(); FOR( i = 0; i < offset; i += cldfbBank->no_channels ) { - cldfbBank->FilterStates_e[k] = cldfbBank->FilterStates_e[add( k, cldfbBank->no_col )]; + cldfbBank->FilterStates_e[k] = cldfbBank->FilterStates_e[( k + cldfbBank->no_col )]; move16(); assert( (size_t) k < sizeof( cldfbBank->FilterStates_e ) / sizeof( cldfbBank->FilterStates_e[0] ) ); scale = s_max( scale, cldfbBank->FilterStates_e[k] ); @@ -496,7 +498,7 @@ void cldfbAnalysisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, FOR( i = 0; i < offset; i++ ) { #ifdef BASOP_NOGLOB - pStates[i] = shl_sat( pStates[i + nSamplesUpd], scale ); + pStates[i] = shl_sat( pStates[i + nSamplesUpd], scale ); // Q(15-(timeIn_e-FilterStates_eg)) #else pStates[i] = shl( pStates[i + nSamplesUpd], scale ); #endif @@ -508,7 +510,7 @@ void cldfbAnalysisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, FOR( i = 0; i < nSamples; i++ ) { #ifdef BASOP_NOGLOB - pStates[offset + i] = shl_sat( *timeIn, scale ); + pStates[offset + i] = shl_sat( *timeIn, scale ); // Q(15-scale) #else pStates[offset + i] = shl( *timeIn, scale ); #endif @@ -521,80 +523,80 @@ void cldfbAnalysisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, FOR( i = 0; i < M4; i++ ) { /* prototype filter */ - r1 = L_msu0( 0, pFilter1[sub( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 0, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 1, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 2, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 3, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 4, L2 ), shl( i, 1 ) )] ); - - r2 = L_msu0( 0, pFilter2[add( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates2[add( i_mult( 0, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter2[add( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates2[add( i_mult( 1, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter2[add( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates2[add( i_mult( 2, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter2[add( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates2[add( i_mult( 3, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter2[add( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates2[add( i_mult( 4, L2 ), shl( i, 1 ) )] ); - - i1 = L_msu0( 0, pFilter3[add( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 0, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter3[add( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 1, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter3[add( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 2, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter3[add( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 3, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter3[add( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 4, L2 ), shl( i, 1 ) )] ); - - i2 = L_msu0( 0, pFilter4[sub( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates4[sub( i_mult( 0, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter4[sub( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates4[sub( i_mult( 1, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter4[sub( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates4[sub( i_mult( 2, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter4[sub( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates4[sub( i_mult( 3, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter4[sub( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates4[sub( i_mult( 4, L2 ), shl( i, 1 ) )] ); + r1 = L_msu0( 0, pFilter1[0 - ( p_stride * ( i * 2 ) )], pStates1[( 0 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[1 - ( p_stride * ( i * 2 ) )], pStates1[( 1 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[2 - ( p_stride * ( i * 2 ) )], pStates1[( 2 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[3 - ( p_stride * ( i * 2 ) )], pStates1[( 3 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[4 - ( p_stride * ( i * 2 ) )], pStates1[( 4 * L2 ) - ( i * 2 )] ); + + r2 = L_msu0( 0, pFilter2[0 + ( p_stride * ( i * 2 ) )], pStates2[( 0 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter2[1 + ( p_stride * ( i * 2 ) )], pStates2[( 1 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter2[2 + ( p_stride * ( i * 2 ) )], pStates2[( 2 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter2[3 + ( p_stride * ( i * 2 ) )], pStates2[( 3 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter2[4 + ( p_stride * ( i * 2 ) )], pStates2[( 4 * L2 ) + ( i * 2 )] ); + + i1 = L_msu0( 0, pFilter3[0 + ( p_stride * ( i * 2 ) )], pStates3[( 0 * L2 ) + ( i * 2 )] ); + i1 = L_msu0( i1, pFilter3[1 + ( p_stride * ( i * 2 ) )], pStates3[( 1 * L2 ) + ( i * 2 )] ); + i1 = L_msu0( i1, pFilter3[2 + ( p_stride * ( i * 2 ) )], pStates3[( 2 * L2 ) + ( i * 2 )] ); + i1 = L_msu0( i1, pFilter3[3 + ( p_stride * ( i * 2 ) )], pStates3[( 3 * L2 ) + ( i * 2 )] ); + i1 = L_msu0( i1, pFilter3[4 + ( p_stride * ( i * 2 ) )], pStates3[( 4 * L2 ) + ( i * 2 )] ); + + i2 = L_msu0( 0, pFilter4[0 - ( p_stride * ( i * 2 ) )], pStates4[( 0 * L2 ) - ( i * 2 )] ); + i2 = L_msu0( i2, pFilter4[1 - ( p_stride * ( i * 2 ) )], pStates4[( 1 * L2 ) - ( i * 2 )] ); + i2 = L_msu0( i2, pFilter4[2 - ( p_stride * ( i * 2 ) )], pStates4[( 2 * L2 ) - ( i * 2 )] ); + i2 = L_msu0( i2, pFilter4[3 - ( p_stride * ( i * 2 ) )], pStates4[( 3 * L2 ) - ( i * 2 )] ); + i2 = L_msu0( i2, pFilter4[4 - ( p_stride * ( i * 2 ) )], pStates4[( 4 * L2 ) - ( i * 2 )] ); /* folding */ rBuffer[2 * i] = L_sub( r1, r2 ); move32(); - rBuffer[add( shl( i, 1 ), 1 )] = L_negate( L_add( i1, i2 ) ); + rBuffer[( ( i * 2 ) + 1 )] = L_negate( L_add( i1, i2 ) ); move32(); /* folding */ iBuffer[2 * i] = L_add( r1, r2 ); move32(); - iBuffer[add( shl( i, 1 ), 1 )] = L_sub( i1, i2 ); + iBuffer[( ( i * 2 ) + 1 )] = L_sub( i1, i2 ); move32(); } FOR( i = M4; i < m2; i++ ) { /* prototype filter */ - r1 = L_msu0( 0, pFilter1[sub( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 0, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 1, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 2, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 3, L2 ), shl( i, 1 ) )] ); - r1 = L_msu0( r1, pFilter1[sub( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates1[sub( i_mult( 4, L2 ), shl( i, 1 ) )] ); - - r2 = L_msu0( 0, pFilter6[add( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates6[add( i_mult( 0, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter6[add( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates6[add( i_mult( 1, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter6[add( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates6[add( i_mult( 2, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter6[add( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates6[add( i_mult( 3, L2 ), shl( i, 1 ) )] ); - r2 = L_msu0( r2, pFilter6[add( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates6[add( i_mult( 4, L2 ), shl( i, 1 ) )] ); - - i1 = L_msu0( 0, pFilter5[sub( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates5[sub( i_mult( 0, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter5[sub( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates5[sub( i_mult( 1, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter5[sub( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates5[sub( i_mult( 2, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter5[sub( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates5[sub( i_mult( 3, L2 ), shl( i, 1 ) )] ); - i1 = L_msu0( i1, pFilter5[sub( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates5[sub( i_mult( 4, L2 ), shl( i, 1 ) )] ); - - i2 = L_msu0( 0, pFilter3[add( 0, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 0, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter3[add( 1, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 1, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter3[add( 2, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 2, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter3[add( 3, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 3, L2 ), shl( i, 1 ) )] ); - i2 = L_msu0( i2, pFilter3[add( 4, i_mult( p_stride, shl( i, 1 ) ) )], pStates3[add( i_mult( 4, L2 ), shl( i, 1 ) )] ); + r1 = L_msu0( 0, pFilter1[0 - ( p_stride * ( i * 2 ) )], pStates1[( 0 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[1 - ( p_stride * ( i * 2 ) )], pStates1[( 1 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[2 - ( p_stride * ( i * 2 ) )], pStates1[( 2 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[3 - ( p_stride * ( i * 2 ) )], pStates1[( 3 * L2 ) - ( i * 2 )] ); + r1 = L_msu0( r1, pFilter1[4 - ( p_stride * ( i * 2 ) )], pStates1[( 4 * L2 ) - ( i * 2 )] ); + + r2 = L_msu0( 0, pFilter6[0 + ( p_stride * ( i * 2 ) )], pStates6[( 0 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter6[1 + ( p_stride * ( i * 2 ) )], pStates6[( 1 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter6[2 + ( p_stride * ( i * 2 ) )], pStates6[( 2 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter6[3 + ( p_stride * ( i * 2 ) )], pStates6[( 3 * L2 ) + ( i * 2 )] ); + r2 = L_msu0( r2, pFilter6[4 + ( p_stride * ( i * 2 ) )], pStates6[( 4 * L2 ) + ( i * 2 )] ); + + i1 = L_msu0( 0, pFilter5[0 - ( p_stride * ( i * 2 ) )], pStates5[( 0 * L2 ) - ( i * 2 )] ); + i1 = L_msu0( i1, pFilter5[1 - ( p_stride * ( i * 2 ) )], pStates5[( 1 * L2 ) - ( i * 2 )] ); + i1 = L_msu0( i1, pFilter5[2 - ( p_stride * ( i * 2 ) )], pStates5[( 2 * L2 ) - ( i * 2 )] ); + i1 = L_msu0( i1, pFilter5[3 - ( p_stride * ( i * 2 ) )], pStates5[( 3 * L2 ) - ( i * 2 )] ); + i1 = L_msu0( i1, pFilter5[4 - ( p_stride * ( i * 2 ) )], pStates5[( 4 * L2 ) - ( i * 2 )] ); + + i2 = L_msu0( 0, pFilter3[0 + ( p_stride * ( i * 2 ) )], pStates3[( 0 * L2 ) + ( i * 2 )] ); + i2 = L_msu0( i2, pFilter3[1 + ( p_stride * ( i * 2 ) )], pStates3[( 1 * L2 ) + ( i * 2 )] ); + i2 = L_msu0( i2, pFilter3[2 + ( p_stride * ( i * 2 ) )], pStates3[( 2 * L2 ) + ( i * 2 )] ); + i2 = L_msu0( i2, pFilter3[3 + ( p_stride * ( i * 2 ) )], pStates3[( 3 * L2 ) + ( i * 2 )] ); + i2 = L_msu0( i2, pFilter3[4 + ( p_stride * ( i * 2 ) )], pStates3[( 4 * L2 ) + ( i * 2 )] ); /* folding */ rBuffer[2 * i] = L_add( r1, r2 ); move32(); - rBuffer[add( shl( i, 1 ), 1 )] = L_sub( i1, i2 ); + rBuffer[( ( i * 2 ) + 1 )] = L_sub( i1, i2 ); move32(); /* folding */ iBuffer[2 * i] = L_sub( r1, r2 ); move32(); - iBuffer[add( shl( i, 1 ), 1 )] = L_add( i1, i2 ); + iBuffer[( ( i * 2 ) + 1 )] = L_add( i1, i2 ); move32(); } @@ -655,10 +657,11 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, Word32 **rAnalysis, Word32 **iAnalysis, const CLDFB_SCALE_FACTOR *scaleFactor, - Word16 *timeOut, + Word16 *timeOut, // Q(15-timeOut_e) const Word16 timeOut_e, const Word16 nTimeSlots, - Word32 *pWorkBuffer ) + Word32 *pWorkBuffer // Qx +) { Word16 i; Word16 k; @@ -709,7 +712,7 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, Lz = s_min( cldfbBank->lsb, sub( m, cldfbBank->bandsToZero ) ); Mz = s_min( cldfbBank->usb, sub( m, cldfbBank->bandsToZero ) ); stride = 1; /* constant */ - + move16(); channels0 = sub( m, cldfbBank->zeros ); channels1 = sub( m, 1 ); channels2 = shl( m, 1 ); @@ -726,7 +729,7 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, iBuffer = &pWorkBuffer[m]; nBuffer = (Word16 *) ( &pWorkBuffer[L2] ); - rAnalysisS = &pWorkBuffer[i_mult( 3, m )]; + rAnalysisS = &pWorkBuffer[3 * m]; iAnalysisS = &pWorkBuffer[4 * m]; rRotVctr = cldfbBank->rRotVctr; @@ -756,7 +759,7 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, scale = add( outScale, timeOut_e ); IF( NE_16( scale, cldfbBank->FilterStates_eg ) ) { - Scale_sig( cldfbBank->FilterStates, statesSizeM2, sub( cldfbBank->FilterStates_eg, scale ) ); + Scale_sig( cldfbBank->FilterStates, statesSizeM2, sub( cldfbBank->FilterStates_eg, scale ) ); // Q(15-scale) cldfbBank->FilterStates_eg = scale; move16(); } @@ -787,9 +790,9 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, { FOR( ; i < m; i += 2 ) { - rAnalysisS[i] = L_deposit_l( 0 ); + rAnalysisS[i] = 0; move32(); - iAnalysisS[i] = L_deposit_l( 0 ); + iAnalysisS[i] = 0; move32(); } } @@ -817,9 +820,9 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, { FOR( ; i < m; i += 2 ) { - rAnalysisS[i] = L_deposit_l( 0 ); + rAnalysisS[i] = 0; move32(); - iAnalysisS[i] = L_deposit_l( 0 ); + iAnalysisS[i] = 0; move32(); } } @@ -845,7 +848,7 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, calcModulationAndFolding( nBuffer, rBuffer, iBuffer, rRotVctr, iRotVctr, cldfbBank->synGain, scale, m, m2 ); /* prototype filter */ - pStates = &cldfbBank->FilterStates[i_mult( k, L2 )]; + pStates = &cldfbBank->FilterStates[( k * L2 )]; pFilterS = &cldfbBank->p_filter[0]; pFilterM = &cldfbBank->p_filter[shr( cldfbBank->p_filter_length, 1 )]; @@ -878,7 +881,7 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, BASOP_SATURATE_WARNING_OFF_EVS #ifdef BASOP_NOGLOB - timeOut[i_mult( sub( offset1, i ), stride )] = round_fx_sat( L_shl_sat( acc, outScale ) ); + timeOut[( offset1 - i ) * stride] = round_fx_sat( L_shl_sat( acc, outScale ) ); #else timeOut[( offset1 - i ) * stride] = round_fx( L_shl( acc, outScale ) ); #endif @@ -888,8 +891,8 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, FOR( ; i < cldfbBank->no_channels; i++ ) { - pStatesI = &pStates[add( i, channels2 )]; - pStatesR = &pStates[add( add( i, channels2 ), channels3 )]; + pStatesI = &pStates[i + channels2]; + pStatesR = &pStates[( i + channels2 ) + channels3]; acc = L_mult( *pStatesI, *pFilterS++ ); acc = L_mac( acc, *pStatesR, *pFilterM++ ); @@ -914,7 +917,7 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, BASOP_SATURATE_WARNING_OFF_EVS #ifdef BASOP_NOGLOB - timeOut[i_mult( sub( offset2, i ), stride )] = round_fx_sat( L_shl_sat( acc, outScale ) ); + timeOut[( offset2 - i ) * stride] = round_fx_sat( L_shl_sat( acc, outScale ) ); #else timeOut[( offset2 - i ) * stride] = round_fx( L_shl( acc, outScale ) ); #endif @@ -924,17 +927,17 @@ void cldfbSynthesisFiltering( HANDLE_CLDFB_FILTER_BANK cldfbBank, FOR( i = 0; i < cldfbBank->no_channels; i++ ) { - pStates[add( statesSizeM1, i )] = nBuffer[sub( channels1, i )]; + pStates[statesSizeM1 + i] = nBuffer[channels1 - i]; move16(); - pStates[add( statesSizeM2, i )] = nBuffer[sub( add( channels1, m ), i )]; + pStates[statesSizeM2 + i] = nBuffer[( channels1 + m ) - i]; move16(); } - timeOut = &timeOut[i_mult( m, stride )]; + timeOut = &timeOut[m * stride]; } /* move filter states */ - Copy( &cldfbBank->FilterStates[i_mult( nTimeSlots, L2 )], cldfbBank->FilterStates, statesSizeM2 ); + Copy( &cldfbBank->FilterStates[nTimeSlots * L2], cldfbBank->FilterStates, statesSizeM2 ); set16_fx( &cldfbBank->FilterStates[statesSizeM2], 0, L2 ); } @@ -1040,8 +1043,8 @@ ivas_error openCldfb( { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); } - hs->flags &= ~CLDFB_FLAG_KEEP_STATES; - + hs->flags = s_and( hs->flags, ~CLDFB_FLAG_KEEP_STATES ); + move16(); configureCldfb( hs, maxCldfbBands, frameSize ); hs->memory = NULL; @@ -1140,10 +1143,10 @@ void resampleCldfb( HANDLE_CLDFB_FILTER_BANK hs, */ Word16 AnalysisPostSpectrumScaling_Fx( HANDLE_CLDFB_FILTER_BANK cldfbBank, /*!< Handle of cldfbBank */ - Word32 **rSubband32, /*!< Real bands */ - Word32 **iSubband32, /*!< Imaginary bands */ - Word16 **rSubband16, /*!< Real bands */ - Word16 **iSubband16, /*!< Imaginary bands */ + Word32 **rSubband32, /*!< Real bands Q(cldfbSacle)*/ + Word32 **iSubband32, /*!< Imaginary bands Q(cldfbSacle)*/ + Word16 **rSubband16, /*!< Real bands Q(cldfbSacle)*/ + Word16 **iSubband16, /*!< Imaginary bands Q(cldfbScale)*/ Word16 *cldfbScale /*!< CLDFB lowband scalefactor */ ) { @@ -1165,14 +1168,14 @@ AnalysisPostSpectrumScaling_Fx( HANDLE_CLDFB_FILTER_BANK cldfbBank, /*!< Handle FOR( j = 0; j < cldfbBank->no_channels; j++ ) { #ifdef BASOP_NOGLOB - rSubband16[i][j] = round_fx_sat( L_shl_sat( rSubband32[i][j], headRoom ) ); - iSubband16[i][j] = round_fx_sat( L_shl_sat( iSubband32[i][j], headRoom ) ); + rSubband16[i][j] = round_fx_sat( L_shl_sat( rSubband32[i][j], headRoom ) ); // Q(cldfbSacle_headRoom) + iSubband16[i][j] = round_fx_sat( L_shl_sat( iSubband32[i][j], headRoom ) ); // Q(cldfbSacle+headRoom) #else rSubband16[i][j] = round_fx( L_shl( rSubband32[i][j], headRoom ) ); iSubband16[i][j] = round_fx( L_shl( iSubband32[i][j], headRoom ) ); #endif - move32(); - move32(); + move16(); + move16(); } } @@ -1192,12 +1195,12 @@ AnalysisPostSpectrumScaling_Fx( HANDLE_CLDFB_FILTER_BANK cldfbBank, /*!< Handle void analysisCldfbEncoder_fx( Encoder_State *st_fx, /* i/o: encoder state structure */ - const Word16 *timeIn, + const Word16 *timeIn, // Q15 Word32 realBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], Word32 imagBuffer[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - Word16 realBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - Word16 imagBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], - Word32 enerBuffSum[CLDFB_NO_CHANNELS_MAX], + Word16 realBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], // Q(enerScale.lb_scale16) + Word16 imagBuffer16[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], // Q(enerScale.lb_scale16) + Word32 enerBuffSum[CLDFB_NO_CHANNELS_MAX], // Q(31-enerBuffSum_exp) Word16 *enerBuffSum_exp, CLDFB_SCALE_FACTOR *scale ) { @@ -1232,7 +1235,8 @@ void analysisCldfbEncoder_fx( enerScale.lb_scale = negate( scale->lb_scale ); enerScale.lb_scale16 = negate( scale->lb_scale ); - + move16(); + move16(); /* get 16bit respresentation */ AnalysisPostSpectrumScaling_Fx( st_fx->cldfbAnaEnc, @@ -1294,8 +1298,8 @@ void GetEnergyCldfb( Word32 *energyLookahead, /*!< o: Q(*sf_energyLookahead) { FOR( j = 0; j < numberBands; j++ ) { - nrg = L_mult0( realValues[k][j], realValues[k][j] ); - nrg = L_mac0( nrg, imagValues[k][j], imagValues[k][j] ); + nrg = L_mult0( realValues[k][j], realValues[k][j] ); // Q(2*sf_Values) + nrg = L_mac0( nrg, imagValues[k][j], imagValues[k][j] ); // Q(2*sf_Values) energyValues[k][j] = nrg; move32(); @@ -1325,13 +1329,13 @@ void GetEnergyCldfb( Word32 *energyLookahead, /*!< o: Q(*sf_energyLookahead) FOR( j = 0; j < numberBands; j++ ) { - energyValuesSum[j] = L_deposit_l( 0 ); + energyValuesSum[j] = 0; move32(); energyValuesSumE[j] = 31; move16(); FOR( k = 0; k < CLDFB_NO_COL_MAX; k++ ) { - nrg = L_shr_r( energyValues[k][j], sub( energyValuesSumE[j], 31 ) ); + nrg = L_shr_r( energyValues[k][j], sub( energyValuesSumE[j], 31 ) ); // Q(2*sf_Values - (energyValuesSumE[j]-31)) IF( LT_32( L_sub( maxWord32, nrg ), energyValuesSum[j] ) ) { energyValuesSumE[j] = add( energyValuesSumE[j], 1 ); @@ -1352,7 +1356,7 @@ void GetEnergyCldfb( Word32 *energyLookahead, /*!< o: Q(*sf_energyLookahead) } FOR( j = 0; j < numberBands; j++ ) { - energyValuesSum[j] = L_shr_r( energyValuesSum[j], sub( *energyValuesSum_Exp, energyValuesSumE[j] ) ); + energyValuesSum[j] = L_shr_r( energyValuesSum[j], sub( *energyValuesSum_Exp, energyValuesSumE[j] ) ); // Q(energyValuesSum_Exp - (2*sf_Values)) move32(); } *energyValuesSum_Exp = sub( *energyValuesSum_Exp, shl( sf_Values, 1 ) ); @@ -1368,8 +1372,8 @@ void GetEnergyCldfb( Word32 *energyLookahead, /*!< o: Q(*sf_energyLookahead) /* sum up CLDFB energy above 8 kHz */ s = BASOP_util_norm_s_bands2shift( i_mult( numberColsL, numberBandsM20 ) ); s = sub( s, 4 ); - nrg = L_deposit_l( 0 ); - + nrg = 0; + move32(); FOR( k = 0; k < numberColsL; k++ ) { FOR( j = 20; j < numberBandsM; j++ ) @@ -1386,7 +1390,7 @@ void GetEnergyCldfb( Word32 *energyLookahead, /*!< o: Q(*sf_energyLookahead) sm = sub( s_min( s, *sf_energyLookahead ), 1 ); *energyHF = L_add( L_shr( nrg, limitScale32( sub( s, sm ) ) ), - L_shr( *energyLookahead, sub( *sf_energyLookahead, sm ) ) ); + L_shr( *energyLookahead, sub( *sf_energyLookahead, sm ) ) ); // Q(31-(-nm)) move32(); *energyHF_Exp = negate( sm ); @@ -1395,8 +1399,8 @@ void GetEnergyCldfb( Word32 *energyLookahead, /*!< o: Q(*sf_energyLookahead) /* process look-ahead region */ s = BASOP_util_norm_s_bands2shift( i_mult( numLookahead, numberBandsM20 ) ); s = sub( s, 2 ); - nrg = L_deposit_l( 0 ); - + nrg = 0; + move32(); FOR( k = numberColsL; k < numberCols; k++ ) { FOR( j = 20; j < numberBandsM; j++ ) @@ -1642,13 +1646,14 @@ cldfb_init_proto_and_twiddles( HANDLE_CLDFB_FILTER_BANK hs ) /* i: cldfb handle ivas_error cldfb_save_memory( HANDLE_CLDFB_FILTER_BANK hs ) /* i: cldfb handle */ { - + test(); IF( hs->memory != NULL || hs->memory_length != 0 ) { /* memory already stored; Free memory first */ return IVAS_ERR_OK; } hs->memory_length = cldfb_get_memory_length( hs ); + move16(); hs->memory = (Word16 *) calloc( hs->memory_length + CLDFB_MEM_EXPONENTS + 1, sizeof( Word16 ) ); /* save the memory */ diff --git a/lib_com/fft_cldfb_fx.c b/lib_com/fft_cldfb_fx.c index ba5ca4e1e46a0ed883f5ba442c0fe14f0f914f29..b4dbcc0959ccbd513bc42d47eb0733e06fd96cb9 100644 --- a/lib_com/fft_cldfb_fx.c +++ b/lib_com/fft_cldfb_fx.c @@ -124,7 +124,7 @@ cmplx CL_dscale_t( cmplx x, Word16 y1, Word16 y2 ); * * \return void */ -static void fft8_with_cmplx_data( cmplx *inp ) +static void fft8_with_cmplx_data( cmplx *inp /*Qx*/ ) { cmplx x0, x1, x2, x3, x4, x5, x6, x7; cmplx s0, s1, s2, s3, s4, s5, s6, s7; @@ -204,7 +204,7 @@ static void fft8_with_cmplx_data( cmplx *inp ) * * \return void */ -static void fft5_with_cmplx_data( cmplx *inp ) +static void fft5_with_cmplx_data( cmplx *inp /*Qx*/ ) { cmplx x0, x1, x2, x3, x4; cmplx y1, y2, y3, y4; @@ -262,7 +262,7 @@ static void fft5_with_cmplx_data( cmplx *inp ) * * \return void */ -static void fft10_with_cmplx_data( cmplx *inp_data ) +static void fft10_with_cmplx_data( cmplx *inp_data /*Qx*/ ) { cmplx r1, r2, r3, r4; cmplx x0, x1, x2, x3, x4, t; @@ -369,7 +369,7 @@ static void fft10_with_cmplx_data( cmplx *inp_data ) * * \return void */ -static void fft20_with_cmplx_data( cmplx *inp_data ) +static void fft20_with_cmplx_data( cmplx *inp_data /*Qx*/ ) { cmplx r1, r2, r3, r4; cmplx x0, x1, x2, x3, x4; @@ -617,7 +617,7 @@ static void fft20_with_cmplx_data( cmplx *inp_data ) * * \return void */ -static void fft30_with_cmplx_data( cmplx *inp ) +static void fft30_with_cmplx_data( cmplx *inp /*Qx*/ ) { cmplx *l = &inp[0]; cmplx *h = &inp[15]; @@ -1023,7 +1023,7 @@ static void fft30_with_cmplx_data( cmplx *inp ) * Interface functions FFT subroutines *--------------------------------------------------------------------*/ void fft_cldfb_fx( - Word32 *data, /* i/o: input/output vector */ + Word32 *data, /* i/o: input/output vector Qx*/ const Word16 size /* size of fft operation */ ) { diff --git a/lib_com/fft_rel.c b/lib_com/fft_rel.c index bad84753f4b414c66ee190892925c2d602460841..88f80e798703ed2b34902db2703d30753c1b7698 100644 --- a/lib_com/fft_rel.c +++ b/lib_com/fft_rel.c @@ -303,7 +303,7 @@ void fft_rel( void fft_rel_fx( - Word16 x[], /* i/o: input/output vector */ + Word16 x[], /* i/o: input/output vector Qx */ const Word16 n, /* i : vector length */ const Word16 m /* i : log2 of vector length */ ) @@ -326,22 +326,22 @@ void fft_rel_fx( j = 0; move16(); - x0 = &x[0]; + x0 = &x[0]; // Qx move16(); FOR( i = 0; i < n - 1; i++ ) { IF( LT_16( i, j ) ) { - xt = x[j]; + xt = x[j]; // Qx move16(); - x[j] = *x0; + x[j] = *x0; // Qx move16(); - *x0 = xt; + *x0 = xt; // Qx move16(); } x0++; k = shr( n, 1 ); - WHILE( LE_16( k, j ) ) + WHILE( ( k <= j ) ) { j = sub( j, k ); k = shr( k, 1 ); @@ -357,7 +357,7 @@ void fft_rel_fx( move16(); x1 = &x[1]; move16(); - FOR( i = 0; i < shr( n, 1 ); i++ ) + FOR( i = 0; i < ( n >> 1 ); i++ ) { xt = *x0; move16(); @@ -425,8 +425,8 @@ void fft_rel_fx( move16(); /* x[i+n2+n4] = -x[i+n2+n4]; */ - s = sincos_t_fx + step; - c = s + 64; + s = sincos_t_fx + step; // Q15 + c = s + 64; // Q15 xi1 = x + add( i, 1 ); xi3 = xi1 + n2; xi2 = xi3 - 2; @@ -435,8 +435,8 @@ void fft_rel_fx( FOR( j = 1; j < n4; j++ ) { #ifdef BASOP_NOGLOB - t1 = add_o( mult_r( *xi3, *c ), mult_r( *xi4, *s ), &Overflow ); /* t1 = *xi3**(pt_c+ind) + *xi4**(pt_s+ind); */ - t2 = sub_o( mult_r( *xi3, *s ), mult_r( *xi4, *c ), &Overflow ); /* t2 = *xi3**(pt_s+ind) - *xi4**(pt_c+ind); */ + t1 = add_o( mult_r( *xi3, *c ), mult_r( *xi4, *s ), &Overflow ); /* t1 = *xi3**(pt_c+ind) + *xi4**(pt_s+ind); Qx */ + t2 = sub_o( mult_r( *xi3, *s ), mult_r( *xi4, *c ), &Overflow ); /* t2 = *xi3**(pt_s+ind) - *xi4**(pt_c+ind); Qx */ *xi4 = sub_o( *xi2, t2, &Overflow ); #else /* BASOP_NOGLOB */ t1 = add( mult_r( *xi3, *c ), mult_r( *xi4, *s ) ); /* t1 = *xi3**(pt_c+ind) + *xi4**(pt_s+ind); */ @@ -482,7 +482,7 @@ void fft_rel_fx( } void fft_rel_fx32( - Word32 x[], /* i/o: input/output vector */ + Word32 x[], /* i/o: input/output vector Qx */ const Word16 n, /* i : vector length */ const Word16 m /* i : log2 of vector length */ ) @@ -517,9 +517,9 @@ void fft_rel_fx32( k = *idx++; move16(); - *x2++ = L_add( x[shr( j, 1 )], x[shr( k, 1 )] ); + *x2++ = L_add( x[( j >> 1 )], x[( k >> 1 )] ); // Qx move16(); - *x2++ = L_sub( x[shr( j, 1 )], x[shr( k, 1 )] ); + *x2++ = L_sub( x[( j >> 1 )], x[( k >> 1 )] ); // Qx move16(); } } @@ -533,9 +533,9 @@ void fft_rel_fx32( k = *idx++; move16(); - *x2++ = L_add( x[j], x[k] ); + *x2++ = L_add( x[j], x[k] ); // Qx move16(); - *x2++ = L_sub( x[j], x[k] ); + *x2++ = L_sub( x[j], x[k] ); // Qx move16(); } } @@ -551,15 +551,15 @@ void fft_rel_fx32( k = shl( *idx, 1 ); idx++; - *x2even++ = L_add( x[j], x[k] ); + *x2even++ = L_add( x[j], x[k] ); // Qx move16(); - *x2even++ = L_sub( x[j], x[k] ); + *x2even++ = L_sub( x[j], x[k] ); // Qx move16(); j = add( j, 1 ); k = add( k, 1 ); - *x2odd++ = L_add( x[j], x[k] ); + *x2odd++ = L_add( x[j], x[k] ); // Qx move16(); - *x2odd++ = L_sub( x[j], x[k] ); + *x2odd++ = L_sub( x[j], x[k] ); // Qx move16(); } } @@ -576,7 +576,7 @@ void fft_rel_fx32( { x0 = temp; x1 = x0 + 2; - x2 = x; + x2 = x; // Qx FOR( i = 0; i < n; i += 4 ) { @@ -604,12 +604,12 @@ void fft_rel_fx32( j = 0; move16(); - x0 = &x[0]; - FOR( i = 0; i < sub( n, 1 ); i++ ) + x0 = &x[0]; // Qx + FOR( i = 0; i < ( n - 1 ); i++ ) { IF( LT_16( i, j ) ) { - xt = x[j]; + xt = x[j]; // Qx move32(); x[j] = *x0; move32(); @@ -618,7 +618,7 @@ void fft_rel_fx32( } x0++; k = shr( n, 1 ); - WHILE( LE_16( k, j ) ) + WHILE( ( k <= j ) ) { j = sub( j, k ); k = shr( k, 1 ); @@ -630,13 +630,13 @@ void fft_rel_fx32( * Length two butterflies *-----------------------------------------------------------------*/ - x0 = &x[0]; - x1 = &x[1]; - FOR( i = 0; i < shr( n, 1 ); i++ ) + x0 = &x[0]; // Qx + x1 = &x[1]; // Qx + FOR( i = 0; i < ( n >> 1 ); i++ ) { - *x1 = L_sub( *x0, *x1 ); + *x1 = L_sub( *x0, *x1 ); // Qx move32(); - *x0 = L_sub( L_shl( *x0, 1 ), *x1 ); + *x0 = L_sub( L_shl( *x0, 1 ), *x1 ); //*x0 * 2 - *x1 (Qx) move32(); x0++; @@ -653,16 +653,16 @@ void fft_rel_fx32( /* for_ (k = 2; k < 3; k++) */ { - x0 = x; + x0 = x; // Qx x1 = x0 + 2; FOR( i = 0; i < n; i += 4 ) { - *x1 = L_sub( *x0, *x1 ); /* x[i+n2] = xt - x[i+n2]; */ + *x1 = L_sub( *x0, *x1 ); /* x[i+n2] = xt - x[i+n2]; Qx*/ move32(); - *x0 = L_sub( L_shl( *x0, 1 ), *x1++ ); /* x[i] = xt + x[i+n2]; */ + *x0 = L_sub( L_shl( *x0, 1 ), *x1++ ); /* x[i] = xt + x[i+n2]; */ /**x0 * 2 - *x1 (Qx)*/ move32(); - *x1 = L_negate( *x1 ); /* x[i+n2+n4] = -x[i+n2+n4]; */ + *x1 = L_negate( *x1 ); /* x[i+n2+n4] = -x[i+n2+n4]; Qx*/ move32(); x0 += 4; @@ -707,13 +707,13 @@ void fft_rel_fx32( { *x1 = L_sub( *x0, *x1 ); /* x[i+n2] = xt - x[i+n2]; */ move32(); - *x0 = L_sub( L_shl( *x0, 1 ), *x1 ); /* x[i] = xt + x[i+n2]; */ + *x0 = L_sub( L_shl( *x0, 1 ), *x1 ); /* x[i] = xt + x[i+n2]; */ /**x0 * 2 - *x1 (Qx)*/ move32(); - *x2 = L_negate( *x2 ); /* x[i+n2+n4] = -x[i+n2+n4]; */ + *x2 = L_negate( *x2 ); /* x[i+n2+n4] = -x[i+n2+n4]; Qx */ move32(); - s = sincos_t_ext_fx; - c = s + N_MAX_FFT / 4; /* 1024/4 = 256, 256/4=64 */ + s = sincos_t_ext_fx; // Q15 + c = s + N_MAX_FFT / 4; /* 1024/4 = 256, 256/4=64 Q15*/ xi1 = x0; xi3 = xi1 + n2; xi2 = xi3; @@ -729,16 +729,16 @@ void fft_rel_fx32( c += step; s += step; /* autoincrement by ar0 */ - t1 = L_add( Mpy_32_16_1( *xi3, *c ), Mpy_32_16_1( *xi4, *s ) ); /* t1 = *xi3**(pt_c+ind) + *xi4**(pt_s+ind); */ - t2 = L_sub( Mpy_32_16_1( *xi3, *s ), Mpy_32_16_1( *xi4, *c ) ); /* t2 = *xi3**(pt_s+ind) - *xi4**(pt_c+ind); */ + t1 = L_add( Mpy_32_16_1( *xi3, *c ), Mpy_32_16_1( *xi4, *s ) ); /* t1 = *xi3**(pt_c+ind) + *xi4**(pt_s+ind); Qx*/ + t2 = L_sub( Mpy_32_16_1( *xi3, *s ), Mpy_32_16_1( *xi4, *c ) ); /* t2 = *xi3**(pt_s+ind) - *xi4**(pt_c+ind); Qx*/ *xi4 = L_sub( *xi2, t2 ); move32(); *xi2 = L_sub( *xi1, t1 ); move32(); - *xi1 = L_sub( L_shl( *xi1, 1 ), *xi2 ); + *xi1 = L_sub( L_shl( *xi1, 1 ), *xi2 ); // Qx move32(); - *xi3 = L_negate( L_add( L_shl( t2, 1 ), *xi4 ) ); + *xi3 = L_negate( L_add( L_shl( t2, 1 ), *xi4 ) ); // Qx move32(); } diff --git a/lib_com/fft_rel_fx.c b/lib_com/fft_rel_fx.c index 85a5a322439c83a4ba0d55e79986e678c28e5b53..1285049bcb6afd76f90b084ac1a759671f2dbfec 100644 --- a/lib_com/fft_rel_fx.c +++ b/lib_com/fft_rel_fx.c @@ -72,8 +72,8 @@ static void c_fft_fx( const Word16 *phs_tbl, /* i : Table of phases */ Word16 SIZE, /* i : Size of the FFT */ Word16 NUM_STAGE, /* i : Number of stages */ - const Word16 *in_ptr, /* i : coefficients in the order re[0], re[n/2], re[1], im[1], ..., re[n/2-1], im[n/2-1] */ - Word16 *out_ptr, /* o : coefficients in the order re[0], re[n/2], re[1], im[1], ..., re[n/2-1], im[n/2-1] */ + const Word16 *in_ptr, /* i : coefficients in the order re[0], re[n/2], re[1], im[1], ..., re[n/2-1], im[n/2-1] Qx*/ + Word16 *out_ptr, /* o : coefficients in the order re[0], re[n/2], re[1], im[1], ..., re[n/2-1], im[n/2-1] Q(x - 1)*/ /* in_ptr & out_ptr must not overlap! */ const Word16 isign ) /* i : 1=fft, otherwise it is ifft*/ { @@ -129,7 +129,7 @@ static void c_fft_fx( * is counted as a move16() */ - input_ptr1 = in_ptr + ( const Word16 )( (uintptr_t) ( *table_ptr++ ) >> (uintptr_t) shift ); + input_ptr1 = in_ptr + ( const Word16 )( (uintptr_t) ( *table_ptr++ ) >> (uintptr_t) shift ); // Qx L_tmp1 = L_mult( *input_ptr1++, 16384 ); L_tmp2 = L_mult( *input_ptr1, 16384 ); @@ -379,8 +379,8 @@ void r_fft_fx_lc( const Word16 SIZE, /* i : Size of the FFT */ const Word16 SIZE2, /* i : Size / 2 */ const Word16 NUM_STAGE, /* i : Number of stage */ - const Word16 *in_ptr, /* i : coefficients in the order re[0], re[1], ... re[n/2], im[n/2-1], im[n/2-2], ..., im[1] */ - Word16 *out_ptr, /* o : coefficients in the order re[0], re[1], ... re[n/2], im[n/2-1], im[n/2-2], ..., im[1] */ + const Word16 *in_ptr, /* i : coefficients in the order re[0], re[1], ... re[n/2], im[n/2-1], im[n/2-2], ..., im[1] Qx*/ + Word16 *out_ptr, /* o : coefficients in the order re[0], re[1], ... re[n/2], im[n/2-1], im[n/2-2], ..., im[1] Q(x - 1)*/ const Word16 isign /* i : 1=fft, otherwize it's ifft */ ) { @@ -478,10 +478,10 @@ void r_fft_fx_lc( /* This is ok because we use these pointers for */ /* reading only. This is just to avoid declaring a */ /* bunch of 4 other pointer with const Word16 *. */ - ptImaDn = &in_ptr[SIZE - 1]; - ptRealUp = &in_ptr[1]; - ptImaUp = &in_ptr[SIZE2 + 1]; - ptRealDn = &in_ptr[SIZE2 - 1]; + ptImaDn = &in_ptr[SIZE - 1]; // Qx + ptRealUp = &in_ptr[1]; // Qx + ptImaUp = &in_ptr[SIZE2 + 1]; // Qx + ptRealDn = &in_ptr[SIZE2 - 1]; // Qx /* Now, handle the remaining positive frequencies */ FOR( i = 2; i <= SIZE2; i += 2 ) diff --git a/lib_com/fill_spectrum.c b/lib_com/fill_spectrum.c index 5fe270c3c0cb22150600cb8ae199b09b66235497..d9f24d8d551c3ff568dc04d2c36c3d78fa5bcd23 100644 --- a/lib_com/fill_spectrum.c +++ b/lib_com/fill_spectrum.c @@ -394,7 +394,7 @@ void ivas_fill_spectrum_fx( test(); test(); test(); - if ( EQ_16( length, L_FRAME32k ) && ( ( LT_16( env_stab, 16384 ) && *no_att_hangover == 0 ) || EQ_16( HQ_mode, HQ_HVQ ) ) ) + if ( EQ_16( length, L_FRAME32k ) && ( ( LT_16( env_stab, 16384 /*0.5.Q15*/ ) && *no_att_hangover == 0 ) || EQ_16( HQ_mode, HQ_HVQ ) ) ) { flag_32K_env_hangover = 1; move16(); @@ -437,7 +437,7 @@ void ivas_fill_spectrum_fx( * Normal mode BWE *----------------------------------------------------------------*/ - IF( EQ_16( HQ_mode, HQ_NORMAL ) ) + IF( HQ_mode == HQ_NORMAL ) { hq_fold_bwe_fx( last_sfm, sfm_end, num_sfm, coeff ); } @@ -625,7 +625,7 @@ void fill_spectrum_fx( move16(); } } - ELSE if ( EQ_16( HQ_mode, HQ_HVQ ) ) + ELSE IF( EQ_16( HQ_mode, HQ_HVQ ) ) { bin_th = sfm_end[last_sfm]; move16(); @@ -654,7 +654,7 @@ void fill_spectrum_fx( test(); test(); test(); - if ( EQ_16( length, L_FRAME32k ) && ( ( LT_16( env_stab, 16384 ) && *no_att_hangover == 0 ) || EQ_16( HQ_mode, HQ_HVQ ) ) ) + if ( EQ_16( length, L_FRAME32k ) && ( ( LT_16( env_stab, 16384 /*0.5.Q15*/ ) && *no_att_hangover == 0 ) || EQ_16( HQ_mode, HQ_HVQ ) ) ) { flag_32K_env_hangover = 1; move16(); @@ -697,7 +697,7 @@ void fill_spectrum_fx( * Normal mode BWE *----------------------------------------------------------------*/ - IF( EQ_16( HQ_mode, HQ_NORMAL ) ) + IF( HQ_mode == HQ_NORMAL ) { hq_fold_bwe_fx( last_sfm, sfm_end, num_sfm, coeff ); } diff --git a/lib_com/findpulse.c b/lib_com/findpulse.c index 72f1b399092b4c176ed5c7651d7349b591066ad2..3596b20b82b302d09755aa3487f6bc4617b50988 100644 --- a/lib_com/findpulse.c +++ b/lib_com/findpulse.c @@ -48,6 +48,7 @@ * Find first pitch pulse in a frame *----------------------------------------------------------------------------------*/ +#ifndef IVAS_FLOAT_FIXED /*! r: pulse position */ int16_t findpulse( const int16_t L_frame, /* i : length of the frame */ @@ -139,11 +140,12 @@ int16_t findpulse( return ( maxi ); } +#endif #ifdef IVAS_FLOAT_FIXED -Word16 findpulse_fx( /* o : pulse position */ +Word16 findpulse_fx( /* o : pulse position Q0 */ const Word16 L_frame, /* i : length of the frame */ - const Word16 res[], /* i : Residual signal <12 bits */ + const Word16 res[], /* i : Residual signal <12 bits Qx */ const Word16 T0, /* i : Pitch estimation Q0 */ const Word16 enc, /* i : enc = 1 -> encoder side; enc = 0 -> decoder side */ Word16 *sign /* i/o: sign of the maximum */ @@ -162,21 +164,21 @@ Word16 findpulse_fx( /* o : pulse position *------------------------------------------------------------------------*/ /* resf[0] = 0.50f * res[0] + 0.25f * res[1] */ - Ltmp = L_mult( res[0], 16384 ); - resf[0] = mac_r( Ltmp, res[1], 8192 ); + Ltmp = L_mult( res[0], 16384 /*0.5 (Q15)*/ ); /*Q(x + 15 + 1) => Q(x + 16)*/ + resf[0] = mac_r( Ltmp, res[1], 8192 /*0.25( Q15 )*/ ); /*Q(x + 16)*/ move16(); FOR( i = 1; i < L_frame - 1; i++ ) { /* resf[i] = 0.25f * res[i-1] + 0.5f * res[i] + 0.25f * res[i+1] */ - Ltmp = L_mult( 8192, res[i - 1] ); - Ltmp = L_mac( Ltmp, 16384, res[i] ); - resf[i] = mac_r( Ltmp, 8192, res[i + 1] ); + Ltmp = L_mult( 8192 /*0.25 (Q15)*/, res[i - 1] ); /*Q(x + 16)*/ + Ltmp = L_mac( Ltmp, 16384 /*0.5 (Q15)*/, res[i] ); /*Q(x + 16)*/ + resf[i] = mac_r( Ltmp, 8192 /*0.25 (Q15)*/, res[i + 1] ); /*Q(x*/ move16(); } /* resf[L_frame-1] = 0.25f * res[L_frame-2] + 0.50f * res[L_frame-1] */ - Ltmp = L_mult( res[L_frame - 2], 8192 ); - resf[L_frame - 1] = mac_r( Ltmp, 16384, res[L_frame - 1] ); + Ltmp = L_mult( res[L_frame - 2], 8192 /*0.25 (Q15)*/ ); /*Q(x + 16)*/ + resf[L_frame - 1] = mac_r( Ltmp, 16384 /*0.5 (Q15)*/, res[L_frame - 1] ); /*Q(x)*/ move16(); /*------------------------------------------------------------------------* @@ -189,14 +191,14 @@ Word16 findpulse_fx( /* o : pulse position FOR( i = 1; i < T0; i++ ) { - Ltmp = L_mult0( ptr[-maxi], ptr[-maxi] ); + Ltmp = L_mult0( ptr[-maxi], ptr[-maxi] ); /*Q( 2 * x )*/ if ( L_msu0( Ltmp, ptr[-i], ptr[-i] ) < 0 ) { maxi = i; move16(); } } - *sign = negate( shr( ptr[-maxi], 15 ) ); + *sign = negate( shr( ptr[-maxi], 15 ) ); /*extracting sign : Q0*/ move16(); } ELSE diff --git a/lib_com/frame_ener.c b/lib_com/frame_ener.c index ece0418c6203478b9149c74242185a45db758c14..cd2eb4418323dfb04a00ec5f0cbe3aee518e9aca 100644 --- a/lib_com/frame_ener.c +++ b/lib_com/frame_ener.c @@ -87,13 +87,13 @@ void fer_energy( #ifdef IVAS_FLOAT_FIXED void fer_energy_fx( - const Word16 L_frame, /* i : frame length */ - const Word16 clas, /* i : frame classification */ - const Word32 *synth, /* i : synthesized speech at Fs = 12k8 Hz */ - const Word16 q_synth, /* i : synthesized speech at Fs = 12k8 Hz */ - const Word16 pitch, /* i : pitch period */ - Word32 *enr, /* o : pitch-synchronous or half_frame energy */ - const Word16 offset /* i : speech pointer offset (0 or L_frame) */ + const Word16 L_frame, /* i : frame length */ + const Word16 clas, /* i : frame classification */ + const Word32 *synth, /* i : synthesized speech at Fs = 12k8 Hz Q(q_synth) */ + const Word16 q_synth, /* i : synthesized speech at Fs = 12k8 Hz */ + const Word16 pitch, /* i : pitch period Q0 */ + Word32 *enr, /* o : pitch-synchronous or half_frame energy Q0 */ + const Word16 offset /* i : speech pointer offset (0 or L_frame) */ ) { Word16 len, shift, exp; @@ -136,7 +136,7 @@ void fer_energy_fx( move32(); enr_tmp = BASOP_Util_Divide3216_Scale( *enr, shr( L_frame, 1 ) /*Q0*/, &exp ); - *enr = L_shr( L_deposit_l( enr_tmp ), sub( sub( sub( shift, 32 ), exp ), 1 ) ); + *enr = L_shr( L_deposit_l( enr_tmp ), sub( sub( sub( shift, 32 ), exp ), 1 ) ); /*Q0*/ move32(); } return; @@ -222,13 +222,11 @@ Word16 frame_ener_fx( len = pitch; move16(); /* pitch value at the end of frame */ pt_synth = synth; - move16(); if ( offset != 0 ) { pt_synth = synth + sub( L_frame, len ); } emaximum_fx( Q_new, pt_synth, len, enr_q ); - move16(); /* pitch synchronous E */ IF( enc != 0 ) { exp_enrq = norm_l( *enr_q ); @@ -251,15 +249,15 @@ Word16 frame_ener_fx( pos = sub( L_frame, L_frame2 ); } #ifdef BASOP_NOGLOB - Ltmp = L_mult_sat( synth[pos], synth[pos] ); + Ltmp = L_mult_sat( synth[pos], synth[pos] ); /*2 * Qnew + 1*/ #else Ltmp = L_mult( synth[pos], synth[pos] ); #endif FOR( i = 1; i < L_frame2; i++ ) { #ifdef BASOP_NOGLOB - Ltmp = L_mac_sat( Ltmp, synth[pos + i], synth[pos + i] ); -#else /* BASOP_NOGLOB */ + Ltmp = L_mac_sat( Ltmp, synth[pos + i], synth[pos + i] ); /*2 * Qnew + 1*/ +#else /* BASOP_NOGLOB */ Ltmp = L_mac( Ltmp, synth[pos + i], synth[pos + i] ); #endif } diff --git a/lib_com/get_gain.c b/lib_com/get_gain.c index 33739f0cdb7ddb0e7d4e8ebef9e8ceac38fcbf54..8cfa021603b8ba1b9ce9b7620d17811b7f19ec89 100644 --- a/lib_com/get_gain.c +++ b/lib_com/get_gain.c @@ -73,9 +73,9 @@ float get_gain_flt( #ifdef IVAS_FLOAT_FIXED Word32 get_gain( /* output: codebook gain (adaptive or fixed) Q16 */ - const Word16 x[], /* input : target signal */ - const Word16 y[], /* input : filtered codebook excitation */ - const Word16 n /* input : segment length */ + const Word16 x[], /* input : target signal Qx */ + const Word16 y[], /* input : filtered codebook excitation Qx */ + const Word16 n /* input : segment length */ ) { Word32 tcorr, tener, Lgain; @@ -155,7 +155,7 @@ Word32 get_gain2( /* output: codebook gain (adaptive or fixed) move16(); m_corr = 0x7FFF; } - if ( m_ener != 0 ) + IF( m_ener != 0 ) { m_corr = div_s( m_corr, m_ener ); } diff --git a/lib_com/gs_bitallocation_ivas_fx.c b/lib_com/gs_bitallocation_ivas_fx.c index f8a45b4f872bb25f80477142938e7450077df73a..077463885fa8f9b4bf86e4986b37cbf1126b4df7 100644 --- a/lib_com/gs_bitallocation_ivas_fx.c +++ b/lib_com/gs_bitallocation_ivas_fx.c @@ -69,7 +69,7 @@ static Word32 Find_bit_frac( const Word16 nb_band, const Word16 remaining_bits ) /*----------------------------------------------------------------------------------*/ /* INPUT/OUTPUT ARGUMENTS : */ /* _ (Word16*) bit :Number of bit allowed for frequency quantization */ -/* _ (Word16*) Ener_per_bd_iQ : Quantized energy vector Q13 */ +/* _ (Word16*) Ener_per_bd_iQ : Quantized energy vector Q12 */ /* _ (Word32*) bits_per_bands : Number of bit allowed per allowed subband Q18 */ /*----------------------------------------------------------------------------------*/ /* RETURN ARGUMENTS : */ @@ -82,7 +82,7 @@ void bands_and_bit_alloc_ivas_fx( const Word16 Diff_len, /* i : Lenght of the difference signal (before pure spectral)*/ const Word16 bits_used, /* i : Number of bit used before frequency Q */ Word16 *bit, /* i/o: Number of bit allowed for frequency quantization */ - const Word16 *Ener_per_bd_iQ, /* i/o: Quantized energy vector */ + const Word16 *Ener_per_bd_iQ, /* i/o: Quantized energy vector Q12 */ Word16 *max_ener_band, /* o : Sorted order */ Word16 *out_bits_per_bands, /* i/o: Number of bit allowed per allowed subband Q3 */ Word16 *nb_subbands, /* o : Number of subband allowed */ @@ -103,7 +103,7 @@ void bands_and_bit_alloc_ivas_fx( Word16 nb_tot_bands = 16; Word16 bit_index, bit_index_mem, imax; Word32 L_tmp; - Word32 sum_bit /*Q18*/, bit_fracf /*Q18*/; + Word32 sum_bit /*Q0*/, bit_fracf /*Q18*/; Word16 etmp; Word16 tmp; Word16 Ener_per_bd_iQ_tmp[MBANDS_GN_BITALLOC16k]; // Q13 @@ -143,10 +143,10 @@ void bands_and_bit_alloc_ivas_fx( move16(); IF( EQ_16( L_frame, L_FRAME16k ) ) { - ener_vec[16] = Ener_per_bd_iQ[16]; - ener_vec[17] = mac_r( L_mult( Ener_per_bd_iQ[16], 16384 ), Ener_per_bd_iQ[17], 16384 ); - ener_vec[18] = Ener_per_bd_iQ[17]; - ener_vec[19] = mult_r( Ener_per_bd_iQ[17], 26214 ); + ener_vec[16] = Ener_per_bd_iQ[16]; /*Q12*/ + ener_vec[17] = mac_r( L_mult( Ener_per_bd_iQ[16], 16384 /*0.5 in Q15*/ ), Ener_per_bd_iQ[17], 16384 /*0.5 in Q15*/ ); /*Q12*/ + ener_vec[18] = Ener_per_bd_iQ[17]; /*Q12*/ + ener_vec[19] = mult_r( Ener_per_bd_iQ[17], 26214 /*0.8 in Q15*/ ); /*Q12*/ move16(); move16(); move16(); @@ -210,16 +210,16 @@ void bands_and_bit_alloc_ivas_fx( IF( GE_32( core_brate, ACELP_9k60 ) ) { /* *bit = (short)(core_brate*(1.0f/50) + 0.5f) - bits_used - 25; */ - L_tmp = Mult_32_16( core_brate, 20971 ); + L_tmp = Mult_32_16( core_brate, 20971 /*1/50 in Q20*/ ); tmp = extract_l( L_shr_r( L_tmp, 5 ) ); - *bit = sub( sub( tmp, bits_used ), 25 ); + *bit = sub( sub( tmp, bits_used ), 25 ); /*Q0*/ move16(); } ELSE { - L_tmp = Mult_32_16( core_brate, 20971 ); + L_tmp = Mult_32_16( core_brate, 20971 /*1/50 in Q20*/ ); tmp = extract_l( L_shr_r( L_tmp, 5 ) ); - *bit = sub( sub( tmp, bits_used ), 21 ); + *bit = sub( sub( tmp, bits_used ), 21 ); /*Q0*/ move16(); } nb_tot_bands = 10; @@ -229,7 +229,7 @@ void bands_and_bit_alloc_ivas_fx( { /* *bit = (short)(core_brate*(1.0f/50) + 0.5f) - bits_used - GSC_freq_bits[bit_index]; */ - L_tmp = Mult_32_16( core_brate, 20971 ); + L_tmp = Mult_32_16( core_brate, 20971 /*1/50 in Q20*/ ); tmp = extract_l( L_shr_r( L_tmp, 5 ) ); *bit = sub( sub( tmp, bits_used ), GSC_freq_bits[bit_index] ); move16(); @@ -493,7 +493,7 @@ void bands_and_bit_alloc_ivas_fx( #endif IF( EQ_16( GSC_noisy_speech, 1 ) ) { - SWB_bit_budget = *bit; + SWB_bit_budget = *bit; /*Q0*/ move32(); nb_bands = 5; move16(); @@ -536,7 +536,7 @@ void bands_and_bit_alloc_ivas_fx( set32_fx( bits_per_bands, 0, MBANDS_GN ); /*bit_fracf = (1.0f/nb_bands)*(SWB_bit_budget); */ #ifdef FIX_802__NON_BE_DECODING - bit_fracf = Find_bit_frac( nb_bands, extract_l( SWB_bit_budget ) ); + bit_fracf = Find_bit_frac( nb_bands, extract_l( SWB_bit_budget ) ); /*Q18*/ #else bit_fracf = L_mult( div_s( 1, nb_bands ), shl( (Word16) SWB_bit_budget, 2 ) ); /* Q18 */ #endif @@ -734,7 +734,7 @@ void bands_and_bit_alloc_ivas_fx( #endif { #ifdef FIX_802__NON_BE_DECODING - bit_fracf = Find_bit_frac( st_band, bit_tmp ); + bit_fracf = Find_bit_frac( st_band, bit_tmp ); /*Q18*/ #else bit_fracf = L_mult( div_s( 1, st_band ), shl( bit_tmp, 2 ) ); /* Q18 */ #endif @@ -752,8 +752,8 @@ void bands_and_bit_alloc_ivas_fx( } FOR( i = 0; i < imax; i++ ) { - bits_per_bands[i] = L_add( GSC_freq_bits_fx_Q18[bit_index], bit_fracf ); - move32(); /* Q18 */ + bits_per_bands[i] = L_add( GSC_freq_bits_fx_Q18[bit_index], bit_fracf ); /*Q18*/ + move32(); /* Q18 */ bit_index = add( bit_index, 1 ); } #if 1 // def ADD_LRTD @@ -763,14 +763,15 @@ void bands_and_bit_alloc_ivas_fx( move16(); i = sub( imax, 1 ); // bits_per_bands[i] += Compl_GSC_freq_bits[bit_index]; - bits_per_bands[i] = L_add( bits_per_bands[i], L_shl( Compl_GSC_freq_bits[bit_index], Q18 ) ); + bits_per_bands[i] = L_add( bits_per_bands[i], L_shl( Compl_GSC_freq_bits[bit_index], Q18 ) ); /*Q18*/ + move32(); i = add( i, 1 ); bit_index = add( bit_index, 1 ); FOR( ; i < 10; i++ ) { // bits_per_bands[i] += Compl_GSC_freq_bits[bit_index] + bit_fracf; - bits_per_bands[i] = L_add( bits_per_bands[i], L_add( L_shl( Compl_GSC_freq_bits[bit_index], Q18 ), bit_fracf ) ); + bits_per_bands[i] = L_add( bits_per_bands[i], L_add( L_shl( Compl_GSC_freq_bits[bit_index], Q18 ), bit_fracf ) ); /*Q18*/ move32(); bit_index = add( bit_index, 1 ); } @@ -781,8 +782,8 @@ void bands_and_bit_alloc_ivas_fx( bit_index = add( bit_index_mem, 10 ); FOR( i = 0; i < 7; i++ ) { - bits_per_bands[i] = L_add( bits_per_bands[i], GSC_freq_bits_fx_Q18[bit_index] ); - move32(); /*chk Q18 */ + bits_per_bands[i] = L_add( bits_per_bands[i], GSC_freq_bits_fx_Q18[bit_index] ); /*Q18*/ + move32(); /*chk Q18 */ bit_index = add( bit_index, 1 ); } } @@ -801,6 +802,7 @@ void bands_and_bit_alloc_ivas_fx( * Complete the bit allocation per frequency band for 16kHz high brate mode *--------------------------------------------------------------------------*/ #if 1 // def ADD_LRTD + test(); IF( EQ_16( L_frame, L_FRAME16k ) && GT_32( core_brate, ACELP_32k ) ) { FOR( j = st_band; j < nb_bands; j++ ) @@ -811,19 +813,19 @@ void bands_and_bit_alloc_ivas_fx( } // bit_fracf = (1.0f / nb_bands) * (bit_tmp); - bit_fracf = L_shl( L_mult0( idiv1616( 16384, nb_bands ), bit_tmp ), 4 ); + bit_fracf = L_shl( L_mult0( idiv1616( 16384, nb_bands ), bit_tmp ), 4 ); /*Q18*/ // etmp = 2.0f * bit_fracf / (nb_bands + 1); etmp = divide3216( L_shr( bit_fracf, Q2 ), add( nb_bands, 1 ) ); // Q15 // bit_fracf = etmp; bit_fracf = L_shl( etmp, Q3 ); // Q18 - FOR( j = sub( nb_bands, 1 ); j >= 0; j-- ) + FOR( j = nb_bands - 1; j >= 0; j-- ) { // bits_per_bands[j] = etmp; // etmp += bit_fracf; bits_per_bands[j] = L_add( bits_per_bands[j], L_shl( etmp, Q3 ) ); // Q18 move32(); - etmp = (Word16) L_add( etmp, L_shr( bit_fracf, Q3 ) ); + etmp = extract_l( L_add( etmp, L_shr( bit_fracf, Q3 ) ) ); } } ELSE @@ -852,7 +854,7 @@ void bands_and_bit_alloc_ivas_fx( { bandoffset = sub( bandoffset, 1 ); } - ELSE IF( ( LE_32( core_brate, ACELP_13k20 ) && ( EQ_16( coder_type, INACTIVE ) || GE_16( noise_lev, NOISE_LEVEL_SP3 ) ) ) || + ELSE IF( ( LE_32( core_brate, ACELP_13k20 ) && ( ( coder_type == INACTIVE ) || GE_16( noise_lev, NOISE_LEVEL_SP3 ) ) ) || ( LE_32( core_brate, ACELP_13k20 ) && GE_32( core_brate, ACELP_9k60 ) && cor_strong_limit == 0 ) ) { bandoffset = add( bandoffset, 1 ); @@ -899,12 +901,12 @@ void bands_and_bit_alloc_ivas_fx( FOR( j = 0; j < band; j++ ) { i = maximum_fx( ener_vec, sub( nb_tot_bands, bandoffset ), &etmp ); - max_ener_band[add( nb_bands, j )] = i; + max_ener_band[nb_bands + j] = i; move16(); ener_vec[i] = -10; move16(); - bits_per_bands[add( nb_bands, j )] = 1310720; - move32(); /*Q18 */ + bits_per_bands[nb_bands + j] = 1310720; /*5 in Q18*/ + move32(); /*Q18 */ } nb_bands = add( nb_bands, band ); @@ -912,7 +914,7 @@ void bands_and_bit_alloc_ivas_fx( IF( LE_16( band, 2 ) ) { - FOR( j = sub( st_band, 1 ); j < nb_bands; j++ ) + FOR( j = st_band - 1; j < nb_bands; j++ ) { bits_per_bands[j] = L_add( bits_per_bands[j], 262144 ); /*Q18 */ move32(); @@ -926,7 +928,7 @@ void bands_and_bit_alloc_ivas_fx( move16(); FOR( ; bit_tmp > 0; bit_tmp-- ) { - bits_per_bands[j] = L_sub( bits_per_bands[j], 262144 ); /*Q18 */ + bits_per_bands[j] = L_sub( bits_per_bands[j], ONE_IN_Q18 ); /*Q18 */ j = add( j, 1 ); IF( EQ_16( j, sub( st_band, i ) ) ) { @@ -934,7 +936,7 @@ void bands_and_bit_alloc_ivas_fx( move16(); } test(); - IF( j == 0 && LT_16( i, sub( st_band, 1 ) ) ) + if ( j == 0 && LT_16( i, sub( st_band, 1 ) ) ) { i = add( i, 1 ); } @@ -952,12 +954,12 @@ void bands_and_bit_alloc_ivas_fx( move16(); FOR( i = 0; i < nb_bands; i++ ) { - L_tmp = Mult_32_16( sum_bit, 10923 ); + L_tmp = Mult_32_16( sum_bit, 10923 /*1/3 in Q15*/ ); IF( GT_32( bits_per_bands[i], 29360128 ) ) /* 112 in Q18 */ { - sum_bit = L_add( sum_bit, L_sub( bits_per_bands[i], 29360128 ) ); /* Q18 */ - bits_per_bands[i] = 29360128; + sum_bit = L_add( sum_bit, L_sub( bits_per_bands[i], 29360128 /* 112 in Q18 */ ) ); /* Q18 */ + bits_per_bands[i] = 29360128 /* 112 in Q18 */; move32(); j = add( i, 1 ); } @@ -982,12 +984,13 @@ void bands_and_bit_alloc_ivas_fx( *--------------------------------------------------------------------------*/ #if 1 // def ADD_LRTD sum_bit = 0; + move32(); FOR( i = 0; i < nb_bands; i++ ) { // bits_per_bands[i] = (float)floor(bits_per_bands[i]); bits_per_bands[i] = L_shl( L_shr( bits_per_bands[i], Q18 ), Q18 ); move32(); - sum_bit = L_add( sum_bit, L_shr( bits_per_bands[i], Q18 ) ); + sum_bit = L_add( sum_bit, L_shr( bits_per_bands[i], Q18 ) ); /*Q0*/ } test(); IF( GSC_IVAS_mode != 0 && LT_32( sum_bit, *bit ) ) /* If we need to add bits, we are doing it on the LF */ @@ -1030,6 +1033,7 @@ void bands_and_bit_alloc_ivas_fx( *nb_subbands = nb_bands; move16(); *pvq_len = shl( *nb_subbands, 4 ); + move16(); /*-------------------------------------------------------------------------- * Concatenate bands (encoder only) @@ -1062,11 +1066,11 @@ void bands_and_bit_alloc_ivas_fx( *-------------------------------------------------------------------*/ static void reajust_bits_fx( - Word32 *bits_per_bands, + Word32 *bits_per_bands, /*i : Q18*/ const Word16 st_band, const Word16 end_band, - const Word16 sum_bit_in, - const Word16 bit_bdgt_in ) + const Word16 sum_bit_in, /*i : Q0*/ + const Word16 bit_bdgt_in /*i : Q0*/ ) { Word16 i, amount_to_add, incr; Word16 bit_bdgt, sum_bit; @@ -1105,10 +1109,10 @@ static void reajust_bits_fx( /* if (amount_to_add > 0 || (amount_to_add < 0 && bits_per_bands[i] > 1))*/ test(); test(); - IF( amount_to_add > 0 || ( amount_to_add < 0 && GT_32( bits_per_bands[i], 262144 ) ) ) + IF( amount_to_add > 0 || ( amount_to_add < 0 && GT_32( bits_per_bands[i], ONE_IN_Q18 ) ) ) { /* bits_per_bands[i] += amount_to_add;*/ - bits_per_bands[i] = L_add( bits_per_bands[i], L_shl( amount_to_add, Q18 ) ); + bits_per_bands[i] = L_add( bits_per_bands[i], L_shl( amount_to_add, Q18 ) ); /*Q18*/ move32(); sum_bit = add( sum_bit, abs_s( amount_to_add ) ); } @@ -1135,34 +1139,34 @@ static Word32 Find_bit_frac( const Word16 nb_band, const Word16 remaining_bits ) { - int16_t inv_bandQ15; - int32_t L_out; + Word16 inv_bandQ15; + Word32 L_out; - inv_bandQ15 = 6553; + inv_bandQ15 = 6553; /*Q15*/ move16(); - IF( nb_band == 7 ) + IF( EQ_16( nb_band, 7 ) ) { - inv_bandQ15 = 4681; + inv_bandQ15 = 4681; /*Q15*/ move16(); } - ELSE IF( nb_band == 3 ) + ELSE IF( EQ_16( nb_band, 3 ) ) { - inv_bandQ15 = 10922; + inv_bandQ15 = 10922; /*Q15*/ move16(); } - ELSE IF( nb_band == 4 ) + ELSE IF( EQ_16( nb_band, 4 ) ) { - inv_bandQ15 = 8192; + inv_bandQ15 = 8192; /*Q15*/ move16(); } - ELSE IF( nb_band == 5 ) + ELSE IF( EQ_16( nb_band, 5 ) ) { - inv_bandQ15 = 6536; + inv_bandQ15 = 6536; /*Q15*/ move16(); } - ELSE IF( nb_band == 10 ) + ELSE IF( EQ_16( nb_band, 10 ) ) { - inv_bandQ15 = 3277; + inv_bandQ15 = 3277; /*Q15*/ move16(); } ELSE @@ -1171,7 +1175,7 @@ static Word32 Find_bit_frac( printf( "1/%d NOT DEFINED in Find_bit_frac\n", nb_band ); #endif } - L_out = L_mult( inv_bandQ15, shl( remaining_bits, 2 ) ); + L_out = L_mult( inv_bandQ15, shl( remaining_bits, 2 ) ); /*Q18*/ return ( L_out ); } @@ -1185,7 +1189,7 @@ static Word16 Find_bit_alloc_IVAS( /*o: Number of Word16 *bit, /* i/o: Number of bit allowed for frequency quantization */ Word16 *max_ener_band, /* i/o: Energy based sorted order */ Word16 *ener_vec, /* i/o: Energy per band order */ - Word32 *bits_per_bands /* o : Number of bit allowed per allowed subband Q3 */ + Word32 *bits_per_bands /* o : Number of bit allowed per allowed subband Q18 */ ) { Word32 mp, mb, nb_bands_adj, bit_adj; @@ -1241,6 +1245,8 @@ static Word16 Find_bit_alloc_IVAS( /*o: Number of /* nb_bands_adj = 1.0f; */ nb_bands_adj = Q18_1_0; move32(); + test(); + test(); IF( EQ_16( GSC_IVAS_mode, 1 ) && LT_32( core_brate, GSC_L_RATE_STG ) ) { /* nb_bands_adj = 0.0125f * SWB_bit_budget - 0.75f;*/ @@ -1393,11 +1399,11 @@ static Word16 Find_bit_alloc_IVAS( /*o: Number of WHILE( SWB_bit_budget > 0 ) { /* bits_per_bands[i]++; */ - bits_per_bands[i] = L_add( bits_per_bands[i], Q18_1_0 ); + bits_per_bands[i] = L_add( bits_per_bands[i], Q18_1_0 ); /*Q18*/ move32(); /* SWB_bit_budget--; */ - SWB_bit_budget = L_sub( SWB_bit_budget, Q18_1_0 ); - i--; + SWB_bit_budget = L_sub( SWB_bit_budget, Q18_1_0 ); /*Q18*/ + i = sub( i, 1 ); if ( EQ_16( i, -1 ) ) { i = sub( st_band, 1 ); diff --git a/lib_com/gs_gains.c b/lib_com/gs_gains.c index b9a6f58751c7489a35b149d10db0782994393d8a..31aca67b653261f037c71459b5aac0ea098b4484 100644 --- a/lib_com/gs_gains.c +++ b/lib_com/gs_gains.c @@ -588,19 +588,19 @@ float gsc_gainQ( } Word16 gsc_gainQ_ivas_fx( - BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ - const int16_t element_mode, /* i : element mode */ - const int16_t idchan, /* i : channel ID */ + BSTR_ENC_HANDLE hBstr, /* i/o: encoder bitstream handle */ + const Word16 element_mode, /* i : element mode */ + const Word16 idchan, /* i : channel ID */ const Word16 y_gain4[], /* i : Energy per band */ // Q12 Word16 y_gainQ[], /* o : quantized energy per band */ // Q12 - const int32_t core_brate, /* i : Core rate */ - const int16_t coder_type, /* i : coding type */ - const int16_t bwidth, /* i : input signal bandwidth */ - const int16_t L_frame, /* i : frame length */ - const int16_t tdm_LRTD_flag, /* i : LRTD stereo mode flag */ - const int32_t core_brate_inp /* i : true core bitrate */ + const Word32 core_brate, /* i : Core rate */ + const Word16 coder_type, /* i : coding type */ + const Word16 bwidth, /* i : input signal bandwidth */ + const Word16 L_frame, /* i : frame length */ + const Word16 tdm_LRTD_flag, /* i : LRTD stereo mode flag */ + const Word32 core_brate_inp /* i : true core bitrate */ ) { Word16 y_gain_tmp[MBANDS_GN16k]; @@ -609,10 +609,11 @@ Word16 gsc_gainQ_ivas_fx( move16(); Word16 mean_4g_fx[1], ftmp1_fx; Word16 Mbands_gn = MBANDS_GN; + move16(); Word16 y_gain_tmp3[MBANDS_GN]; Word32 L_tmp; - IF( EQ_16( L_frame, L_FRAME16k ) ) + if ( EQ_16( L_frame, L_FRAME16k ) ) { Mbands_gn = MBANDS_GN16k; move16(); @@ -637,11 +638,11 @@ Word16 gsc_gainQ_ivas_fx( { IF( LT_16( y_gain4[i], ftmp1_fx ) ) { - y_gain_tmp2[i] = ftmp1_fx; + y_gain_tmp2[i] = ftmp1_fx; /*Q12*/ } ELSE { - y_gain_tmp2[i] = y_gain4[i]; + y_gain_tmp2[i] = y_gain4[i]; /*Q12*/ } move16(); } @@ -665,7 +666,7 @@ Word16 gsc_gainQ_ivas_fx( move16(); } - IF( LT_16( y_gain_tmp[9], -1229 /* -0.3f in Q12 */ ) ) + if ( LT_16( y_gain_tmp[9], -1229 /* -0.3f in Q12 */ ) ) { y_gain_tmp[9] = -1229; /* -0.3f in Q12 */ move16(); @@ -696,17 +697,17 @@ Word16 gsc_gainQ_ivas_fx( IF( LE_32( core_brate, ACELP_9k60 ) && coder_type == INACTIVE ) { /* Some energy is needed in high band for stat_noise_uv_enc() to be functional in inactive speech */ - y_gain_tmp[10] = mean_fx( y_gain_tmp + 6, 3 ); + y_gain_tmp[10] = mean_fx( y_gain_tmp + 6, 3 ); /*Q12*/ move16(); - y_gain_tmp[11] = mean_fx( y_gain_tmp + 7, 3 ); + y_gain_tmp[11] = mean_fx( y_gain_tmp + 7, 3 ); /*Q12*/ move16(); - y_gain_tmp[12] = mean_fx( y_gain_tmp + 8, 3 ); + y_gain_tmp[12] = mean_fx( y_gain_tmp + 8, 3 ); /*Q12*/ move16(); - y_gain_tmp[13] = mean_fx( y_gain_tmp + 9, 3 ); + y_gain_tmp[13] = mean_fx( y_gain_tmp + 9, 3 ); /*Q12*/ move16(); - y_gain_tmp[14] = mean_fx( y_gain_tmp + 10, 3 ); + y_gain_tmp[14] = mean_fx( y_gain_tmp + 10, 3 ); /*Q12*/ move16(); - y_gain_tmp[15] = mean_fx( y_gain_tmp + 11, 3 ); + y_gain_tmp[15] = mean_fx( y_gain_tmp + 11, 3 ); /*Q12*/ move16(); } ELSE @@ -726,13 +727,13 @@ Word16 gsc_gainQ_ivas_fx( ftmp1_fx = extract_l( L_tmp ); FOR( i = 0; i < Mbands_gn; i++ ) { - IF( LT_16( y_gain4[i], sub( ftmp1_fx, 2457 ) ) ) + IF( LT_16( y_gain4[i], sub( ftmp1_fx, 2457 /* 0.6 in Q12*/ ) ) ) { - y_gain_tmp2[i] = sub( ftmp1_fx, 2457 ); + y_gain_tmp2[i] = sub( ftmp1_fx, 2457 /* 0.6 in Q12*/ ); } - ELSE IF( GT_16( y_gain4[i], add( ftmp1_fx, 2457 ) ) ) + ELSE IF( GT_16( y_gain4[i], add( ftmp1_fx, 2457 /* 0.6 in Q12*/ ) ) ) { - y_gain_tmp2[i] = add( ftmp1_fx, 2457 ); + y_gain_tmp2[i] = add( ftmp1_fx, 2457 /* 0.6 in Q12*/ ); } ELSE { @@ -817,7 +818,7 @@ Word16 gsc_gainQ_ivas_fx( FOR( i = 8; i < 16; i++ ) { - y_gain_tmp[i] = shl( mult( y_gain_tmp[i], 23101 ), 1 ); + y_gain_tmp[i] = shl( mult( y_gain_tmp[i], 23101 /* 1.41 in Q14 */ ), 1 ); /*Q12*/ move16(); } diff --git a/lib_com/gs_gains_fx.c b/lib_com/gs_gains_fx.c index 703f0e4efdfee27ff7bb9d895de9594e3df09a15..8b3719e98be7a8f51f368df08ec320079b658160 100644 --- a/lib_com/gs_gains_fx.c +++ b/lib_com/gs_gains_fx.c @@ -82,6 +82,7 @@ void Comp_and_apply_gain_fx( Word32 L32; #ifdef BASOP_NOGLOB_DECLARE_LOCAL Flag Overflow = 0; + move32(); #endif /* Recreate excitation for local synthesis and decoder */ @@ -139,7 +140,8 @@ void Comp_and_apply_gain_fx( L32 = L_mult( exc_diffQ[i], y_gain ); /*Qexc_diff+15 */ #ifdef BASOP_NOGLOB exc_diffQ[i] = round_fx_o( L_shl_o( L32, tmp_exp, &Overflow ), &Overflow ); /*Q_exc */ -#else /* BASOP_NOGLOB */ + move16(); +#else /* BASOP_NOGLOB */ exc_diffQ[i] = round_fx( L_shl( L32, tmp_exp ) ); /*Q_exc */ #endif } @@ -183,7 +185,7 @@ void Comp_and_apply_gain_ivas_fx( move16(); IF( EQ_16( ReUseGain, 1 ) ) { - y_gain = Ener_per_bd_yQ[i_band]; + y_gain = Ener_per_bd_yQ[i_band]; /*Q13*/ move16(); FOR( i = StartBin; i < NB_Qbins + StartBin; i++ ) @@ -221,11 +223,11 @@ void Comp_and_apply_gain_ivas_fx( /* output of Pow2() will be: */ /* 16384 < Pow2() <= 32767 */ #ifdef BASOP_NOGLOB - Ener_per_bd_yQ[i_band] = shl_o( y_gain, sub( exp1, 13 ), &Overflow ); -#else /* BASOP_NOGLOB */ + Ener_per_bd_yQ[i_band] = shl_o( y_gain, sub( exp1, 13 ), &Overflow ); /*Q13*/ +#else /* BASOP_NOGLOB */ Ener_per_bd_yQ[i_band] = shl( y_gain, sub( exp1, 13 ) ); -#endif /* BASOP_NOGLOB */ - move16(); /*Q1 */ +#endif /* BASOP_NOGLOB */ + move16(); /*Q1 */ tmp_exp = add( add( exp1, 1 ), sub( *Q_exc, Qexc_diff ) ); FOR( i = StartBin; i < NB_Qbins + StartBin; i++ ) @@ -257,7 +259,7 @@ void Comp_and_apply_gain_ivas_fx( } FOR( i = 0; i < StartBin + NB_Qbins; i++ ) { - exc_diffQ[i] = shl( exc_diffQ[i], sub( *Q_exc, Q_exc_diffQ[i] ) ); + exc_diffQ[i] = shl( exc_diffQ[i], sub( *Q_exc, Q_exc_diffQ[i] ) ); /*Q_exc*/ move16(); } @@ -320,21 +322,21 @@ void Ener_per_band_comp_fx( pt_fx = exc_diff_fx; FOR( j = 0; j < 2; j++ ) { - y_gain4_fx[j] = Comp_band_log_ener( pt_fx, 8, Q_exc, 1 ); + y_gain4_fx[j] = Comp_band_log_ener( pt_fx, 8, Q_exc, 1 ); /*Q12*/ move16(); pt_fx += 8; } FOR( j = 1; j < Mband - 2; j++ ) { - y_gain4_fx[j + 1] = Comp_band_log_ener( pt_fx, 16, Q_exc, 0 ); + y_gain4_fx[j + 1] = Comp_band_log_ener( pt_fx, 16, Q_exc, 0 ); /*Q12*/ move16(); pt_fx += 16; } IF( EQ_16( Eflag, 1 ) ) { - y_gain4_fx[add( j, 1 )] = Comp_band_log_ener( pt_fx, 32, Q_exc, -1 ); + y_gain4_fx[j + 1] = Comp_band_log_ener( pt_fx, 32, Q_exc, -1 ); /*Q12*/ move16(); pt_fx += 32; } @@ -357,30 +359,30 @@ void Ener_per_band_comp_ivas_fx( pt_fx = exc_diff_fx; FOR( j = 0; j < 2; j++ ) { - y_gain4_fx[j] = Comp_band_log_ener( pt_fx, 8, Q_exc, 1 ); + y_gain4_fx[j] = Comp_band_log_ener( pt_fx, 8, Q_exc, 1 ); /*Q12*/ move16(); pt_fx += 8; } FOR( j = 1; j < Mband - 2; j++ ) { - y_gain4_fx[j + 1] = Comp_band_log_ener( pt_fx, 16, Q_exc, 0 ); + y_gain4_fx[j + 1] = Comp_band_log_ener( pt_fx, 16, Q_exc, 0 ); /*Q12*/ move16(); pt_fx += 16; } IF( EQ_16( Eflag, 1 ) ) { - y_gain4_fx[add( j, 1 )] = Comp_band_log_ener( pt_fx, 32, Q_exc, -1 ); + y_gain4_fx[j + 1] = Comp_band_log_ener( pt_fx, 32, Q_exc, -1 ); /*Q12*/ move16(); pt_fx += 32; } IF( EQ_16( L_frame, L_FRAME16k ) ) { - y_gain4_fx[j + 2] = Comp_band_log_ener( pt_fx, 32, Q_exc, -1 ); + y_gain4_fx[j + 2] = Comp_band_log_ener( pt_fx, 32, Q_exc, -1 ); /*Q12*/ move16(); - y_gain4_fx[j + 3] = Comp_band_log_ener( pt_fx, 64, Q_exc, -1 ); + y_gain4_fx[j + 3] = Comp_band_log_ener( pt_fx, 64, Q_exc, -1 ); /*Q12*/ move16(); pt_fx += 64; } @@ -566,7 +568,7 @@ static void GSC_gain_adj( old_y_gain[i] = y_gain_tmp[i]; move16(); /*y_gainQ[i] = y_gain_tmp[i]+mean_4g[0]-(i*(Gain_off/20.f)/((float) Mbands_gn));*/ - y_gainQ[i] = add( y_gain_tmp[i], sub( mean_g, i_mult2( i, mult_r( Gain_off, 102 ) ) ) ); + y_gainQ[i] = add( y_gain_tmp[i], sub( mean_g, i_mult2( i, mult_r( Gain_off, 102 /* 20/MBANDS_GN in Q15 */ ) ) ) ); move16(); } } @@ -594,7 +596,7 @@ static void GSC_gain_adj_ivas_fx( Word16 Gain_off, i; test(); - IF( NE_16( coder_type, INACTIVE ) && NE_16( coder_type, UNVOICED ) ) + IF( ( coder_type != INACTIVE ) && NE_16( coder_type, UNVOICED ) ) { FOR( i = 0; i < Mbands_gn; i++ ) { @@ -646,7 +648,7 @@ static void GSC_gain_adj_ivas_fx( { old_y_gain[i] = y_gain_tmp[i]; move16(); - y_gainQ[i] = add( y_gain_tmp[i], sub( mean_g, i_mult2( i, mult_r( Gain_off, 205 ) ) ) ); + y_gainQ[i] = add( y_gain_tmp[i], sub( mean_g, i_mult2( i, mult_r( Gain_off, 205 /* 20/MBANDS_GN in Q16 */ ) ) ) ); move16(); } } @@ -690,33 +692,32 @@ Word16 gsc_gaindec_fx( /* o : average frequency gai test(); test(); - IF( ( EQ_16( coder_type, AUDIO ) || EQ_16( coder_type, INACTIVE ) ) && EQ_16( bwidth_fx, NB ) ) + IF( ( EQ_16( coder_type, AUDIO ) || ( coder_type == INACTIVE ) ) && EQ_16( bwidth_fx, NB ) ) { - idx_g_fx = (Word16) get_next_indice_fx( st_fx, 6 ); + idx_g_fx = (Word16) ( get_next_indice_fx( st_fx, 6 ) ); VDQ_vec_fx( &mean_4g_fx, Gain_meanNB_fx, Gain_mean_dicNB_fx, idx_g_fx, 1 ); - idx_g_fx = (Word16) get_next_indice_fx( st_fx, 6 ); - move16(); + idx_g_fx = (Word16) ( get_next_indice_fx( st_fx, 6 ) ); VDQ_vec_fx( y_gainQ_fx, Mean_dic_NB_fx, Gain_dic1_NB_fx, idx_g_fx, 3 ); IF( LT_32( core_brate_fx, ACELP_9k60 ) ) { - idx_g_fx = (Word16) get_next_indice_fx( st_fx, 5 ); + idx_g_fx = (Word16) ( get_next_indice_fx( st_fx, 5 ) ); VDQ_vec_fx( y_gainQ_fx + 3, Mean_dic_NB_fx + 3, Gain_dic2_NB_fx, idx_g_fx, 3 ); - idx_g_fx = (Word16) get_next_indice_fx( st_fx, 4 ); + idx_g_fx = (Word16) ( get_next_indice_fx( st_fx, 4 ) ); VDQ_vec_fx( y_gainQ_fx + 6, Mean_dic_NB_fx + 6, Gain_dic3_NB_fx, idx_g_fx, 4 ); } ELSE { - idx_g_fx = (Word16) get_next_indice_fx( st_fx, 6 ); + idx_g_fx = (Word16) ( get_next_indice_fx( st_fx, 6 ) ); VDQ_vec_fx( y_gainQ_fx + 3, Mean_dic_NB_fx + 3, Gain_dic2_NBHR_fx, idx_g_fx, 3 ); - idx_g_fx = (Word16) get_next_indice_fx( st_fx, 7 ); + idx_g_fx = (Word16) ( get_next_indice_fx( st_fx, 7 ) ); VDQ_vec_fx( y_gainQ_fx + 6, Mean_dic_NB_fx + 6, Gain_dic3_NBHR_fx, idx_g_fx, 4 ); } test(); - IF( LE_32( core_brate_fx, ACELP_9k60 ) && EQ_16( coder_type, INACTIVE ) ) + IF( LE_32( core_brate_fx, ACELP_9k60 ) && ( coder_type == INACTIVE ) ) { /* Some energy is needed in high band for stat_noise_uv_enc to be functional in inactive speech */ @@ -777,6 +778,7 @@ Word16 gsc_gaindec_fx( /* o : average frequency gai FOR( i = 8; i < 16; i++ ) { y_gainQ_fx[i] = round_fx( L_shl( L_mult( y_gainQ_fx[i], 23101 ), 1 ) ); /*Q12 */ + move16(); } /*----------------------------------------------------------------------* * Copy the true Q values in the specific bands @@ -835,7 +837,7 @@ Word16 gsc_gaindec_fx( /* o : average frequency gai /*==========================================================================*/ Word16 gsc_gaindec_ivas_fx( /* o : average frequency gain */ Decoder_State *st_fx, /* i/o: decoder state structure */ - Word16 y_gainQ_fx[], /* o : quantized gain per band */ + Word16 y_gainQ_fx[], /* o : quantized gain per band Q12 */ const Word32 core_brate_fx, /* i : core used */ Word16 old_y_gain_fx[], /* i/o: AR gain quantizer for low rate */ const Word16 coder_type, /* i : coding type */ @@ -847,7 +849,7 @@ Word16 gsc_gaindec_ivas_fx( /* o : average frequenc Word16 Mbands_gn = MBANDS_GN; move16(); Word16 y_gain_tmp3_fx[MBANDS_GN]; - IF( EQ_16( st_fx->L_frame, L_FRAME16k ) ) + if ( EQ_16( st_fx->L_frame, L_FRAME16k ) ) { Mbands_gn = MBANDS_GN16k; move16(); @@ -855,7 +857,7 @@ Word16 gsc_gaindec_ivas_fx( /* o : average frequenc test(); test(); - IF( ( EQ_16( coder_type, AUDIO ) || EQ_16( coder_type, INACTIVE ) ) && EQ_16( bwidth_fx, NB ) ) + IF( ( EQ_16( coder_type, AUDIO ) || ( coder_type == INACTIVE ) ) && EQ_16( bwidth_fx, NB ) ) { idx_g_fx = (Word16) get_next_indice_fx( st_fx, 6 ); VDQ_vec_fx( &mean_4g_fx, Gain_meanNB_fx, Gain_mean_dicNB_fx, idx_g_fx, 1 ); @@ -880,21 +882,21 @@ Word16 gsc_gaindec_ivas_fx( /* o : average frequenc VDQ_vec_fx( y_gainQ_fx + 6, Mean_dic_NB_fx + 6, Gain_dic3_NBHR_fx, idx_g_fx, 4 ); } test(); - IF( LE_32( core_brate_fx, ACELP_9k60 ) && EQ_16( coder_type, INACTIVE ) ) + IF( LE_32( core_brate_fx, ACELP_9k60 ) && ( coder_type == INACTIVE ) ) { /* Some energy is needed in high band for stat_noise_uv_enc to be functional in inactive speech */ - y_gainQ_fx[10] = mean_fx( y_gainQ_fx + 6, 3 ); + y_gainQ_fx[10] = mean_fx( y_gainQ_fx + 6, 3 ); /*Q12*/ move16(); - y_gainQ_fx[11] = mean_fx( y_gainQ_fx + 7, 3 ); + y_gainQ_fx[11] = mean_fx( y_gainQ_fx + 7, 3 ); /*Q12*/ move16(); - y_gainQ_fx[12] = mean_fx( y_gainQ_fx + 8, 3 ); + y_gainQ_fx[12] = mean_fx( y_gainQ_fx + 8, 3 ); /*Q12*/ move16(); - y_gainQ_fx[13] = mean_fx( y_gainQ_fx + 9, 3 ); + y_gainQ_fx[13] = mean_fx( y_gainQ_fx + 9, 3 ); /*Q12*/ move16(); - y_gainQ_fx[14] = mean_fx( y_gainQ_fx + 10, 3 ); + y_gainQ_fx[14] = mean_fx( y_gainQ_fx + 10, 3 ); /*Q12*/ move16(); - y_gainQ_fx[15] = mean_fx( y_gainQ_fx + 11, 3 ); + y_gainQ_fx[15] = mean_fx( y_gainQ_fx + 11, 3 ); /*Q12*/ move16(); } ELSE @@ -946,13 +948,13 @@ Word16 gsc_gaindec_ivas_fx( /* o : average frequenc /*----------------------------------------------------------------------* * Copy the true Q values in the specific bands *----------------------------------------------------------------------*/ - y_gainQ_fx[8] = y_gain_tmp3_fx[0]; + y_gainQ_fx[8] = y_gain_tmp3_fx[0]; /*Q12*/ move16(); - y_gainQ_fx[10] = y_gain_tmp3_fx[1]; + y_gainQ_fx[10] = y_gain_tmp3_fx[1]; /*Q12*/ move16(); - y_gainQ_fx[12] = y_gain_tmp3_fx[2]; + y_gainQ_fx[12] = y_gain_tmp3_fx[2]; /*Q12*/ move16(); - y_gainQ_fx[14] = y_gain_tmp3_fx[3]; + y_gainQ_fx[14] = y_gain_tmp3_fx[3]; /*Q12*/ move16(); } ELSE @@ -973,19 +975,19 @@ Word16 gsc_gaindec_ivas_fx( /* o : average frequenc } ELSE { - idx_g_fx = get_next_indice_fx( st_fx, 7 ); + idx_g_fx = (Word16) get_next_indice_fx( st_fx, 7 ); VDQ_vec_fx( y_gainQ_fx, YG_mean16HR_fx, YG_dicHR_1_fx, idx_g_fx, 4 ); - idx_g_fx = get_next_indice_fx( st_fx, 6 ); + idx_g_fx = (Word16) get_next_indice_fx( st_fx, 6 ); VDQ_vec_fx( y_gainQ_fx + 4, YG_mean16HR_fx + 4, YG_dicHR_2_fx, idx_g_fx, 4 ); - idx_g_fx = get_next_indice_fx( st_fx, 6 ); + idx_g_fx = (Word16) get_next_indice_fx( st_fx, 6 ); VDQ_vec_fx( y_gainQ_fx + 8, YG_mean16HR_fx + 8, YG_dicHR_3_fx, idx_g_fx, 4 ); - idx_g_fx = get_next_indice_fx( st_fx, 6 ); + idx_g_fx = (Word16) get_next_indice_fx( st_fx, 6 ); VDQ_vec_fx( y_gainQ_fx + 12, YG_mean16HR_16kHz_fx, YG_dicHR_4_16kHz_fx, idx_g_fx, 4 ); - idx_g_fx = get_next_indice_fx( st_fx, 3 ); + idx_g_fx = (Word16) get_next_indice_fx( st_fx, 3 ); VDQ_vec_fx( y_gainQ_fx + 16, YG_meanL2G_16kHz_fx, YG_dicL2G_16kHz_fx, idx_g_fx, 2 ); } } @@ -1033,7 +1035,7 @@ Word16 gsc_gainQ_fx( /*Q12*/ L_tmp = L_deposit_l( 0 ); FOR( cnt = 0; cnt < 10; cnt++ ) { - L_tmp = L_mac( L_tmp, y_gain4[cnt], 3277 ); + L_tmp = L_mac( L_tmp, y_gain4[cnt], 3277 /*0.1 in Q15*/ ); } tmp16 = sub( round_fx( L_tmp ), 4915 ); @@ -1049,7 +1051,7 @@ Word16 gsc_gainQ_fx( /*Q12*/ L_tmp = L_deposit_l( 0 ); FOR( i = 0; i < 10; i++ ) { - L_tmp = L_mac( L_tmp, y_gain_tmp2[i], 3277 ); + L_tmp = L_mac( L_tmp, y_gain_tmp2[i], 3277 /*0.1 in Q15*/ ); } /* Quantized mean gain without clipping */ @@ -1064,7 +1066,7 @@ Word16 gsc_gainQ_fx( /*Q12*/ move16(); } /*if(y_gain_tmp[9] < -0.3f){y_gain_tmp[9] = -0.3f;}*/ - y_gain_tmp[9] = s_max( y_gain_tmp[9], -1229 ); + y_gain_tmp[9] = s_max( y_gain_tmp[9], -1229 /*0.3 in Q12*/ ); move16(); set16_fx( y_gain_tmp + 10, 0, MBANDS_GN - 10 ); idx_g = vquant_fx( y_gain_tmp, Mean_dic_NB_fx, y_gain_tmp, Gain_dic1_NB_fx, 3, 64 ); @@ -1086,7 +1088,7 @@ Word16 gsc_gainQ_fx( /*Q12*/ } /*add end */ test(); - IF( LE_32( core_brate, ACELP_9k60 ) && EQ_16( coder_type, INACTIVE ) ) + IF( LE_32( core_brate, ACELP_9k60 ) && ( coder_type == INACTIVE ) ) { /* Some energy is needed in high band for stat_noise_uv_enc to be functional in inactive speech */ diff --git a/lib_com/gs_inact_switching_fx.c b/lib_com/gs_inact_switching_fx.c index aa7b647bdda4cdaa7b69fb96bcb4ce1ff4c6fb3d..7fc4ca16dd3b6dd683039b317319eb51029166c8 100644 --- a/lib_com/gs_inact_switching_fx.c +++ b/lib_com/gs_inact_switching_fx.c @@ -13,8 +13,8 @@ *-------------------------------------------------------------------*/ #ifdef IVAS_FLOAT_FIXED -#define ALPHA0_FX 13107 -#define BETA0_FX ( 32768 - ALPHA0_FX ) +#define ALPHA0_FX 13107 /*Q15*/ +#define BETA0_FX ( 32768 - ALPHA0_FX ) /*Q15*/ /*========================================================================*/ /* FUNCTION : Inac_swtch_ematch_fx() */ @@ -83,7 +83,7 @@ void Inac_swtch_ematch_fx( move16(); } } - ELSE IF( EQ_16( coder_type, VOICED ) || EQ_16( coder_type, GENERIC ) || EQ_16( coder_type, TRANSITION ) || NE_16( last_core, ACELP_CORE ) || NE_16( last_codec_mode, MODE1 ) ) + ELSE IF( EQ_16( coder_type, VOICED ) || EQ_16( coder_type, GENERIC ) || EQ_16( coder_type, TRANSITION ) || ( last_core != ACELP_CORE ) || NE_16( last_codec_mode, MODE1 ) ) { /* Find spectrum and energy per band for GC and VC frames */ edct_16fx( exc2, dct_exc_tmp, L_frame, 5, EVS_MONO ); @@ -97,7 +97,7 @@ void Inac_swtch_ematch_fx( move16(); } } - ELSE IF( EQ_16( coder_type, INACTIVE ) && LE_32( core_brate, ACELP_24k40 ) ) + ELSE IF( ( coder_type == INACTIVE ) && LE_32( core_brate, ACELP_24k40 ) ) { /* Find spectrum and energy per band for inactive frames */ edct_16fx( exc2, dct_exc_tmp, L_frame, 5, EVS_MONO ); @@ -112,6 +112,7 @@ void Inac_swtch_ematch_fx( L_tmp = L_mult( ALPHA0_FX, lt_ener_per_band[i] ); /*Q(15+12+1)=Q(28) */ L_tmp = L_mac( L_tmp, BETA0_FX, Ener_per_bd[i] ); /*Q28 */ lt_ener_per_band[i] = round_fx( L_tmp ); /*Q12 */ + move16(); ftmp = sub( lt_ener_per_band[i], Ener_per_bd[i] ); /*Q12 */ @@ -205,6 +206,8 @@ void Inac_switch_ematch_ivas_fx( test(); test(); test(); + test(); + test(); IF( ( EQ_16( coder_type, AUDIO ) || ( EQ_16( coder_type, UNVOICED ) && EQ_16( tdm_low_rate_mode, 1 ) ) ) && bfi == 0 ) { Ener_per_band_comp_ivas_fx( dct_exc_tmp, Ener_per_bd, Q_exc, MBANDS_GN, 1, L_frame ); @@ -212,11 +215,11 @@ void Inac_switch_ematch_ivas_fx( /* reset long-term energy per band */ FOR( i = 0; i < MBANDS_GN; i++ ) { - lt_ener_per_band[i] = Ener_per_bd[i]; + lt_ener_per_band[i] = Ener_per_bd[i]; /*Q12*/ move16(); } } - ELSE IF( EQ_16( coder_type, VOICED ) || EQ_16( coder_type, GENERIC ) || EQ_16( coder_type, TRANSITION ) || NE_16( last_core, ACELP_CORE ) || NE_16( last_codec_mode, MODE1 ) || ( GT_16( element_mode, EVS_MONO ) && EQ_16( coder_type, UNVOICED ) ) ) + ELSE IF( EQ_16( coder_type, VOICED ) || EQ_16( coder_type, GENERIC ) || EQ_16( coder_type, TRANSITION ) || ( last_core != ACELP_CORE ) || NE_16( last_codec_mode, MODE1 ) || ( ( element_mode > EVS_MONO ) && EQ_16( coder_type, UNVOICED ) ) ) { /* Find spectrum and energy per band for GC and VC frames */ edct_16fx( exc2, dct_exc_tmp, L_frame, 5, element_mode ); @@ -226,11 +229,11 @@ void Inac_switch_ematch_ivas_fx( /* reset long-term energy per band */ FOR( i = 0; i < MBANDS_GN; i++ ) { - lt_ener_per_band[i] = Ener_per_bd[i]; + lt_ener_per_band[i] = Ener_per_bd[i]; /*Q12*/ move16(); } } - ELSE IF( EQ_16( coder_type, INACTIVE ) && LE_32( total_brate, MAX_GSC_INACTIVE_BRATE ) ) + ELSE IF( ( coder_type == INACTIVE ) && LE_32( total_brate, MAX_GSC_INACTIVE_BRATE ) ) { /* Find spectrum and energy per band for inactive frames */ edct_16fx( exc2, dct_exc_tmp, L_frame, 5, element_mode ); diff --git a/lib_com/gs_noisefill_fx.c b/lib_com/gs_noisefill_fx.c index 93b7bb3f82af121c0df33b0f329d637b9830ae28..d0f72936d7f024fa1c31815bff0ea8315a1f0041 100644 --- a/lib_com/gs_noisefill_fx.c +++ b/lib_com/gs_noisefill_fx.c @@ -17,8 +17,8 @@ static void gs_noisf_fx( const Word16 Start_BIN, /* i : First bin for noise fill */ const Word16 NB_Qbins, /* i : Number of bin per band */ const Word16 Noise_fac, /* i : Noise level Q15 */ - const Word16 *y_norm, /* i : Quantized pulses Qn */ - Word16 *exc_diffQ, /* o : Quantized pulses with noise added Qn */ + const Word16 *y_norm, /* i : Quantized pulses Q(qNoise_fac) */ + Word16 *exc_diffQ, /* o : Quantized pulses with noise added Q(qNoise_fac) */ Word16 *seed_tcx, /* i : Random generator seed */ const Word16 coder_type, /* i : coder type */ Word16 qNoise_fac ) @@ -32,8 +32,8 @@ static void gs_noisf_fx( NB_zer = shr( NB_Qbins, 1 ); - const_1 = L_shl( const_1, add( qNoise_fac, qNoise_fac ) ); - if ( EQ_16( coder_type, INACTIVE ) ) + const_1 = L_shl( const_1, add( qNoise_fac, qNoise_fac ) ); /*2*Q(qNoise_fac)*/ + if ( ( coder_type == INACTIVE ) ) { NB_zer = 2; move16(); @@ -51,7 +51,7 @@ static void gs_noisf_fx( { exc_diffQ[i] = y_norm[i]; move16(); - ftmp = L_mac0( ftmp, exc_diffQ[i], exc_diffQ[i] ); + ftmp = L_mac0( ftmp, exc_diffQ[i], exc_diffQ[i] ); /*2*Q(qNoise_fac)*/ } IF( LT_32( L_shl( ftmp, 1 ), const_1 ) ) @@ -118,11 +118,11 @@ static void EstimateNoiseLevel_inner_fx( move16(); /*.4f * 32768 */ } - set16_fx( noisepb + i_band, noise_offset, sub( Mbands_gn, i_band ) ); + set16_fx( noisepb + i_band, noise_offset, sub( Mbands_gn, i_band ) ); /*Q15*/ FOR( i = i_band; i < 5; i++ ) { - noisepb[i] = s_min( noisepb[i], 6554 ); + noisepb[i] = s_min( noisepb[i], 6554 /*0.2(Q15)*/ ); move16(); } @@ -196,7 +196,7 @@ static void EstimateNoiseLevel_fx( } test(); test(); - IF( ( EQ_16( coder_type, INACTIVE ) || GE_16( noise_lev, NOISE_LEVEL_SP3 ) ) && EQ_16( L_frame, L_FRAME ) ) + IF( ( ( coder_type == INACTIVE ) || GE_16( noise_lev, NOISE_LEVEL_SP3 ) ) && EQ_16( L_frame, L_FRAME ) ) { FOR( i_band = 9; i_band < Mbands_gn; i_band++ ) { @@ -211,7 +211,7 @@ static void EstimateNoiseLevel_fx( set16_fx( noisepb, 14746 /*0.45*/, Mbands_gn ); } - IF( EQ_16( coder_type, INACTIVE ) ) + IF( ( coder_type == INACTIVE ) ) { FOR( ; i_band < Mbands_gn; i_band++ ) { @@ -320,7 +320,7 @@ void freq_dnw_scaling_fx( const Word16 coder_type, /* i : coder type */ const Word16 noise_lev, /* i : Noise level */ const Word32 core_brate, /* i : Core bitrate */ - Word16 fy_norm[], /* i/o: Frequency quantized parameter */ + Word16 fy_norm[], /* i/o: Frequency quantized parameter Qx */ Word16 Qx, /* Q format of fy_norm*/ const Word16 L_frame /* i : frame length */ @@ -340,7 +340,7 @@ void freq_dnw_scaling_fx( start_sc = 64; move16(); } - ELSE IF( EQ_16( coder_type, INACTIVE ) ) + ELSE IF( ( coder_type == INACTIVE ) ) { sc_dyn = mult_r( sc_dyn, 8192 ); /*Q15 (0.25 in Q15) */ start_sc = 80; @@ -377,9 +377,9 @@ void freq_dnw_scaling_fx( { FOR( i = 160; i < L_frame; i++ ) { - fy_norm[i] = s_min( fy_norm[i], shl( 1, Qx ) ); + fy_norm[i] = s_min( fy_norm[i], shl( 1, Qx ) ); /*Qx*/ move16(); - fy_norm[i] = s_max( fy_norm[i], shl( -1, Qx ) ); + fy_norm[i] = s_max( fy_norm[i], shl( -1, Qx ) ); /*Qx*/ move16(); } } @@ -387,9 +387,9 @@ void freq_dnw_scaling_fx( { FOR( i = 160; i < L_frame; i++ ) { - fy_norm[i] = s_min( fy_norm[i], shr_r( 1536, sub( 10, Qx ) ) ); + fy_norm[i] = s_min( fy_norm[i], shr_r( 1536 /*1.5 in Q10*/, sub( 10, Qx ) ) ); /*Qx*/ move16(); - fy_norm[i] = s_max( fy_norm[i], shr_r( -1536, sub( 10, Qx ) ) ); + fy_norm[i] = s_max( fy_norm[i], shr_r( -1536 /*1.5 in Q10*/, sub( 10, Qx ) ) ); /*Qx*/ move16(); } } @@ -398,7 +398,7 @@ void freq_dnw_scaling_fx( } static void Decreas_freqPeak_fx( - const Word16 *lsf_new, /* i : ISFs at the end of the frame */ + const Word16 *lsf_new, /* i : ISFs at the end of the frame Qx2.56 */ Word16 *exc_diffQ, /* i/o: frequency coefficients of per band */ Word16 rat /* i : threshold of ratio between consecutive lsf_new_diff */ ) @@ -406,6 +406,7 @@ static void Decreas_freqPeak_fx( Word16 i, j, k; Word16 last_bin = 0; Word16 pos = 0; + move16(); Word16 *src, max_val, avrg; Word32 L_avrg, L_tmp; Word16 lsf_new_diff[M]; @@ -446,7 +447,7 @@ static void Decreas_freqPeak_fx( move16(); /* When the search is false, should equate the end of the vector, not the beginning */ FOR( i = 0; i < ( M - 1 ); i++ ) { - if ( GT_16( lsf_new[i], 10240 ) ) + IF( GT_16( lsf_new[i], 10240 /*4000 in Qx2.56*/ ) ) { last_bin = i; move16(); @@ -459,7 +460,7 @@ static void Decreas_freqPeak_fx( tmp = mult_r( rat, lsf_new_diff[i - 1] ); /*Qx2.56 */ IF( GT_16( tmp, lsf_new_diff[i] ) ) { - src = &exc_diffQ[shl( sub( i, 1 ), 4 )]; + src = &exc_diffQ[( i - 1 ) << 4]; move16(); FOR( j = 0; j < 2; j++ ) { @@ -505,7 +506,7 @@ static void Decreas_freqPeak_fx( { FOR( i = pos - 1; i < pos + 2; i++ ) { - exc_diffQ[pos] = mult_r( 16384, exc_diffQ[pos] ); + exc_diffQ[pos] = mult_r( 16384 /*0.5 in Q15*/, exc_diffQ[pos] ); move16(); } } @@ -553,8 +554,7 @@ static void envelop_modify_fx( exp1 = norm_l( Ener_fx ); Ener_fx = L_shl( Ener_fx, exp1 ); - exp1 = 31 - exp1 - sub( shl( Q_exc, 1 ), 7 ); - move16(); + exp1 = sub( sub( 31, exp1 ), sub( shl( Q_exc, 1 ), 7 ) ); Ener_fx = Isqrt_lc( Ener_fx, &exp1 ); /*Q(31-exp1) */ weight_fx = 16384; /*Q15 */ @@ -586,7 +586,7 @@ static void envelop_modify_fx( L_tmp = L_mult0( sub( 32767, weight_fx ), Random( seed_tcx ) ); /*Q30 */ tmp1 = round_fx( L_shr( L_tmp, 2 ) ); - L_exc_diffQ_fx[add( i_mult( 16, i ), j )] = L_mult0( Ener1_fx, add( tmp, tmp1 ) ); /*Q12 */ + L_exc_diffQ_fx[( ( 16 * i ) + j )] = L_mult0( Ener1_fx, add( tmp, tmp1 ) ); /*Q12 */ move32(); src_fx++; } @@ -617,7 +617,7 @@ static void envelop_modify_fx( L_tmp = L_mult0( sub( 32767, weight_fx ), Random( seed_tcx ) ); /*Q30 */ tmp1 = round_fx( L_shr( L_tmp, 2 ) ); /*Q12 */ - L_exc_diffQ_fx[add( i_mult( 16, i ), j )] = L_mult0( Ener1_fx, add( tmp, tmp1 ) ); /*Q12 */ + L_exc_diffQ_fx[( ( 16 * i ) + j )] = L_mult0( Ener1_fx, add( tmp, tmp1 ) ); /*Q12 */ move32(); src_fx++; } @@ -647,6 +647,7 @@ static void envelop_modify_fx( { Q_tmp = sub( 16, exp ); *Q_hb_exc = sub( 12, Q_tmp ); + move16(); FOR( i = start_band; i < L_FRAME; i++ ) { exc_diffQ_fx[i] = extract_l( L_shr( L_exc_diffQ_fx[i], Q_tmp ) ); @@ -988,11 +989,11 @@ void highband_exc_dct_in_fx( last_bin = sub( last_bin, 1 ); tmp = i_mult( MAX_Bin, 16 ); tmp1 = i_mult( last_bin, 16 ); - src = &exc_diffQ[sub( L_FRAME, 1 )]; + src = &exc_diffQ[L_FRAME - 1]; move16(); - dst = &exc_dct_in[sub( tmp, 1 )]; + dst = &exc_dct_in[( tmp - 1 )]; move16(); - end = &exc_diffQ[sub( tmp1, 1 )]; + end = &exc_diffQ[( tmp1 - 1 )]; move16(); WHILE( src > end ) @@ -1492,11 +1493,11 @@ void highband_exc_dct_in_ivas_fx( last_bin = sub( last_bin, 1 ); tmp = i_mult( MAX_Bin, 16 ); tmp1 = i_mult( last_bin, 16 ); - src = &exc_diffQ[sub( L_FRAME, 1 )]; + src = &exc_diffQ[( L_FRAME - 1 )]; move16(); - dst = &exc_dct_in[sub( tmp, 1 )]; + dst = &exc_dct_in[( tmp - 1 )]; move16(); - end = &exc_diffQ[sub( tmp1, 1 )]; + end = &exc_diffQ[( tmp1 - 1 )]; move16(); WHILE( src > end ) diff --git a/lib_com/hq2_core_com.c b/lib_com/hq2_core_com.c index 59ad832f782674f792139345eb4f430dcf0cc89c..e238ac7243c8a55c03d4313d5d72f73029fe3157 100644 --- a/lib_com/hq2_core_com.c +++ b/lib_com/hq2_core_com.c @@ -305,16 +305,17 @@ void reverse_transient_frame_energies( #define WMC_TOOL_SKIP void bit_allocation_second_fx2( - Word32 *Rk, - Word32 *Rk_sort, - Word16 BANDS, - const Word16 *band_width, - Word16 *k_sort, - Word16 *k_num, - const Word16 *p2a_flags, - const Word16 p2a_bands, - const Word16 *last_bitalloc, - const Word16 input_frame ) + Word32 *Rk, /* Q16 */ + Word32 *Rk_sort, /* Q16 */ + Word16 BANDS, /* Q0 */ + const Word16 *band_width, /* Q0 */ + Word16 *k_sort, /* Q0 */ + Word16 *k_num, /* Q0 */ + const Word16 *p2a_flags, /* Q0 */ + const Word16 p2a_bands, /* Q0 */ + const Word16 *last_bitalloc, /* Q0 */ + const Word16 input_frame /* Q0 */ +) { Word16 k, k2 = 0; Word16 ever_bits[BANDS_MAX], ever_sort[BANDS_MAX]; /*Q12 */ @@ -323,13 +324,18 @@ void bit_allocation_second_fx2( Word16 exp; Word16 tmp; Word32 L_tmp; + move16(); + move16(); + move16(); + move16(); + FOR( k = 0; k < BANDS; k++ ) { test(); test(); IF( ( ( sub( k_sort[k], sub( BANDS, p2a_bands ) ) >= 0 ) && ( sub( p2a_flags[k_sort[k]], 1 ) == 0 ) ) || - ( ( sub( k_sort[k], sub( BANDS, 2 ) ) >= 0 ) && ( sub( last_bitalloc[sub( k_sort[k], sub( BANDS, 2 ) )], 1 ) == 0 ) ) ) + ( ( sub( k_sort[k], ( BANDS - 2 ) ) >= 0 ) && ( sub( last_bitalloc[k_sort[k] - ( BANDS - 2 )], 1 ) == 0 ) ) ) { exp = norm_s( band_width[k_sort[k]] ); tmp = shl( band_width[k_sort[k]], exp ); /*Q(exp) */ @@ -339,7 +345,7 @@ void bit_allocation_second_fx2( ever_bits[k] = extract_l( L_shr( L_tmp, tmp ) ); /*Q12 */ if ( sub( ever_bits[k], rk_temp ) < 0 ) { - rk_temp = ever_bits[k]; + rk_temp = ever_bits[k]; /* Q12 */ k2 = k; move16(); move16(); @@ -364,7 +370,7 @@ void bit_allocation_second_fx2( move16(); IF( sub( ever_sort[k], ever_temp ) < 0 ) { - ever_temp = ever_sort[k]; + ever_temp = ever_sort[k]; /* Q12 */ move16(); k2 = k; move16(); @@ -381,7 +387,7 @@ void bit_allocation_second_fx2( { IF( sub( k_sort[k], sub( k_sort[k2], 1 ) ) == 0 ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } @@ -392,7 +398,7 @@ void bit_allocation_second_fx2( { IF( sub( k_sort[k], add( k_sort[k2], 1 ) ) == 0 ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } @@ -405,7 +411,7 @@ void bit_allocation_second_fx2( { IF( sub( k_sort[k], sub( k_sort[k2], 1 ) ) == 0 ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } @@ -416,7 +422,7 @@ void bit_allocation_second_fx2( { IF( sub( k_sort[k], add( k_sort[k2], 1 ) ) == 0 ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } diff --git a/lib_com/hq2_core_com_fx.c b/lib_com/hq2_core_com_fx.c index d24bb0d96a5743babd40acf0b4208c9e9dfe1bb9..a05519387ba575860a5cafd205f143616fbebc0a 100644 --- a/lib_com/hq2_core_com_fx.c +++ b/lib_com/hq2_core_com_fx.c @@ -122,7 +122,7 @@ void mdct_spectrum_denorm_fx( /*gamma = (float) sqrt (pow (2.0f, band_energy[k]) / Eyy); */ /* Pow part (pow(2.0f, band_energy) ) */ - L_temp = L_shr( L_band_energy[k], sub( SWB_BWE_LR_Qbe, 16 ) ); + L_temp = L_shr( L_band_energy[k], sub( SWB_BWE_LR_Qbe, 16 ) ); /* Q16 */ temp_lo_fx = L_Extract_lc( L_temp, &temp_hi_fx ); Qpow = sub( 14, temp_hi_fx ); pow_fx = extract_l( Pow2( 14, temp_lo_fx ) ); /* Qpow */ @@ -145,14 +145,14 @@ void mdct_spectrum_denorm_fx( L_temp = Sqrt_l( L_shr( L_deposit_h( temp_fx ), 1 ), &exp_norm ); L_temp = L_shr( L_temp, exp_norm ); Qgamma = sub( shr( Qgamma, 1 ), 1 ); - gamma_fx = round_fx( L_temp ); + gamma_fx = round_fx( L_temp ); /* Qgamma */ } ELSE { L_temp = Sqrt_l( L_deposit_h( temp_fx ), &exp_norm ); L_temp = L_shr( L_temp, exp_norm ); Qgamma = shr( Qgamma, 1 ); - gamma_fx = round_fx( L_temp ); + gamma_fx = round_fx( L_temp ); /* Qgamma */ } /* Adjust gamma based on pulse density (0 bit MSE gain estimator) */ @@ -160,12 +160,12 @@ void mdct_spectrum_denorm_fx( exp_normn = norm_s( npulses[k] ); exp_normn = sub( exp_normn, 1 ); exp_normd = norm_s( band_width[k] ); - pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); + pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); /* 15 + (exp_norm - exp_normd) */ Qpd = add( sub( exp_normn, exp_normd ), 15 ); #ifdef BASOP_NOGLOB - cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); -#else /* BASOP_NOGLOB */ + cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); /* Q15 */ +#else /* BASOP_NOGLOB */ cond_fx = sub( shl( pd_fx, sub( 15, Qpd ) ), pd_thresh_fx /*Q15*/ ); #endif Overflow = 0; @@ -190,7 +190,7 @@ void mdct_spectrum_denorm_fx( L_tmp = L_Comp( exp, frac ); /* Q16 */ /* Mult part */ - L_tmp = Mpy_32_16_1( L_tmp, ld_slope_fx ); + L_tmp = Mpy_32_16_1( L_tmp, ld_slope_fx ); /* Q16 */ /* Pow part */ temp_lo_fx = L_Extract_lc( L_tmp, &temp_hi_fx ); @@ -213,7 +213,7 @@ void mdct_spectrum_denorm_fx( { /*y2[i] = gamma * inp_vector[i]; */ L_tmp = L_mult( gamma_fx, (Word16) inp_vector[i] ); /* Qgamma+0+1=Qgamma+1 */ - L_y2[i] = L_shl( L_tmp, exp_shift ); + L_y2[i] = L_shl( L_tmp, exp_shift ); /* SWB_BWE_LR_Qs */ move32(); } } @@ -312,11 +312,11 @@ void mdct_spectrum_denorm_ivas_fx( exp_normn = norm_s( pow_fx ); exp_normn = sub( exp_normn, 1 ); exp_normd = norm_l( L_Eyy ); - temp_fx = div_s( shl( pow_fx, exp_normn ), extract_h( L_shl( L_Eyy, exp_normd ) ) ); + temp_fx = div_s( shl( pow_fx, exp_normn ), extract_h( L_shl( L_Eyy, exp_normd ) ) ); /* ((Qpow + exp_norm) - (QEyy + exp_normd)) + 31 */ Qdiv = add( sub( add( Qpow, exp_normn ), add( QEyy, exp_normd ) ), 31 ); exp_norm = norm_s( temp_fx ); - temp_fx = shl( temp_fx, exp_norm ); + temp_fx = shl( temp_fx, exp_norm ); /* Qdiv + exp_norm */ Qdiv = add( Qdiv, exp_norm ); /* Sqrt part sqrt(pow (2.0f, band_energy[i])/Eyy) */ @@ -341,12 +341,12 @@ void mdct_spectrum_denorm_ivas_fx( exp_normn = norm_s( npulses[k] ); exp_normn = sub( exp_normn, 1 ); exp_normd = norm_s( band_width[k] ); - pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); + pd_fx = div_s( shl( npulses[k], exp_normn ), shl( band_width[k], exp_normd ) ); /* 15 + (exp_normn + exp_normd) */ Qpd = add( sub( exp_normn, exp_normd ), 15 ); #ifdef BASOP_NOGLOB - cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); -#else /* BASOP_NOGLOB */ + cond_fx = sub( shl_o( pd_fx, sub( 15, Qpd ), &Overflow ), pd_thresh_fx /*Q15*/ ); /* Q15 */ +#else /* BASOP_NOGLOB */ cond_fx = sub( shl( pd_fx, sub( 15, Qpd ) ), pd_thresh_fx /*Q15*/ ); #endif Overflow = 0; @@ -363,7 +363,7 @@ void mdct_spectrum_denorm_ivas_fx( /* Log2 part */ exp_norm = norm_s( div_pd_fx ); - L_div_pd = L_deposit_h( shl( div_pd_fx, exp_norm ) ); + L_div_pd = L_deposit_h( shl( div_pd_fx, exp_norm ) ); /* Qdivpd + exp_norm + 16 */ Qdivpd = add( add( Qdivpd, exp_norm ), 16 ); frac = Log2_norm_lc( L_div_pd ); @@ -394,7 +394,7 @@ void mdct_spectrum_denorm_ivas_fx( { /*y2[i] = gamma * inp_vector[i]; */ L_tmp = L_mult( gamma_fx, extract_l( inp_vector[i] ) ); /* Qgamma+0+1=Qgamma+1 */ - L_y2[i] = L_shl( L_tmp, exp_shift ); + L_y2[i] = L_shl( L_tmp, exp_shift ); /* SWB_BWE_LR_Qs */ move32(); } } @@ -429,25 +429,26 @@ void mdct_spectrum_denorm_ivas_fx( /*==========================================================================*/ void hq2_core_configure_fx( - const Word16 frame_length, - const Word16 num_bits, - const Word16 is_transient, - Word16 *bands, - Word16 *length, - Word16 band_width[], - Word16 band_start[], - Word16 band_end[], - Word32 *L_qint, - Word16 *eref, - Word16 *bit_alloc_weight, - Word16 *gqlevs, - Word16 *Ngq, - Word16 *p2a_bands, - Word16 *p2a_th, - Word16 *pd_thresh, - Word16 *ld_slope, - Word16 *ni_coef, - Word32 L_bwe_br ) + const Word16 frame_length, /* Q0 */ + const Word16 num_bits, /* Q0 */ + const Word16 is_transient, /* Q0 */ + Word16 *bands, /* Q0 */ + Word16 *length, /* Q0 */ + Word16 band_width[], /* Q0 */ + Word16 band_start[], /* Q0 */ + Word16 band_end[], /* Q0 */ + Word32 *L_qint, /* Q13 */ + Word16 *eref, /* Q10 */ + Word16 *bit_alloc_weight, /* Q13 */ + Word16 *gqlevs, /* Q0 */ + Word16 *Ngq, /* Q0 */ + Word16 *p2a_bands, /* Q0 */ + Word16 *p2a_th, /* Q11 */ + Word16 *pd_thresh, /* Q15 */ + Word16 *ld_slope, /* Q15 */ + Word16 *ni_coef, /* Q14 */ + Word32 L_bwe_br /* Q0 */ +) { const Xcore_Config *xcore_config_fx; @@ -554,67 +555,67 @@ ELSE } } -*bands = xcore_config_fx->bands; +*bands = xcore_config_fx->bands; /* Q0 */ move16(); -*length = xcore_config_fx->bw; +*length = xcore_config_fx->bw; /* Q0 */ move16(); -*L_qint = xcore_config_fx->L_qint; +*L_qint = xcore_config_fx->L_qint; /* Q13 */ move32(); -*eref = xcore_config_fx->eref; +*eref = xcore_config_fx->eref; /* Q10 */ move16(); -*bit_alloc_weight = xcore_config_fx->bit_alloc_weight; +*bit_alloc_weight = xcore_config_fx->bit_alloc_weight; /* Q13 */ move16(); -*gqlevs = xcore_config_fx->gqlevs; +*gqlevs = xcore_config_fx->gqlevs; /* Q0 */ move16(); -*Ngq = xcore_config_fx->Ngq; +*Ngq = xcore_config_fx->Ngq; /* Q0 */ move16(); -*p2a_bands = xcore_config_fx->p2a_bands; +*p2a_bands = xcore_config_fx->p2a_bands; /* Q0 */ move16(); -*p2a_th = xcore_config_fx->p2a_th; +*p2a_th = xcore_config_fx->p2a_th; /* Q11 */ move16(); -*pd_thresh = xcore_config_fx->pd_thresh; +*pd_thresh = xcore_config_fx->pd_thresh; /* Q15 */ move16(); -*ld_slope = xcore_config_fx->ld_slope; +*ld_slope = xcore_config_fx->ld_slope; /* Q14 */ move16(); -*ni_coef = xcore_config_fx->ni_coef; +*ni_coef = xcore_config_fx->ni_coef; /* Q14 */ move16(); /*mvs2s_fx (xcore_config_fx->band_width, band_width, *bands); */ -Copy( xcore_config_fx->band_width, band_width, *bands ); +Copy( xcore_config_fx->band_width, band_width, *bands ); /* Q0 */ /* Expand band_width[] table for short windows */ IF( is_transient ) { - bands_sh = *bands; + bands_sh = *bands; /* Q0 */ move16(); - *bands = shl( bands_sh, 2 ); + *bands = shl( bands_sh, 2 ); /* Q0 */ move16(); - *length = shl( *length, 2 ); + *length = shl( *length, 2 ); /* Q0 */ move16(); FOR( i = 1; i <= 3; i++ ) { FOR( k = 0; k < bands_sh; k++ ) { - band_width[i * bands_sh + k] = band_width[k]; + band_width[i * bands_sh + k] = band_width[k]; /* Q0 */ move16(); } } } /* Formulate band_start and band_end tables from band_width table */ -band_start[0] = 0; +band_start[0] = 0; /* Q0 */ move16(); -band_end[0] = sub( band_width[0], 1 ); +band_end[0] = sub( band_width[0], 1 ); /* Q0 */ move16(); FOR( k = 1; k < *bands; k++ ) { - band_start[k] = add( band_start[k - 1], band_width[k - 1] ); + band_start[k] = add( band_start[k - 1], band_width[k - 1] ); /* Q0 */ move16(); - band_end[k] = sub( add( band_start[k], band_width[k] ), 1 ); + band_end[k] = sub( add( band_start[k], band_width[k] ), 1 ); /* Q0 */ move16(); } @@ -638,37 +639,37 @@ void reverse_transient_frame_energies_fx( Word16 bands_2, bands_4, bands_8; Word32 *p_be1, *p_be2; - bands_2 = shr( bands, 1 ); - bands_4 = shr( bands, 2 ); - bands_8 = shr( bands, 3 ); + bands_2 = shr( bands, 1 ); /* Q0 */ + bands_4 = shr( bands, 2 ); /* Q0 */ + bands_8 = shr( bands, 3 ); /* Q0 */ - k1 = bands_4; - k2 = sub( bands_2, 1 ); - p_be1 = &L_band_energy[k1]; - p_be2 = &L_band_energy[k2]; + k1 = bands_4; /* Q0 */ + k2 = sub( bands_2, 1 ); /* Q0 */ + p_be1 = &L_band_energy[k1]; /* Q14 */ + p_be2 = &L_band_energy[k2]; /* Q14 */ FOR( k = 0; k < bands_8; k++ ) { - L_be = *p_be1; + L_be = *p_be1; /* Q14 */ move32(); - *p_be1 = *p_be2; + *p_be1 = *p_be2; /* Q14 */ move32(); - *p_be2 = L_be; + *p_be2 = L_be; /* Q14 */ move32(); p_be1++; p_be2--; } - k1 = sub( bands, bands_4 ); /* 3*bands/4 */ - k2 = sub( bands, 1 ); - p_be1 = &L_band_energy[k1]; - p_be2 = &L_band_energy[k2]; + k1 = sub( bands, bands_4 ); /* 3*bands/4 Q0 */ + k2 = sub( bands, 1 ); /* Q0 */ + p_be1 = &L_band_energy[k1]; /* Q14 */ + p_be2 = &L_band_energy[k2]; /* Q14 */ FOR( k = 0; k < bands_8; k++ ) { - L_be = *p_be1; + L_be = *p_be1; /* Q14 */ move32(); - *p_be1 = *p_be2; + *p_be1 = *p_be2; /* Q14 */ move32(); - *p_be2 = L_be; + *p_be2 = L_be; /* Q14 */ move32(); p_be1++; p_be2--; @@ -685,14 +686,14 @@ void reverse_transient_frame_energies_fx( *--------------------------------------------------------------------------*/ void spt_shorten_domain_pre_fx( - const Word16 band_start[], /* i: Starting position of sub band */ - const Word16 band_end[], /* i: End position of sub band */ - const Word16 prev_SWB_peak_pos[], /* i: Spectral peak */ - const Word16 BANDS, /* i: total number of bands */ - const Word32 L_bwe_br, /* i: bitrate information */ - Word16 new_band_start[], /* o: Starting position of new shorten sub band */ - Word16 new_band_end[], /* o: End position of new shorten sub band */ - Word16 new_band_width[] /* o: new sub band bandwidth */ + const Word16 band_start[], /* i: Starting position of sub band Q0*/ + const Word16 band_end[], /* i: End position of sub band Q0*/ + const Word16 prev_SWB_peak_pos[], /* i: Spectral peak Q0*/ + const Word16 BANDS, /* i: total number of bands Q0*/ + const Word32 L_bwe_br, /* i: bitrate information Q0*/ + Word16 new_band_start[], /* o: Starting position of new shorten sub band Q0*/ + Word16 new_band_end[], /* o: End position of new shorten sub band Q0*/ + Word16 new_band_width[] /* o: new sub band bandwidth Q0*/ ) { Word16 j; @@ -702,60 +703,60 @@ void spt_shorten_domain_pre_fx( Word16 new_band_width_half; const Word16 *p_bw_SPT_tbl; /* pointer of bw_SPT_tbl */ - p_bw_SPT_tbl = bw_SPT_tbl[0]; + p_bw_SPT_tbl = bw_SPT_tbl[0]; /* Q0 */ if ( EQ_32( L_bwe_br, HQ_16k40 ) ) { - p_bw_SPT_tbl = bw_SPT_tbl[1]; + p_bw_SPT_tbl = bw_SPT_tbl[1]; /* Q0 */ } kpos = 0; move16(); j = 0; move16(); - FOR( k = sub( BANDS, SPT_SHORTEN_SBNUM ); k < BANDS; k++ ) + FOR( k = BANDS - SPT_SHORTEN_SBNUM; k < BANDS; k++ ) { IF( prev_SWB_peak_pos[kpos] != 0 ) { - new_band_width[j] = p_bw_SPT_tbl[j]; + new_band_width[j] = p_bw_SPT_tbl[j]; /* Q0 */ /*shorten the bandwidth for pulse resolution*/ - new_band_width_half = shr( new_band_width[j], 1 ); + new_band_width_half = shr( new_band_width[j], 1 ); /* Q0 */ move16(); - new_band_start[j] = sub( prev_SWB_peak_pos[kpos], new_band_width_half ); + new_band_start[j] = sub( prev_SWB_peak_pos[kpos], new_band_width_half ); /* Q0 */ move16(); - new_band_end[j] = add( prev_SWB_peak_pos[kpos], new_band_width_half ); + new_band_end[j] = add( prev_SWB_peak_pos[kpos], new_band_width_half ); /* Q0 */ move16(); IF( LT_16( new_band_start[j], band_start[k] ) ) { - new_band_start[j] = band_start[k]; + new_band_start[j] = band_start[k]; /* Q0 */ move16(); - new_band_end[j] = add( new_band_start[j], sub( new_band_width[j], 1 ) ); + new_band_end[j] = add( new_band_start[j], sub( new_band_width[j], 1 ) ); /* Q0 */ move16(); } ELSE IF( GT_16( new_band_end[j], band_end[k] ) ) { - new_band_end[j] = band_end[k]; + new_band_end[j] = band_end[k]; /* Q0 */ move16(); - new_band_start[j] = sub( new_band_end[j], sub( new_band_width[j], 1 ) ); + new_band_start[j] = sub( new_band_end[j], sub( new_band_width[j], 1 ) ); /* Q0 */ move16(); } } ELSE { - new_band_width[j] = p_bw_SPT_tbl[j]; + new_band_width[j] = p_bw_SPT_tbl[j]; /* Q0 */ /*shorten the bandwidth for pulse resolution*/ - new_band_width_half = shr( new_band_width[j], 1 ); + new_band_width_half = shr( new_band_width[j], 1 ); /* Q0 */ move16(); - new_band_start[j] = sub( shr( add( band_start[k], band_end[k] ), 1 ), new_band_width_half ); + new_band_start[j] = sub( shr( add( band_start[k], band_end[k] ), 1 ), new_band_width_half ); /* Q0 */ move16(); - new_band_end[j] = add( shr( add( band_start[k], band_end[k] ), 1 ), new_band_width_half ); + new_band_end[j] = add( shr( add( band_start[k], band_end[k] ), 1 ), new_band_width_half ); /* Q0 */ move16(); } - kpos = add( kpos, 1 ); - j = add( j, 1 ); + kpos++; + j++; } return; @@ -768,13 +769,13 @@ void spt_shorten_domain_pre_fx( *--------------------------------------------------------------------------*/ void spt_shorten_domain_band_save_fx( - const Word16 bands, /* i: total subband */ - const Word16 band_start[], /* i: starting position of subband */ - const Word16 band_end[], /* i: end position of subband */ - const Word16 band_width[], /* i: band width of subband */ - Word16 org_band_start[], /* o: starting position of subband */ - Word16 org_band_end[], /* o: end position of subband */ - Word16 org_band_width[] /* o: band width of subband */ + const Word16 bands, /* i: total subband Q0*/ + const Word16 band_start[], /* i: starting position of subband Q0*/ + const Word16 band_end[], /* i: end position of subband Q0*/ + const Word16 band_width[], /* i: band width of subband Q0*/ + Word16 org_band_start[], /* o: starting position of subband Q0*/ + Word16 org_band_end[], /* o: end position of subband Q0*/ + Word16 org_band_width[] /* o: band width of subband Q0*/ ) { Word16 k; @@ -782,15 +783,15 @@ void spt_shorten_domain_band_save_fx( kpos = 0; move16(); - FOR( k = sub( bands, SPT_SHORTEN_SBNUM ); k < bands; k++ ) + FOR( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) { - org_band_start[kpos] = band_start[k]; + org_band_start[kpos] = band_start[k]; /* Q0 */ move16(); - org_band_end[kpos] = band_end[k]; + org_band_end[kpos] = band_end[k]; /* Q0 */ move16(); - org_band_width[kpos] = band_width[k]; + org_band_width[kpos] = band_width[k]; /* Q0 */ move16(); - kpos = add( kpos, 1 ); + kpos++; } return; @@ -803,13 +804,13 @@ void spt_shorten_domain_band_save_fx( *--------------------------------------------------------------------------*/ void spt_shorten_domain_band_restore_fx( - const Word16 bands, /* i: total subband */ - Word16 band_start[], /* i/o: starting position of subband */ - Word16 band_end[], /* i/o: end position of subband */ - Word16 band_width[], /* i/o: band width of subband */ - const Word16 org_band_start[], /* o: starting position of subband */ - const Word16 org_band_end[], /* o: end position of subband */ - const Word16 org_band_width[] /* o: band width of subband */ + const Word16 bands, /* i: total subband Q0*/ + Word16 band_start[], /* i/o: starting position of subband Q0*/ + Word16 band_end[], /* i/o: end position of subband Q0*/ + Word16 band_width[], /* i/o: band width of subband Q0*/ + const Word16 org_band_start[], /* o: starting position of subband Q0*/ + const Word16 org_band_end[], /* o: end position of subband Q0*/ + const Word16 org_band_width[] /* o: band width of subband Q0*/ ) { Word16 k; @@ -817,15 +818,15 @@ void spt_shorten_domain_band_restore_fx( kpos = 0; move16(); - FOR( k = sub( bands, SPT_SHORTEN_SBNUM ); k < bands; k++ ) + FOR( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) { - band_start[k] = org_band_start[kpos]; + band_start[k] = org_band_start[kpos]; /* Q0 */ move16(); - band_end[k] = org_band_end[kpos]; + band_end[k] = org_band_end[kpos]; /* Q0 */ move16(); - band_width[k] = org_band_width[kpos]; + band_width[k] = org_band_width[kpos]; /* Q0 */ move16(); - kpos = add( kpos, 1 ); + kpos++; } return; @@ -838,11 +839,11 @@ void spt_shorten_domain_band_restore_fx( *--------------------------------------------------------------------------*/ void spt_swb_peakpos_tmp_save_fx( - const Word32 L_y2[], /* i: coded spectral information */ - const Word16 bands, /* i: total number of bands */ - const Word16 band_start[], /* i: starting position of subband */ - const Word16 band_end[], /* i: end position of subband */ - Word16 prev_SWB_peak_pos_tmp[] /* o: spectral peaks */ + const Word32 L_y2[], /* i: coded spectral information Qx*/ + const Word16 bands, /* i: total number of bands Q0*/ + const Word16 band_start[], /* i: starting position of subband Q0*/ + const Word16 band_end[], /* i: end position of subband Q0*/ + Word16 prev_SWB_peak_pos_tmp[] /* o: spectral peaks Q0*/ ) { @@ -852,7 +853,7 @@ void spt_swb_peakpos_tmp_save_fx( j = 0; move16(); - FOR( k = sub( bands, SPT_SHORTEN_SBNUM ); k < bands; k++ ) + FOR( k = bands - SPT_SHORTEN_SBNUM; k < bands; k++ ) { L_peak_max = L_deposit_l( 0 ); prev_SWB_peak_pos_tmp[j] = 0; @@ -863,13 +864,13 @@ void spt_swb_peakpos_tmp_save_fx( move32(); IF( LT_32( L_peak_max, L_abs_y2 ) ) { - L_peak_max = L_abs_y2; + L_peak_max = L_abs_y2; /* Qx */ move32(); - prev_SWB_peak_pos_tmp[j] = i; + prev_SWB_peak_pos_tmp[j] = i; /* Q0 */ move16(); } } - j = add( j, 1 ); + j++; } return; } @@ -877,16 +878,17 @@ void spt_swb_peakpos_tmp_save_fx( // already present need this one because appropriate and uses basops other than previous one. void bit_allocation_second_fx( - Word32 *Rk, - Word32 *Rk_sort, - Word16 BANDS, - const Word16 *band_width, - Word16 *k_sort, - Word16 *k_num, - const Word16 *p2a_flags, - const Word16 p2a_bands, - const Word16 *last_bitalloc, - const Word16 input_frame ) + Word32 *Rk, /* Q16 */ + Word32 *Rk_sort, /* Q16 */ + Word16 BANDS, /* Q0 */ + const Word16 *band_width, /* Q0 */ + Word16 *k_sort, /* Q0 */ + Word16 *k_num, /* Q0 */ + const Word16 *p2a_flags, /* Q0 */ + const Word16 p2a_bands, /* Q0 */ + const Word16 *last_bitalloc, /* Q0 */ + const Word16 input_frame /* Q0 */ +) { Word16 k, k2 = 0; move16(); @@ -906,7 +908,7 @@ void bit_allocation_second_fx( test(); test(); IF( ( ( GE_16( k_sort[k], sub( BANDS, p2a_bands ) ) ) && ( EQ_16( p2a_flags[k_sort[k]], 1 ) ) ) || - ( ( GE_16( k_sort[k], sub( BANDS, 2 ) ) ) && ( EQ_16( last_bitalloc[sub( k_sort[k], sub( BANDS, 2 ) )], 1 ) ) ) ) + ( ( GE_16( k_sort[k], ( BANDS - 2 ) ) ) && ( EQ_16( last_bitalloc[k_sort[k] - ( BANDS - 2 )], 1 ) ) ) ) { exp = norm_s( band_width[k_sort[k]] ); tmp = shl( band_width[k_sort[k]], exp ); /*Q(exp) */ @@ -916,7 +918,7 @@ void bit_allocation_second_fx( ever_bits[k] = extract_l( L_shr( L_tmp, tmp ) ); /*Q12 */ IF( LT_16( ever_bits[k], rk_temp ) ) { - rk_temp = ever_bits[k]; + rk_temp = ever_bits[k]; /* Q12 */ move16(); k2 = k; move16(); @@ -941,7 +943,7 @@ void bit_allocation_second_fx( ever_sort[k] = extract_l( L_shr( L_tmp, tmp ) ); /*Q12 */ IF( LT_16( ever_sort[k], ever_temp ) ) { - ever_temp = ever_sort[k]; + ever_temp = ever_sort[k]; /* Q12 */ move16(); k2 = k; move16(); @@ -950,7 +952,7 @@ void bit_allocation_second_fx( } } - k_num[0] = k2; + k_num[0] = k2; /* Q0 */ move16(); IF( EQ_16( k_sort[k2], sub( BANDS, 1 ) ) ) { @@ -958,7 +960,7 @@ void bit_allocation_second_fx( { if ( EQ_16( k_sort[k], sub( k_sort[k2], 1 ) ) ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } @@ -969,20 +971,20 @@ void bit_allocation_second_fx( { if ( EQ_16( k_sort[k], add( k_sort[k2], 1 ) ) ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } } ELSE { - IF( LT_32( Rk[sub( k_sort[k2], 1 )], Rk[add( k_sort[k2], 1 )] ) ) + IF( LT_32( Rk[k_sort[k2] - 1], Rk[k_sort[k2] + 1] ) ) { FOR( k = 0; k < BANDS; k++ ) { if ( EQ_16( k_sort[k], sub( k_sort[k2], 1 ) ) ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } @@ -993,7 +995,7 @@ void bit_allocation_second_fx( { if ( EQ_16( k_sort[k], add( k_sort[k2], 1 ) ) ) { - k_num[1] = k; + k_num[1] = k; /* Q0 */ move16(); } } diff --git a/lib_com/hq2_noise_inject_fx.c b/lib_com/hq2_noise_inject_fx.c index 223462df43299c371c82a0e52464f59541dd9db9..12bedd1fb66e9f1c04ac692d049ccc1f46e58839 100644 --- a/lib_com/hq2_noise_inject_fx.c +++ b/lib_com/hq2_noise_inject_fx.c @@ -43,28 +43,29 @@ * HQ2 noise injection for WB signals *--------------------------------------------------------------------------*/ void hq2_noise_inject_fx( - Word32 L_y2[], - const Word16 band_start[], - const Word16 band_end[], - const Word16 band_width[], - Word32 Ep_fx[], - Word32 Rk_fx[], - const Word16 npulses[], - Word16 ni_seed, - const Word16 bands, - const Word16 ni_start_band, - const Word16 bw_low, - const Word16 bw_high, - const Word32 enerL_fx, - const Word32 enerH_fx, - Word32 last_ni_gain_fx[], - Word16 last_env_fx[], - Word16 *last_max_pos_pulse, - Word16 *p2a_flags, - Word16 p2a_bands, - const Word16 hqswb_clas, - const Word16 bwidth, - const Word32 bwe_br ) + Word32 L_y2[], /* Q12 */ + const Word16 band_start[], /* Q0 */ + const Word16 band_end[], /* Q0 */ + const Word16 band_width[], /* Q0 */ + Word32 Ep_fx[], /* Q-6 */ + Word32 Rk_fx[], /* QRk (Q16) */ + const Word16 npulses[], /* Q0 */ + Word16 ni_seed, /* Q0 */ + const Word16 bands, /* Q0 */ + const Word16 ni_start_band, /* Q0 */ + const Word16 bw_low, /* Q0 */ + const Word16 bw_high, /* Q0 */ + const Word32 enerL_fx, /* Q0 */ + const Word32 enerH_fx, /* Q0 */ + Word32 last_ni_gain_fx[], /* Q17 */ + Word16 last_env_fx[], /* Q1 */ + Word16 *last_max_pos_pulse, /* Q0 */ + Word16 *p2a_flags, /* Q0 */ + Word16 p2a_bands, /* Q0 */ + const Word16 hqswb_clas, /* Q0 */ + const Word16 bwidth, /* Q0 */ + const Word32 bwe_br /* Q0 */ +) { Word32 L_tmp, L_tmp2, L_tmp2x, L_tmp3, L_tmp1; Word16 exp, exp2, Q_speech; @@ -136,7 +137,7 @@ void hq2_noise_inject_fx( exp = norm_l( L_tmp ); tmp = extract_h( L_shl( L_tmp, exp ) ); - L_tmp3 = (Word32) band_width[k]; + L_tmp3 = (Word32) band_width[k]; /* Q0 */ move32(); exp2 = norm_l( L_tmp3 ); tmp2 = extract_h( L_shl( L_tmp3, exp2 ) ); @@ -152,8 +153,8 @@ void hq2_noise_inject_fx( { exp2 = add( exp2, 1 ); } - tmp = div_s( tmp2, tmp ); - L_tmp = L_deposit_h( tmp ); + tmp = div_s( tmp2, tmp ); /* Q15 */ + L_tmp = L_deposit_h( tmp ); /* Q31 */ L_tmp = Isqrt_lc( L_tmp, &exp2 ); env_fx[k] = L_tmp; move32(); /*Q(31-exp2) move32(); */ @@ -174,35 +175,35 @@ void hq2_noise_inject_fx( { FOR( i = band_start[k]; i <= band_end[k]; i++ ) { - L_tmp = L_mult0( y2hat_fx[i], y2hat_fx[i] ); /*0 */ + L_tmp = L_mult0( y2hat_fx[i], y2hat_fx[i] ); /* Q0 */ #ifdef BASOP_NOGLOB Ep_fx[k] = L_sub_o( Ep_fx[k], L_tmp, &Overflow ); #else /* BASOP_NOGLOB */ Ep_fx[k] = L_sub( Ep_fx[k], L_tmp ); #endif /* BASOP_NOGLOB */ - move32(); /*0 */ + move32(); /* Q0 */ IF( GT_16( abs_s( y2hat_fx[i] ), peak_fx[k] ) ) { peak_fx[k] = abs_s( y2hat_fx[i] ); - move16(); /*0 */ + move16(); /* Q0 */ } IF( y2hat_fx[i] != 0 ) { - count[k] = add( count[k], 1 ); + count[k] = add( count[k], 1 ); /* Q0 */ move16(); } } - max_pos_pulse = k; + max_pos_pulse = k; /* Q0 */ move16(); - L_tmp2 = Ep_fx[k]; + L_tmp2 = Ep_fx[k]; /* Q0 */ move32(); L_tmp = L_max( 1, L_tmp2 ); exp = norm_l( L_tmp ); tmp = extract_h( L_shl( L_tmp, exp ) ); - L_tmp3 = (Word32) band_width[k]; + L_tmp3 = (Word32) band_width[k]; /* Q0 */ exp2 = norm_l( L_tmp3 ); tmp2 = extract_h( L_shl( L_tmp3, exp2 ) ); @@ -217,8 +218,8 @@ void hq2_noise_inject_fx( { exp2 = add( exp2, 1 ); } - tmp = div_s( tmp2, tmp ); - L_tmp = L_deposit_h( tmp ); + tmp = div_s( tmp2, tmp ); /* Q15 */ + L_tmp = L_deposit_h( tmp ); /* Q31 */ L_tmp = Isqrt_lc( L_tmp, &exp2 ); Ep_fx[k] = L_tmp; move32(); /*Q(31-exp2) */ @@ -239,9 +240,9 @@ void hq2_noise_inject_fx( /* calculate the noise gain */ satur = 0; move16(); - if ( GE_16( pd_fx[k], 819 ) ) + if ( GE_16( pd_fx[k], 819 /* 0.8 in Q10 */ ) ) { - satur = 1; + satur = 1; /* Q0 */ move16(); } @@ -262,7 +263,7 @@ void hq2_noise_inject_fx( } ELSE { - tmp = 0x7fff; + tmp = 0x7fff; /* 1 in Q15 */ move16(); Q_speech = 0; move16(); @@ -274,10 +275,10 @@ void hq2_noise_inject_fx( IF( EQ_16( hqswb_clas, HQ_HARMONIC ) ) { - tmp = sub( 1536, pd_fx[k] ); /*Q10 */ - tmp3 = shl( tmp, 4 ); /*Q14 */ - L_tmp = Mult_32_16( env_fx[k], tmp3 ); /*Q(Q_env_fx[k]+14-15 = Q_env_fx[k]-1) */ - L_tmp = Mult_32_16( L_tmp, 6144 ); /*Q(Q_env_fx[k]-1+10-15 = Q_env_fx[k]-6) */ + tmp = sub( 1536 /* 1.5 in Q10 */, pd_fx[k] ); /*Q10 */ + tmp3 = shl( tmp, 4 ); /*Q14 */ + L_tmp = Mult_32_16( env_fx[k], tmp3 ); /*Q(Q_env_fx[k]+14-15 = Q_env_fx[k]-1) */ + L_tmp = Mult_32_16( L_tmp, 6144 /* 6.0f in Q10 */ ); /*Q(Q_env_fx[k]-1+10-15 = Q_env_fx[k]-6) */ IF( peak_fx[k] != 0 ) { @@ -287,7 +288,7 @@ void hq2_noise_inject_fx( } ELSE { - tmp = 0x7fff; + tmp = 0x7fff; /* 1 in Q15 */ move16(); Q_speech = 0; move16(); @@ -307,48 +308,48 @@ void hq2_noise_inject_fx( move16(); /*Q12 */ if ( GT_16( k, sb ) ) { - fac_fx = mult( 24576, tmp2 ); /*//Q(14+13-15=12) */ + fac_fx = mult( 24576 /* 1.5 in Q14 */, tmp2 ); /*//Q(14+13-15=12) */ } } ELSE { IF( LE_16( k, sb ) ) { - tmp = sub( 1536, pd_fx[k] ); /*Q10 */ + tmp = sub( 1536 /* 1.5 in Q10 */, pd_fx[k] ); /*Q10 */ tmp3 = shl( tmp, 4 ); /*Q14 */ L_tmp = Mult_32_16( L_tmp2x, tmp3 ); /*Q(Q_Ep_fx[k]-Q_speech+14+14-15 = Q_Ep_fx[k]-Q_speech+13) */ - L_tmp = Mult_32_16( L_tmp, 20480 ); /*Q(Q_Ep_fx[k]-Q_speech+13+12-15 = Q_Ep_fx[k]-Q_speech+10) */ + L_tmp = Mult_32_16( L_tmp, 20480 /* 5 in Q12 */ ); /*Q(Q_Ep_fx[k]-Q_speech+13+12-15 = Q_Ep_fx[k]-Q_speech+10) */ fac_fx = extract_h( L_shl( L_tmp, sub( add( 18, Q_speech ), Q_Ep_fx[k] ) ) ); /*Q_Ep_fx[k]-Q_speech+10 +18+Q_speech-Q_Ep_fx[k] -16 =12 */ } ELSE { - fac_fx = shl( mult( 32767, tmp2 ), 1 ); /*//Q(13+13-15+1=12) */ + fac_fx = shl( mult( 32767 /* 4.0f in Q13 */, tmp2 ), 1 ); /*//Q(13+13-15+1=12) */ } } } ELSE { fac_fx = 4505; - move16(); /*Q12 */ + move16(); /* 1.1 in Q12 */ } } ELSE { - tmp = sub( 1536, pd_fx[k] ); /*Q10 */ - tmp2 = s_min( 1024, tmp ); /*q10 */ - tmp2 = shl( tmp2, 4 ); /*Q14 */ - L_tmp = Mult_32_16( env_fx[k], tmp2 ); /*Q(Q_env_fx[k]+14-15 = Q_env_fx[k]-1) */ - L_tmp = Mult_32_16( L_tmp, 20480 ); /*Q(Q_env_fx[k]-1+10-15 = Q_env_fx[k]-6) */ + tmp = sub( 1536 /* 1.5 in Q10 */, pd_fx[k] ); /*Q10 */ + tmp2 = s_min( 1024 /* 1 in Q10 */, tmp ); /*q10 */ + tmp2 = shl( tmp2, 4 ); /*Q14 */ + L_tmp = Mult_32_16( env_fx[k], tmp2 ); /*Q(Q_env_fx[k]+14-15 = Q_env_fx[k]-1) */ + L_tmp = Mult_32_16( L_tmp, 20480 /* 20 in Q10 */ ); /*Q(Q_env_fx[k]-1+10-15 = Q_env_fx[k]-6) */ IF( peak_fx[k] != 0 ) { Q_speech = norm_s( peak_fx[k] ); - tmp = shl( peak_fx[k], Q_speech ); /*Q(Q_speech) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-Q_speech) */ + tmp = shl( peak_fx[k], Q_speech ); /*Q(Q_speech) */ + tmp = div_s( 16384 /* 0.5f in Q15 */, tmp ); /*Q(15+14-Q_speech) */ } ELSE { - tmp = 0x7fff; + tmp = 0x7fff; /* 1 in Q15 */ move16(); Q_speech = 0; move16(); @@ -371,35 +372,35 @@ void hq2_noise_inject_fx( IF( env_fx2[k] != 0 ) { Q_speech = norm_s( env_fx2[k] ); - tmp = shl( env_fx2[k], Q_speech ); /*Q(Q_speech+1) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-Q_speech-1=28-Q_speech) */ + tmp = shl( env_fx2[k], Q_speech ); /*Q(Q_speech+1) */ + tmp = div_s( 16384 /* 0.5 in Q15 */, tmp ); /*Q(15+14-Q_speech-1=28-Q_speech) */ Q_speech = sub( 28, Q_speech ); } ELSE { - tmp = 0x7fff; + tmp = 0x7fff; /* 1/0 in Q15 */ move16(); Q_speech = 0; move16(); } - tmp1 = mult( env_fx2[add( k, 1 )], 16384 ); /*Q(1+15-15=1) Q1 */ + tmp1 = mult( env_fx2[k + 1], 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15=1) Q1 */ tmp2 = sub( env_fx2[k], tmp1 ); - tmp1 = mult( env_fx2[k], 16384 ); /*Q(1+15-15=1) Q1 */ - tmp3 = sub( tmp1, env_fx2[sub( k, 1 )] ); - tmp1 = mult( peak_fx[k], 16384 ); /*Q(0+15-15=0) Q0 */ + tmp1 = mult( env_fx2[k], 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15=1) Q1 */ + tmp3 = sub( tmp1, env_fx2[k - 1] ); + tmp1 = mult( peak_fx[k], 16384 /* 0.5 in Q15 */ ); /*Q(0+15-15=0) Q0 */ tmp4 = sub( tmp1, shr( env_fx2[k], 1 ) ); test(); test(); test(); - IF( count[add( k, 1 )] == 0 && tmp2 > 0 && tmp3 < 0 ) + IF( count[k + 1] == 0 && tmp2 > 0 && tmp3 < 0 ) { - L_tmp = L_mult( env_fx2[add( k, 1 )], tmp ); /* Q(1+Q_speech+1 = Q_speech+2) */ - L_tmp = Mult_32_16( L_tmp, 24576 ); /*Q(Q_speech+2+14-15=Q_speech+1) */ + L_tmp = L_mult( env_fx2[k + 1], tmp ); /* Q(1+Q_speech+1 = Q_speech+2) */ + L_tmp = Mult_32_16( L_tmp, 24576 /* 1.5 in Q14 */ ); /*Q(Q_speech+2+14-15=Q_speech+1) */ fac_fx = extract_h( L_shl( L_tmp, sub( 27, Q_speech ) ) ); /*Q12 */ } - ELSE IF( count[sub( k, 1 )] == 0 && tmp4 > 0 ) + ELSE IF( count[k - 1] == 0 && tmp4 > 0 ) { - L_tmp = L_mult( env_fx2[sub( k, 1 )], tmp ); /* Q(1+Q_speech+1 = Q_speech+2) */ + L_tmp = L_mult( env_fx2[k - 1], tmp ); /* Q(1+Q_speech+1 = Q_speech+2) */ #ifdef BASOP_NOGLOB fac_fx = extract_h( L_shl_o( L_tmp, sub( 26, Q_speech ), &Overflow ) ); /*Q12 */ #else @@ -414,7 +415,7 @@ void hq2_noise_inject_fx( L_tmp = Mult_32_16( enerH_fx, bw_low ); L_tmp2 = Mult_32_16( enerL_fx, bw_high ); L_tmp = L_sub( L_tmp, L_tmp2 ); - tmp1 = mult( peak_fx[k], 16384 ); /*Q(0+15-15=0) Q0 */ + tmp1 = mult( peak_fx[k], 16384 /* 0.5 in Q15 */ ); /*Q(0+15-15=0) Q0 */ tmp4 = sub( tmp1, shr( env_fx2[k], 1 ) ); test(); IF( L_tmp > 0 && tmp4 < 0 ) @@ -422,12 +423,12 @@ void hq2_noise_inject_fx( IF( peak_fx[k] != 0 ) { Q_speech = norm_s( peak_fx[k] ); - tmp = shl( peak_fx[k], Q_speech ); /*Q(Q_speech) */ - tmp = div_s( 16384, tmp ); /*Q(15+14-Q_speech) */ + tmp = shl( peak_fx[k], Q_speech ); /*Q(Q_speech) */ + tmp = div_s( 16384 /* 0.5 in Q15 */, tmp ); /*Q(15+14-Q_speech) */ } ELSE { - tmp = 0x7fff; + tmp = 0x7fff; /* 1.0f in Q15 */ move16(); Q_speech = 0; move16(); @@ -436,7 +437,7 @@ void hq2_noise_inject_fx( tmp = sub( Q_Ep_fx[k], Q_speech ); tmp = add( tmp, 1 ); tmp = extract_l( L_shr( L_tmp2, tmp ) ); /*Q13 */ - tmp = sub( 16384, tmp ); /*Q13 */ + tmp = sub( 16384 /* 2 in Q13 */, tmp ); /*Q13 */ fac_fx = extract_h( L_shl( L_mult( fac_fx, tmp ), 2 ) ); /*Q12*/ } @@ -447,9 +448,9 @@ void hq2_noise_inject_fx( tmp = extract_h( L_shl( L_tmp2, Q_speech ) ); /*Q(Q_Ep_fx[k]-3+Q_speech-16 = Q_Ep_fx[k]+Q_speech-19) */ IF( tmp != 0 ) { - tmp = div_s( 16384, tmp ); /*Q(15+14-Q_Ep_fx[k]-Q_speech+19 = 48-Q_Ep_fx[k]-Q_speech) */ - L_tmp2 = Mult_32_16( env_fx[k], tmp ); /*Q(Q_env_fx[k]+48-Q_Ep_fx[k]-Q_speech-15 = Q_env_fx[k]-Q_Ep_fx[k]-Q_speech+33) */ - L_tmp2 = Mult_32_16( L_tmp2, 20480 ); /*Q(Q_env_fx[k]-Q_Ep_fx[k]-Q_speech+33+14-15 = Q_env_fx[k]-Q_Ep_fx[k]-Q_speech+32) */ + tmp = div_s( 16384 /* 0.5 in Q15 */, tmp ); /*Q(15+14-Q_Ep_fx[k]-Q_speech+19 = 48-Q_Ep_fx[k]-Q_speech) */ + L_tmp2 = Mult_32_16( env_fx[k], tmp ); /*Q(Q_env_fx[k]+48-Q_Ep_fx[k]-Q_speech-15 = Q_env_fx[k]-Q_Ep_fx[k]-Q_speech+33) */ + L_tmp2 = Mult_32_16( L_tmp2, 20480 /* 1.25 in Q14 */ ); /*Q(Q_env_fx[k]-Q_Ep_fx[k]-Q_speech+33+14-15 = Q_env_fx[k]-Q_Ep_fx[k]-Q_speech+32) */ tmp = sub( Q_env_fx[k], Q_Ep_fx[k] ); tmp = sub( tmp, Q_speech ); tmp = add( tmp, 25 ); @@ -458,22 +459,22 @@ void hq2_noise_inject_fx( #else L_tmp = L_shr( L_tmp2, tmp ); /*Q7 */ #endif - tmp = extract_l( L_min( L_tmp, 192 ) ); /* */ + tmp = extract_l( L_min( L_tmp, 192 /* 1.5 in Q7 */ ) ); /* */ fac_fx = extract_h( L_shl( L_mult( fac_fx, tmp ), 8 ) ); /*Q12 */ } ELSE { - tmp = 0x7fff; /*Q0 */ - L_tmp2 = Mult_32_16( env_fx[k], tmp ); /*Q(Q_env_fx[k]+0-15 = Q_env_fx[k]-15) */ - L_tmp2 = Mult_32_16( L_tmp2, 20480 ); /*Q(Q_env_fx[k]-15+14-15 = Q_env_fx[k]-16) */ + tmp = 0x7fff; /*Q0 */ + L_tmp2 = Mult_32_16( env_fx[k], tmp ); /*Q(Q_env_fx[k]+0-15 = Q_env_fx[k]-15) */ + L_tmp2 = Mult_32_16( L_tmp2, 20480 /* 1.25 in Q14 */ ); /*Q(Q_env_fx[k]-15+14-15 = Q_env_fx[k]-16) */ tmp = sub( Q_env_fx[k], 23 ); #ifdef BASOP_NOGLOB L_tmp = L_shr_sat( L_tmp2, tmp ); /*Q7 */ #else L_tmp = L_shr( L_tmp2, tmp ); /*Q7 */ #endif - tmp = extract_l( ( L_min( L_tmp, 192 ) ) ); /* */ - fac_fx = extract_h( L_shl( L_mult( fac_fx, tmp ), 8 ) ); /*Q12 */ + tmp = extract_l( ( L_min( L_tmp, 192 /* 1.5 in Q7 */ ) ) ); /* Q7 */ + fac_fx = extract_h( L_shl( L_mult( fac_fx, tmp ), 8 ) ); /*Q12 */ } } } @@ -481,12 +482,12 @@ void hq2_noise_inject_fx( } ELSE { - fac_fx = 4505; + fac_fx = 4505; /* 1.1 in Q12 */ move16(); test(); if ( EQ_16( hqswb_clas, HQ_HARMONIC ) && EQ_16( bwidth, SWB ) ) { - fac_fx = 3277; + fac_fx = 3277; /* 0.8 in Q12 */ move16(); } } @@ -505,11 +506,11 @@ void hq2_noise_inject_fx( } /* smooth the noise gain between the current frame and the previous frame */ - pos = s_max( max_pos_pulse, *last_max_pos_pulse ); + pos = s_max( max_pos_pulse, *last_max_pos_pulse ); /* Q0 */ move16(); if ( EQ_16( bwidth, SWB ) ) { - pos = sub( ni_end_band, 1 ); + pos = sub( ni_end_band, 1 ); /* Q0 */ move16(); } @@ -518,18 +519,18 @@ void hq2_noise_inject_fx( test(); IF( k > 0 && LT_16( sub( k, ni_end_band ), -1 ) ) { - tmp1 = mult( last_env_fx[k], 16384 ); /*Q(1+15-15=1) Q1 */ - tmp2 = sub( env_fx2[k], tmp1 ); /*>0 */ - tmp1 = mult( env_fx2[k], 16384 ); /*Q(1+15-15=1) Q1 */ - tmp3 = sub( tmp1, last_env_fx[k] ); /*<0 */ - L_tmp = L_add( (Word32) env_fx2[k], (Word32) env_fx2[sub( k, 1 )] ); - L_tmp = L_add( L_tmp, (Word32) env_fx2[add( k, 1 )] ); /*Q1 */ - L_tmp1 = L_add( (Word32) last_env_fx[k], (Word32) last_env_fx[sub( k, 1 )] ); - L_tmp1 = L_add( L_tmp1, (Word32) last_env_fx[add( k, 1 )] ); /*Q1 */ - L_tmp2 = Mult_32_16( L_tmp1, 16384 ); /*Q(1+15-15) Q1 */ - L_tmp2 = L_sub( L_tmp, L_tmp2 ); /*>0 */ - L_tmp3 = Mult_32_16( L_tmp, 16384 ); /*Q(1+15-15) Q1 */ - L_tmp3 = L_sub( L_tmp3, L_tmp1 ); /*<0 */ + tmp1 = mult( last_env_fx[k], 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15=1) Q1 */ + tmp2 = sub( env_fx2[k], tmp1 ); /* Q1 */ + tmp1 = mult( env_fx2[k], 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15=1) Q1 */ + tmp3 = sub( tmp1, last_env_fx[k] ); /* Q1 */ + L_tmp = L_add( (Word32) env_fx2[k], (Word32) env_fx2[k - 1] ); /* Q1 */ + L_tmp = L_add( L_tmp, (Word32) env_fx2[k + 1] ); /*Q1 */ + L_tmp1 = L_add( (Word32) last_env_fx[k], (Word32) last_env_fx[k - 1] ); /* Q1 */ + L_tmp1 = L_add( L_tmp1, (Word32) last_env_fx[k + 1] ); /*Q1 */ + L_tmp2 = Mult_32_16( L_tmp1, 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15) Q1 */ + L_tmp2 = L_sub( L_tmp, L_tmp2 ); /*Q1 */ + L_tmp3 = Mult_32_16( L_tmp, 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15) Q1 */ + L_tmp3 = L_sub( L_tmp3, L_tmp1 ); /*Q1 */ test(); test(); test(); @@ -537,32 +538,32 @@ void hq2_noise_inject_fx( { IF( GT_32( ni_gain_fx[k], last_ni_gain_fx[k] ) ) { - L_tmp = Mult_32_16( ni_gain_fx[k], 6554 ); /*Q(17+15-15 = 17) */ - L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 26214 ); /*Q17 */ - ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); + L_tmp = Mult_32_16( ni_gain_fx[k], 6554 /* 0.2 in Q15 */ ); /*Q(17+15-15 = 17) */ + L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 26214 /* 0.8 in Q15 */ ); /*Q17 */ + ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); /* Q17 */ move32(); } ELSE { - L_tmp = Mult_32_16( ni_gain_fx[k], 19661 ); /*Q(17+15-15 = 17) */ - L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 13107 ); /*Q17 */ - ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); + L_tmp = Mult_32_16( ni_gain_fx[k], 19661 /* 0.6 in Q15 */ ); /*Q(17+15-15 = 17) */ + L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 13107 /* 0.4 in Q15 */ ); /*Q17 */ + ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); /* Q17 */ move32(); } } } ELSE IF( add( sub( k, ni_end_band ), 1 ) == 0 ) { - tmp1 = mult( last_env_fx[k], 16384 ); /*Q(1+15-15=1) Q1 */ - tmp2 = sub( env_fx2[k], tmp1 ); /*>0 */ - tmp1 = mult( env_fx2[k], 16384 ); /*Q(1+15-15=1) Q1 */ - tmp3 = sub( tmp1, last_env_fx[k] ); /*<0 */ - L_tmp = L_add( (Word32) env_fx2[k], (Word32) env_fx2[sub( k, 1 )] ); /*Q1 */ - L_tmp1 = L_add( (Word32) last_env_fx[k], (Word32) last_env_fx[sub( k, 1 )] ); /*Q1 */ - L_tmp2 = Mult_32_16( L_tmp1, 16384 ); /*Q(1+15-15) Q1 */ - L_tmp2 = L_sub( L_tmp, L_tmp2 ); /*>0 */ - L_tmp3 = Mult_32_16( L_tmp, 16384 ); /*Q(1+15-15) Q1 */ - L_tmp3 = L_sub( L_tmp3, L_tmp1 ); /*<0 */ + tmp1 = mult( last_env_fx[k], 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15=1) Q1 */ + tmp2 = sub( env_fx2[k], tmp1 ); /*Q1 */ + tmp1 = mult( env_fx2[k], 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15=1) Q1 */ + tmp3 = sub( tmp1, last_env_fx[k] ); /*Q1 */ + L_tmp = L_add( (Word32) env_fx2[k], (Word32) env_fx2[k - 1] ); /*Q1 */ + L_tmp1 = L_add( (Word32) last_env_fx[k], (Word32) last_env_fx[k - 1] ); /*Q1 */ + L_tmp2 = Mult_32_16( L_tmp1, 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15) Q1 */ + L_tmp2 = L_sub( L_tmp, L_tmp2 ); /*Q1 */ + L_tmp3 = Mult_32_16( L_tmp, 16384 /* 0.5 in Q15 */ ); /*Q(1+15-15) Q1 */ + L_tmp3 = L_sub( L_tmp3, L_tmp1 ); /*Q1 */ test(); test(); @@ -571,16 +572,16 @@ void hq2_noise_inject_fx( { IF( GT_32( ni_gain_fx[k], last_ni_gain_fx[k] ) ) { - L_tmp = Mult_32_16( ni_gain_fx[k], 6554 ); /*Q(17+15-15 = 17) */ - L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 26214 ); /*Q17 */ - ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); + L_tmp = Mult_32_16( ni_gain_fx[k], 6554 /* 0.2 in Q15 */ ); /*Q(17+15-15 = 17) */ + L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 26214 /* 0.8 in Q15 */ ); /*Q17 */ + ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); /* Q17 */ move32(); } ELSE { - L_tmp = Mult_32_16( ni_gain_fx[k], 19661 ); /*Q(17+15-15 = 17) */ - L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 13107 ); /*Q17 */ - ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); + L_tmp = Mult_32_16( ni_gain_fx[k], 19661 /* 0.6 in Q15 */ ); /*Q(17+15-15 = 17) */ + L_tmp1 = Mult_32_16( last_ni_gain_fx[k], 13107 /* 0.4 in Q15 */ ); /*Q17 */ + ni_gain_fx[k] = L_add( L_tmp, L_tmp1 ); /* Q17 */ move32(); } } @@ -596,7 +597,7 @@ void hq2_noise_inject_fx( { IF( L_y2[i] != 0 ) { - L_y2[i] = Mult_32_16( L_y2[i], 26215 ); + L_y2[i] = Mult_32_16( L_y2[i], 26215 /* 0.8 in Q15 */ ); move32(); /*Q(12+15-15=12) */ } } @@ -614,8 +615,8 @@ void hq2_noise_inject_fx( tmp = extract_h( L_shl( ni_gain_fx[k], Q_speech ) ); /*Q(Q_speech+1) */ IF( tmp != 0 ) { - tmp = div_s( 16384, tmp ); /*Q(15+14-Q_speech-1 = 28-Q_speech) */ - L_tmp = Mult_32_16( Ep_fx[k], tmp ); /*Q(Q_Ep_fx[k]+28-Q_speech-15 = Q_Ep_fx[k]+13-Q_speech) */ + tmp = div_s( 16384 /* 0.5 in Q15 */, tmp ); /*Q(15+14-Q_speech-1 = 28-Q_speech) */ + L_tmp = Mult_32_16( Ep_fx[k], tmp ); /*Q(Q_Ep_fx[k]+28-Q_speech-15 = Q_Ep_fx[k]+13-Q_speech) */ tmp = sub( Q_Ep_fx[k], Q_speech ); tmp = sub( 15, tmp ); #ifdef BASOP_NOGLOB @@ -635,7 +636,7 @@ void hq2_noise_inject_fx( tmp = extract_h( L_shl( L_tmp, tmp ) ); /*Q12 */ #endif } - fac_fx = s_max( tmp, 4096 ); /*Q12 */ + fac_fx = s_max( tmp, 4096 /* 1 in Q12 */ ); /*Q12 */ FOR( i = band_start[k]; i <= band_end[k]; i++ ) { @@ -650,7 +651,7 @@ void hq2_noise_inject_fx( #else tmp = shl( band_width[k], Q_speech ); /*Q(Q_speech) */ #endif - tmp = div_s( 16384, tmp ); /*Q(15+14-Q_speech) */ + tmp = div_s( 16384 /* 0.5 in Q15 */, tmp ); /*Q(15+14-Q_speech) */ } ELSE { @@ -659,9 +660,9 @@ void hq2_noise_inject_fx( move16(); move16(); } - tmp1 = sub( fac_fx, 4096 ); /*Q12 */ - L_tmp = L_mult( tmp1, j ); /*Q13 */ - L_tmp = Mult_32_16( L_tmp, tmp ); /*Q(13+29-Q_speech-15 = 27-Q_speech) */ + tmp1 = sub( fac_fx, 4096 /* 1 in Q12 */ ); /*Q12 */ + L_tmp = L_mult( tmp1, j ); /*Q13 */ + L_tmp = Mult_32_16( L_tmp, tmp ); /*Q(13+29-Q_speech-15 = 27-Q_speech) */ #ifdef BASOP_NOGLOB tmp = extract_h( L_shl_o( L_tmp, add( 1, Q_speech ), &Overflow ) ); /*Q12 */ #else @@ -691,7 +692,7 @@ void hq2_noise_inject_fx( } Copy( env_fx2, last_env_fx, ni_end_band ); - Copy32( ni_gain_fx, last_ni_gain_fx, ni_end_band ); + Copy32( ni_gain_fx, last_ni_gain_fx, ni_end_band ); /* Q17 */ *last_max_pos_pulse = max_pos_pulse; move16(); return; diff --git a/lib_com/hq_bit_allocation_fx.c b/lib_com/hq_bit_allocation_fx.c index e03fec40b2e92db9b94c0bafb683f70090ad4ed4..c3fc6a3a59ca8ff21dd5fedbf9c52095ffb6463f 100644 --- a/lib_com/hq_bit_allocation_fx.c +++ b/lib_com/hq_bit_allocation_fx.c @@ -22,7 +22,7 @@ void ivas_hq_bit_allocation_fx( const Word16 *normqlg2, /* i : Quantized norms Q0 */ const Word16 nb_sfm, /* i : Number sub bands to be encoded Q0 */ const Word16 *sfmsize, /* i : Sub band bandwidths Q0 */ - Word16 *noise_level, /* o : HVQ noise level */ + Word16 *noise_level, /* o : HVQ noise level Q15 */ Word16 *R, /* o : Bit allocation per sub band Q0 */ Word16 *Rsubband, /* o : Fractional bit allocation Q3 */ Word16 *sum, /* o : Sum of allocated shape bits Q0 */ @@ -56,7 +56,7 @@ void ivas_hq_bit_allocation_fx( IF( NE_16( hqswb_clas, HQ_TRANSIENT ) && NE_16( hqswb_clas, HQ_HVQ ) && !( EQ_16( length, L_FRAME16k ) && LE_32( core_brate, HQ_32k ) ) ) { /* 'nf_idx' 2-bits index written later */ - *num_bits = sub( *num_bits, 2 ); + *num_bits = sub( *num_bits, 2 ); /*Q0*/ move16(); } @@ -65,17 +65,17 @@ void ivas_hq_bit_allocation_fx( { IF( GE_32( core_brate, HQ_32k ) ) { - *num_bits = sub( *num_bits, HQ_GENERIC_SWB_NBITS2 ); + *num_bits = sub( *num_bits, HQ_GENERIC_SWB_NBITS2 ); /*Q0*/ } ELSE { - *num_bits = sub( *num_bits, HQ_GENERIC_SWB_NBITS ); + *num_bits = sub( *num_bits, HQ_GENERIC_SWB_NBITS ); /*Q0*/ } move16(); IF( EQ_16( length, L_SPEC48k ) ) { - *num_bits = sub( *num_bits, HQ_GENERIC_FB_NBITS ); + *num_bits = sub( *num_bits, HQ_GENERIC_FB_NBITS ); /*Q0*/ move16(); } } @@ -235,7 +235,7 @@ void hq_bit_allocation_fx( const Word16 *normqlg2, /* i : Quantized norms Q0 */ const Word16 nb_sfm, /* i : Number sub bands to be encoded Q0 */ const Word16 *sfmsize, /* i : Sub band bandwidths Q0 */ - Word16 *noise_level, /* o : HVQ noise level */ + Word16 *noise_level, /* o : HVQ noise level Q15 */ Word16 *R, /* o : Bit allocation per sub band Q0 */ Word16 *Rsubband, /* o : Fractional bit allocation Q3 */ Word16 *sum, /* o : Sum of allocated shape bits Q0 */ @@ -293,6 +293,8 @@ void hq_bit_allocation_fx( } } + test(); + test(); IF( ( EQ_16( length, L_FRAME48k ) ) && ( NE_16( hqswb_clas, HQ_HARMONIC ) ) && ( NE_16( hqswb_clas, HQ_HVQ ) ) ) { tmp = 0; diff --git a/lib_com/hq_conf.c b/lib_com/hq_conf.c index 6c2b60c998f41b12934c40654fee1726b5231180..e99e89ba7d6224a79a5231e9be61434995c4cfa0 100644 --- a/lib_com/hq_conf.c +++ b/lib_com/hq_conf.c @@ -287,14 +287,10 @@ void hq_configure_fx( { *num_sfm = NB_SFM; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ - test(); IF( GE_32( core_brate, HQ_32k ) ) { *hq_generic_offset = HQ_GENERIC_FOFFSET_32K; @@ -323,12 +319,9 @@ void hq_configure_fx( *num_env_bands = SFM_N_HARM_FB; move16(); - p_sfmsize = band_len_harm; - move16(); - p_sfm_start = band_start_harm; - move16(); - p_sfm_end = band_end_harm; - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) ) { @@ -354,28 +347,22 @@ void hq_configure_fx( *start_norm = HVQ_THRES_SFM_32k; move16(); } - p_sfmsize = band_len_harm; - p_sfm_start = band_start_harm; - p_sfm_end = band_end_harm; - move16(); - move16(); - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE { *num_sfm = NB_SFM; move16(); - *nb_sfm = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ move16(); *num_env_bands = NB_SFM; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ } } } @@ -390,12 +377,9 @@ void hq_configure_fx( *num_env_bands = SFM_N_HARM; move16(); - p_sfmsize = band_len_harm; - move16(); - p_sfm_start = band_start_harm; - move16(); - p_sfm_end = band_end_harm; - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) ) { @@ -405,7 +389,7 @@ void hq_configure_fx( move16(); *nb_sfm = HVQ_THRES_SFM_24k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_24k; @@ -417,29 +401,23 @@ void hq_configure_fx( move16(); *nb_sfm = HVQ_THRES_SFM_32k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_32k; move16(); } p_sfmsize = band_len_harm; - move16(); p_sfm_start = band_start_harm; - move16(); p_sfm_end = band_end_harm; - move16(); } ELSE IF( EQ_16( hqswb_clas, HQ_GEN_SWB ) ) { *num_sfm = SFM_N_SWB; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ IF( GE_32( core_brate, HQ_32k ) ) { @@ -469,70 +447,58 @@ void hq_configure_fx( *num_env_bands = SFM_N_SWB; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ } } ELSE IF( EQ_16( length, L_SPEC48k_EXT ) ) { bw_ext = 1; - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ *num_sfm = NB_SFM; - move16(); - move16(); - move16(); - move16(); } ELSE IF( EQ_16( length, L_SPEC16k_EXT ) ) { bw_ext = 1; - p_sfmsize = band_len_wb; - p_sfm_start = band_start_wb; - p_sfm_end = band_end_wb; - *num_sfm = SFM_N_WB; - move16(); - move16(); move16(); + p_sfmsize = band_len_wb; /* Q0 */ + p_sfm_start = band_start_wb; /* Q0 */ + p_sfm_end = band_end_wb; /* Q0 */ + *num_sfm = SFM_N_WB; move16(); } ELSE { *num_sfm = SFM_N_WB; move16(); - *nb_sfm = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ move16(); *num_env_bands = SFM_N_WB; move16(); - p_sfmsize = band_len_wb; - move16(); - p_sfm_start = band_start_wb; - move16(); - p_sfm_end = band_end_wb; - move16(); + p_sfmsize = band_len_wb; /* Q0 */ + p_sfm_start = band_start_wb; /* Q0 */ + p_sfm_end = band_end_wb; /* Q0 */ } IF( bw_ext ) { FOR( i = 0; i < *num_sfm; i++ ) { /*sfmsize[i] = (int16_t)(1.25f * p_sfmsize[i]);*/ - sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 ); + sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */ move16(); /*sfm_start[i] = (int16_t)(1.25f * p_sfm_start[i]);*/ - sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 ); + sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */ move16(); /*sfm_end[i] = (int16_t)(1.25f * p_sfm_end[i]);*/ - sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 ); + sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */ move16(); } - *nb_sfm = *num_sfm; - *num_env_bands = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ + *num_env_bands = *num_sfm; /* Q0 */ move16(); move16(); } diff --git a/lib_com/hq_conf_fx.c b/lib_com/hq_conf_fx.c index 7dd8a23713f471549f35462272acb36cbc24b735..ae3fc58b0b1646faeb2857c5417aa3d15f228e8f 100644 --- a/lib_com/hq_conf_fx.c +++ b/lib_com/hq_conf_fx.c @@ -50,14 +50,10 @@ void ivas_hq_configure_fx( { *num_sfm = NB_SFM; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ - test(); IF( GE_32( core_brate, HQ_32k ) ) { *hq_generic_offset = HQ_GENERIC_FOFFSET_32K; @@ -86,12 +82,9 @@ void ivas_hq_configure_fx( *num_env_bands = SFM_N_HARM_FB; move16(); - p_sfmsize = band_len_harm; - move16(); - p_sfm_start = band_start_harm; - move16(); - p_sfm_end = band_end_harm; - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) ) { @@ -101,7 +94,7 @@ void ivas_hq_configure_fx( move16(); *nb_sfm = HVQ_THRES_SFM_24k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_24k; move16(); @@ -112,33 +105,27 @@ void ivas_hq_configure_fx( move16(); *nb_sfm = HVQ_THRES_SFM_32k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_32k; move16(); } - p_sfmsize = band_len_harm; - p_sfm_start = band_start_harm; - p_sfm_end = band_end_harm; - move16(); - move16(); - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE { *num_sfm = NB_SFM; move16(); - *nb_sfm = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ move16(); *num_env_bands = NB_SFM; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ } } } @@ -153,12 +140,9 @@ void ivas_hq_configure_fx( *num_env_bands = SFM_N_HARM; move16(); - p_sfmsize = band_len_harm; - move16(); - p_sfm_start = band_start_harm; - move16(); - p_sfm_end = band_end_harm; - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) ) { @@ -168,7 +152,7 @@ void ivas_hq_configure_fx( move16(); *nb_sfm = HVQ_THRES_SFM_24k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_24k; @@ -180,29 +164,23 @@ void ivas_hq_configure_fx( move16(); *nb_sfm = HVQ_THRES_SFM_32k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_32k; move16(); } p_sfmsize = band_len_harm; - move16(); p_sfm_start = band_start_harm; - move16(); p_sfm_end = band_end_harm; - move16(); } ELSE IF( EQ_16( hqswb_clas, HQ_GEN_SWB ) ) { *num_sfm = SFM_N_SWB; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ IF( GE_32( core_brate, HQ_32k ) ) { @@ -227,75 +205,65 @@ void ivas_hq_configure_fx( /* HQ_NORMAL and HQ_TRANSIENT */ *num_sfm = SFM_N_SWB; move16(); - *nb_sfm = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ move16(); *num_env_bands = SFM_N_SWB; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ } } ELSE IF( EQ_16( length, L_SPEC48k_EXT ) ) { bw_ext = 1; - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; - *num_sfm = NB_SFM; - move16(); - move16(); move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ + *num_sfm = NB_SFM; move16(); } ELSE IF( EQ_16( length, L_SPEC16k_EXT ) ) { bw_ext = 1; - p_sfmsize = band_len_wb; - p_sfm_start = band_start_wb; - p_sfm_end = band_end_wb; - *num_sfm = SFM_N_WB; - move16(); - move16(); move16(); + p_sfmsize = band_len_wb; /* Q0 */ + p_sfm_start = band_start_wb; /* Q0 */ + p_sfm_end = band_end_wb; /* Q0 */ + *num_sfm = SFM_N_WB; move16(); } ELSE { *num_sfm = SFM_N_WB; move16(); - *nb_sfm = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ move16(); *num_env_bands = SFM_N_WB; move16(); - p_sfmsize = band_len_wb; - move16(); - p_sfm_start = band_start_wb; - move16(); - p_sfm_end = band_end_wb; - move16(); + p_sfmsize = band_len_wb; /* Q0 */ + p_sfm_start = band_start_wb; /* Q0 */ + p_sfm_end = band_end_wb; /* Q0 */ } IF( bw_ext ) { FOR( i = 0; i < *num_sfm; i++ ) { /*sfmsize[i] = (int16_t)(1.25f * p_sfmsize[i]);*/ - sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 ); + sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */ move16(); /*sfm_start[i] = (int16_t)(1.25f * p_sfm_start[i]);*/ - sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 ); + sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */ move16(); /*sfm_end[i] = (int16_t)(1.25f * p_sfm_end[i]);*/ - sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 ); + sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 /* 1.25 in Q14 */ ); /* Q0 */ move16(); } - *nb_sfm = *num_sfm; - *num_env_bands = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ + *num_env_bands = *num_sfm; /* Q0 */ move16(); move16(); } @@ -349,14 +317,10 @@ void hq_configure_evs_fx( { *num_sfm = NB_SFM; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ - test(); IF( GE_32( core_brate, HQ_32k ) ) { *hq_generic_offset = HQ_GENERIC_FOFFSET_32K; @@ -371,7 +335,7 @@ void hq_configure_evs_fx( move16(); move16(); } - *nb_sfm = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ move16(); } ELSE @@ -385,12 +349,9 @@ void hq_configure_evs_fx( *num_env_bands = SFM_N_HARM_FB; move16(); - p_sfmsize = band_len_harm; - move16(); - p_sfm_start = band_start_harm; - move16(); - p_sfm_end = band_end_harm; - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) ) { @@ -400,7 +361,7 @@ void hq_configure_evs_fx( move16(); *nb_sfm = HVQ_THRES_SFM_24k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_24k; move16(); @@ -411,33 +372,27 @@ void hq_configure_evs_fx( move16(); *nb_sfm = HVQ_THRES_SFM_32k; move16(); - *num_env_bands = sub( *num_sfm, *nb_sfm ); + *num_env_bands = sub( *num_sfm, *nb_sfm ); /* Q0 */ move16(); *start_norm = HVQ_THRES_SFM_32k; move16(); } - p_sfmsize = band_len_harm; - p_sfm_start = band_start_harm; - p_sfm_end = band_end_harm; - move16(); - move16(); - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE { *num_sfm = NB_SFM; move16(); - *nb_sfm = *num_sfm; + *nb_sfm = *num_sfm; /* Q0 */ move16(); *num_env_bands = NB_SFM; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ } } } @@ -452,12 +407,9 @@ void hq_configure_evs_fx( *num_env_bands = SFM_N_HARM; move16(); - p_sfmsize = band_len_harm; - move16(); - p_sfm_start = band_start_harm; - move16(); - p_sfm_end = band_end_harm; - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE IF( EQ_16( hqswb_clas, HQ_HVQ ) ) { @@ -485,23 +437,17 @@ void hq_configure_evs_fx( *start_norm = HVQ_THRES_SFM_32k; move16(); } - p_sfmsize = band_len_harm; - move16(); - p_sfm_start = band_start_harm; - move16(); - p_sfm_end = band_end_harm; - move16(); + p_sfmsize = band_len_harm; /* Q0 */ + p_sfm_start = band_start_harm; /* Q0 */ + p_sfm_end = band_end_harm; /* Q0 */ } ELSE IF( EQ_16( hqswb_clas, HQ_GEN_SWB ) ) { *num_sfm = SFM_N_SWB; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ IF( GE_32( core_brate, HQ_32k ) ) { @@ -531,36 +477,29 @@ void hq_configure_evs_fx( *num_env_bands = SFM_N_SWB; move16(); - p_sfmsize = band_len_HQ; - move16(); - p_sfm_start = band_start_HQ; - move16(); - p_sfm_end = band_end_HQ; - move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ } } ELSE IF( EQ_16( length, L_SPEC48k_EXT ) ) { bw_ext = 1; - p_sfmsize = band_len_HQ; - p_sfm_start = band_start_HQ; - p_sfm_end = band_end_HQ; - *num_sfm = NB_SFM; - move16(); - move16(); move16(); + p_sfmsize = band_len_HQ; /* Q0 */ + p_sfm_start = band_start_HQ; /* Q0 */ + p_sfm_end = band_end_HQ; /* Q0 */ + *num_sfm = NB_SFM; move16(); } ELSE IF( EQ_16( length, L_SPEC16k_EXT ) ) { bw_ext = 1; - p_sfmsize = band_len_wb; - p_sfm_start = band_start_wb; - p_sfm_end = band_end_wb; - *num_sfm = SFM_N_WB; - move16(); - move16(); move16(); + p_sfmsize = band_len_wb; /* Q0 */ + p_sfm_start = band_start_wb; /* Q0 */ + p_sfm_end = band_end_wb; /* Q0 */ + *num_sfm = SFM_N_WB; move16(); } ELSE @@ -572,25 +511,22 @@ void hq_configure_evs_fx( *num_env_bands = SFM_N_WB; move16(); - p_sfmsize = band_len_wb; - move16(); - p_sfm_start = band_start_wb; - move16(); - p_sfm_end = band_end_wb; - move16(); + p_sfmsize = band_len_wb; /* Q0 */ + p_sfm_start = band_start_wb; /* Q0 */ + p_sfm_end = band_end_wb; /* Q0 */ } IF( bw_ext ) { FOR( i = 0; i < *num_sfm; i++ ) { /*sfmsize[i] = (int16_t)(1.25f * p_sfmsize[i]);*/ - sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 ); + sfmsize[i] = mult_r( shl( p_sfmsize[i], 1 ), 20480 /* 1.25 in Q14 */ ); move16(); /*sfm_start[i] = (int16_t)(1.25f * p_sfm_start[i]);*/ - sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 ); + sfm_start[i] = mult_r( shl( p_sfm_start[i], 1 ), 20480 /* 1.25 in Q14 */ ); move16(); /*sfm_end[i] = (int16_t)(1.25f * p_sfm_end[i]);*/ - sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 ); + sfm_end[i] = mult_r( shl( p_sfm_end[i], 1 ), 20480 /* 1.25 in Q14 */ ); move16(); } *nb_sfm = *num_sfm; diff --git a/lib_com/hvq_pvq_bitalloc_fx.c b/lib_com/hvq_pvq_bitalloc_fx.c index 298547b539529b852761b74ceb8f385cbd9ff945..bc15fe2660fdeea5d42264efee3fcb4e5eb14c1f 100644 --- a/lib_com/hvq_pvq_bitalloc_fx.c +++ b/lib_com/hvq_pvq_bitalloc_fx.c @@ -22,10 +22,10 @@ Word16 hvq_pvq_bitalloc_fx( const Word16 *ynrm, /* i : Envelope coefficients */ const Word32 manE_peak, /* i : Peak energy mantissa */ const Word16 expE_peak, /* i : Peak energy exponent */ - Word16 *Rk, /* o : bit allocation for concatenated vector */ - Word16 *R, /* i/o: Global bit allocation */ - Word16 *sel_bands, /* o : Selected bands for encoding */ - Word16 *n_sel_bands /* o : No. of selected bands for encoding */ + Word16 *Rk, /* Q3 o : bit allocation for concatenated vector */ + Word16 *R, /* Q0 i/o: Global bit allocation */ + Word16 *sel_bands, /* Q0 o : Selected bands for encoding */ + Word16 *n_sel_bands /* Q0 o : No. of selected bands for encoding */ ) { Word16 num_bands, band_max_bits; @@ -52,11 +52,11 @@ Word16 hvq_pvq_bitalloc_fx( IF( LT_32( core_brate, HQ_BWE_CROSSOVER_BRATE ) ) { - band_max_bits = HVQ_BAND_MAX_BITS_24k; + band_max_bits = HVQ_BAND_MAX_BITS_24k; /*Q0*/ move16(); - one_over_band_max_bits = ONE_OVER_HVQ_BAND_MAX_BITS_24k_FX; + one_over_band_max_bits = ONE_OVER_HVQ_BAND_MAX_BITS_24k_FX; /*Q15*/ move16(); - k_start = HVQ_THRES_SFM_24k; + k_start = HVQ_THRES_SFM_24k; /*Q0*/ move16(); IF( EQ_16( bwidth_fx, FB ) ) { @@ -71,11 +71,11 @@ Word16 hvq_pvq_bitalloc_fx( } ELSE { - band_max_bits = HVQ_BAND_MAX_BITS_32k; + band_max_bits = HVQ_BAND_MAX_BITS_32k; /*Q0*/ move16(); - one_over_band_max_bits = ONE_OVER_HVQ_BAND_MAX_BITS_32k_FX; + one_over_band_max_bits = ONE_OVER_HVQ_BAND_MAX_BITS_32k_FX; /*Q15*/ move16(); - k_start = HVQ_THRES_SFM_32k; + k_start = HVQ_THRES_SFM_32k; /*Q0*/ move16(); IF( EQ_16( bwidth_fx, FB ) ) { @@ -164,14 +164,14 @@ Word16 hvq_pvq_bitalloc_fx( { QuantaPerDsDirac_fx( band_len_harm[k_max], 1, hBitsN, &n ); } - m = shl( sub( num_bits, HVQ_PVQ_GAIN_BITS ), 3 ); + m = shl( sub( num_bits, HVQ_PVQ_GAIN_BITS ), 3 ); /*Q3*/ IF( GE_16( m, n ) ) { IF( GT_16( num_bands, 1 ) ) /* condition: num_bands > 1 */ { - sel_bands[*n_sel_bands] = k_max; + sel_bands[*n_sel_bands] = k_max; /*Q0*/ move16(); - *n_sel_bands = add( *n_sel_bands, 1 ); + *n_sel_bands = add( *n_sel_bands, 1 ); /*Q0*/ move16(); R[k_max] = 1; /* Mark that the band has been encoded for fill_spectrum */ move16(); @@ -184,11 +184,11 @@ Word16 hvq_pvq_bitalloc_fx( tmp = sub( num_bands, 1 ); FOR( k = 0; k < tmp; k++ ) { - Rk[k] = shl( sub( band_max_bits, HVQ_PVQ_GAIN_BITS ), 3 ); + Rk[k] = shl( sub( band_max_bits, HVQ_PVQ_GAIN_BITS ), 3 ); /*Q3*/ move16(); } /* NB: When it exits the above loop, k = num_bands - 1. */ - Rk[k] = shl( sub( num_bits, HVQ_PVQ_GAIN_BITS ), 3 ); + Rk[k] = shl( sub( num_bits, HVQ_PVQ_GAIN_BITS ), 3 ); /*Q3*/ move16(); return num_bands; diff --git a/lib_com/interleave_spectrum.c b/lib_com/interleave_spectrum.c index 65b42e57543d9d9e1618a2fae3f5054dd235e941..1cf7d5ce6d0d89e82bf2c817cd5095d29eda66bb 100644 --- a/lib_com/interleave_spectrum.c +++ b/lib_com/interleave_spectrum.c @@ -142,8 +142,11 @@ void interleave_spectrum_fx( const Word16 *bw; const Word16 *cnt; + move16(); + move16(); + move16(); /* Common inits */ - p1 = coefs; + p1 = coefs; /*Q12*/ p_out = coefs_out; #ifdef SOLVED_COMP_ENC_DEC IF( EQ_16( length, L_SPEC48k ) ) @@ -151,8 +154,8 @@ void interleave_spectrum_fx( IF( EQ_16( length, L_FRAME48k ) ) #endif { - bw = intl_bw_48; - cnt = intl_cnt_48; + bw = intl_bw_48; /*Q0*/ + cnt = intl_cnt_48; /*Q0*/ grps = N_INTL_GRP_48; move16(); p2 = p1 + sublen[0]; @@ -161,8 +164,8 @@ void interleave_spectrum_fx( } ELSE IF( EQ_16( length, L_SPEC32k ) ) { - bw = intl_bw_32; - cnt = intl_cnt_32; + bw = intl_bw_32; /*Q0*/ + cnt = intl_cnt_32; /*Q0*/ grps = N_INTL_GRP_32; move16(); p2 = p1 + sublen[1]; @@ -171,8 +174,8 @@ void interleave_spectrum_fx( } ELSE /* length == L_SPEC16k */ { - bw = intl_bw_16; - cnt = intl_cnt_16; + bw = intl_bw_16; /*Q0*/ + cnt = intl_cnt_16; /*Q0*/ grps = N_INTL_GRP_16; move16(); p2 = p1 + sublen[2]; @@ -186,22 +189,22 @@ void interleave_spectrum_fx( { FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p1++; + *p_out++ = *p1++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p2++; + *p_out++ = *p2++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p3++; + *p_out++ = *p3++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p4++; + *p_out++ = *p4++; /*Q12*/ move32(); } } @@ -231,13 +234,13 @@ void interleave_spectrum_ivas_fx( const Word16 *cnt; /* Common inits */ - p1 = coefs; + p1 = coefs; /*Q12*/ p_out = coefs_out; IF( EQ_16( length, L_SPEC48k ) ) { - bw = intl_bw_48; - cnt = intl_cnt_48; + bw = intl_bw_48; /*Q0*/ + cnt = intl_cnt_48; /*Q0*/ grps = N_INTL_GRP_48; move16(); p2 = p1 + sublen[0]; @@ -246,8 +249,8 @@ void interleave_spectrum_ivas_fx( } ELSE IF( EQ_16( length, L_SPEC32k ) ) { - bw = intl_bw_32; - cnt = intl_cnt_32; + bw = intl_bw_32; /*Q0*/ + cnt = intl_cnt_32; /*Q0*/ grps = N_INTL_GRP_32; move16(); p2 = p1 + sublen[1]; @@ -256,8 +259,8 @@ void interleave_spectrum_ivas_fx( } ELSE /* length == L_SPEC16k */ { - bw = intl_bw_16; - cnt = intl_cnt_16; + bw = intl_bw_16; /*Q0*/ + cnt = intl_cnt_16; /*Q0*/ grps = N_INTL_GRP_16; move16(); p2 = p1 + sublen[2]; @@ -271,22 +274,22 @@ void interleave_spectrum_ivas_fx( { FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p1++; + *p_out++ = *p1++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p2++; + *p_out++ = *p2++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p3++; + *p_out++ = *p3++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p_out++ = *p4++; + *p_out++ = *p4++; /*Q12*/ move32(); } } @@ -389,6 +392,12 @@ void ivas_de_interleave_spectrum_fx( Word32 *p_in; Word32 coefs_out[L_FRAME48k]; Word16 sublen[] = { 80, 160, 240, 320, 480, 720 }; + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); Word16 grps; Word16 l_frame; const Word16 *bw; @@ -400,8 +409,8 @@ void ivas_de_interleave_spectrum_fx( move16(); IF( EQ_16( length, L_SPEC48k ) ) { - bw = intl_bw_48; - cnt = intl_cnt_48; + bw = intl_bw_48; /*Q0*/ + cnt = intl_cnt_48; /*Q0*/ grps = N_INTL_GRP_48; move16(); l_frame = L_FRAME48k; @@ -412,8 +421,8 @@ void ivas_de_interleave_spectrum_fx( } ELSE IF( EQ_16( length, L_FRAME32k ) ) { - bw = intl_bw_32; - cnt = intl_cnt_32; + bw = intl_bw_32; /*Q0*/ + cnt = intl_cnt_32; /*Q0*/ grps = N_INTL_GRP_32; move16(); @@ -423,8 +432,8 @@ void ivas_de_interleave_spectrum_fx( } ELSE /* length == L_SPEC16k */ { - bw = intl_bw_16; - cnt = intl_cnt_16; + bw = intl_bw_16; /*Q0*/ + cnt = intl_cnt_16; /*Q0*/ grps = N_INTL_GRP_16; move16(); @@ -434,7 +443,7 @@ void ivas_de_interleave_spectrum_fx( } set32_fx( coefs_out, 0, L_FRAME48k ); - p_in = coefs; + p_in = coefs; /*Q12*/ FOR( i = 0; i < grps; i++ ) { @@ -442,22 +451,22 @@ void ivas_de_interleave_spectrum_fx( { FOR( k = 0; k < bw[i]; k++ ) { - *p1++ = *p_in++; + *p1++ = *p_in++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p2++ = *p_in++; + *p2++ = *p_in++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p3++ = *p_in++; + *p3++ = *p_in++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p4++ = *p_in++; + *p4++ = *p_in++; /*Q12*/ move32(); } } @@ -478,6 +487,12 @@ void de_interleave_spectrum_fx( Word32 *p_in; Word32 coefs_out[L_FRAME48k]; Word16 sublen[] = { 80, 160, 240, 320, 480, 720 }; + move16(); + move16(); + move16(); + move16(); + move16(); + move16(); Word16 grps; Word16 l_frame; const Word16 *bw; @@ -493,8 +508,8 @@ void de_interleave_spectrum_fx( IF( EQ_16( length, L_FRAME48k ) ) #endif { - bw = intl_bw_48; - cnt = intl_cnt_48; + bw = intl_bw_48; /*Q0*/ + cnt = intl_cnt_48; /*Q0*/ grps = N_INTL_GRP_48; move16(); #ifdef SOLVED_COMP_ENC_DEC @@ -507,8 +522,8 @@ void de_interleave_spectrum_fx( } ELSE IF( EQ_16( length, L_SPEC32k ) ) { - bw = intl_bw_32; - cnt = intl_cnt_32; + bw = intl_bw_32; /*Q0*/ + cnt = intl_cnt_32; /*Q0*/ grps = N_INTL_GRP_32; move16(); @@ -518,8 +533,8 @@ void de_interleave_spectrum_fx( } ELSE /* length == L_SPEC16k */ { - bw = intl_bw_16; - cnt = intl_cnt_16; + bw = intl_bw_16; /*Q0*/ + cnt = intl_cnt_16; /*Q0*/ grps = N_INTL_GRP_16; move16(); @@ -529,7 +544,7 @@ void de_interleave_spectrum_fx( } set32_fx( coefs_out, 0, L_FRAME48k ); - p_in = coefs; + p_in = coefs; /*Q12*/ FOR( i = 0; i < grps; i++ ) { @@ -537,22 +552,22 @@ void de_interleave_spectrum_fx( { FOR( k = 0; k < bw[i]; k++ ) { - *p1++ = *p_in++; + *p1++ = *p_in++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p2++ = *p_in++; + *p2++ = *p_in++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p3++ = *p_in++; + *p3++ = *p_in++; /*Q12*/ move32(); } FOR( k = 0; k < bw[i]; k++ ) { - *p4++ = *p_in++; + *p4++ = *p_in++; /*Q12*/ move32(); } } diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index 7c0458fa2b03309a402496267a0b41ddfc92e3e6..348fc2ebe15bc27471f411aba0baf900189eb8af 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -1654,7 +1654,7 @@ void ivas_hq_bit_allocation_fx( const Word16 *normqlg2, /* i : Quantized norms Q0 */ const Word16 nb_sfm, /* i : Number sub bands to be encoded Q0 */ const Word16 *sfmsize, /* i : Sub band bandwidths Q0 */ - Word16 *noise_level, /* o : HVQ noise level */ + Word16 *noise_level, /* o : HVQ noise level Q15 */ Word16 *R, /* o : Bit allocation per sub band Q0 */ Word16 *Rsubband, /* o : Fractional bit allocation Q3 */ Word16 *sum, /* o : Sum of allocated shape bits Q0 */ diff --git a/lib_com/prot.h b/lib_com/prot.h index d15bb767d443973c12a4ee00e5226134b10b5476..803a0a757633704fc8e72e3ddff3750b5fa5f70e 100644 --- a/lib_com/prot.h +++ b/lib_com/prot.h @@ -827,6 +827,7 @@ int16_t lsp_convert_poly( const int16_t Opt_AMRWB /* i : flag for the AMR-WB IO mode */ ); /*! r: pulse position */ +#ifndef IVAS_FLOAT_FIXED int16_t findpulse( const int16_t L_frame, /* i : length of the frame */ const float res[], /* i : residual signal */ @@ -834,6 +835,7 @@ int16_t findpulse( const int16_t enc_dec, /* i : flag enc/dec, 0 - enc, 1 - dec */ int16_t *sign /* i/o: sign of the maximum */ ); +#endif void fft_rel( float x[], /* i/o: input/output vector */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 3239613af43d19cdbcf2674002d70f588d4d8764..07e2aa7796e27da94625c84c14abcfbc8a707b5a 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -2128,28 +2128,29 @@ hq2_noise_inject.c fix part /========================================================================================================*/ void hq2_noise_inject_fx( - Word32 L_y2[], - const Word16 band_start[], - const Word16 band_end[], - const Word16 band_width[], - Word32 Ep_fx[], - Word32 Rk_fx[], - const Word16 npulses[], - Word16 ni_seed, - const Word16 bands, - const Word16 ni_start_band, - const Word16 bw_low, - const Word16 bw_high, - const Word32 enerL_fx, - const Word32 enerH_fx, - Word32 last_ni_gain_fx[], - Word16 last_env_fx[], - Word16 *last_max_pos_pulse, - Word16 *p2a_flags, - Word16 p2a_bands, - const Word16 hqswb_clas, - const Word16 bwidth, - const Word32 bwe_br ); + Word32 L_y2[], /* Q12 */ + const Word16 band_start[], /* Q0 */ + const Word16 band_end[], /* Q0 */ + const Word16 band_width[], /* Q0 */ + Word32 Ep_fx[], /* Q-6 */ + Word32 Rk_fx[], /* QRk (Q16) */ + const Word16 npulses[], /* Q0 */ + Word16 ni_seed, /* Q0 */ + const Word16 bands, /* Q0 */ + const Word16 ni_start_band, /* Q0 */ + const Word16 bw_low, /* Q0 */ + const Word16 bw_high, /* Q0 */ + const Word32 enerL_fx, /* Q0 */ + const Word32 enerH_fx, /* Q0 */ + Word32 last_ni_gain_fx[], /* Q17 */ + Word16 last_env_fx[], /* Q1 */ + Word16 *last_max_pos_pulse, /* Q0 */ + Word16 *p2a_flags, /* Q0 */ + Word16 p2a_bands, /* Q0 */ + const Word16 hqswb_clas, /* Q0 */ + const Word16 bwidth, /* Q0 */ + const Word32 bwe_br /* Q0 */ +); /*========================================================================================================/ hq2_bit_alloc_fx.c @@ -2262,25 +2263,26 @@ void mdct_spectrum_denorm_ivas_fx( ); void hq2_core_configure_fx( - const Word16 frame_length, - const Word16 num_bits, - const Word16 is_transient, - Word16 *bands, - Word16 *length, - Word16 band_width[], - Word16 band_start[], - Word16 band_end[], - Word32 *L_qint, - Word16 *eref, - Word16 *bit_alloc_weight, - Word16 *gqlevs, - Word16 *Ngq, - Word16 *p2a_bands, - Word16 *p2a_th, - Word16 *pd_thresh, - Word16 *ld_slope, - Word16 *ni_coef, - Word32 L_bwe_br ); + const Word16 frame_length, /* Q0 */ + const Word16 num_bits, /* Q0 */ + const Word16 is_transient, /* Q0 */ + Word16 *bands, /* Q0 */ + Word16 *length, /* Q0 */ + Word16 band_width[], /* Q0 */ + Word16 band_start[], /* Q0 */ + Word16 band_end[], /* Q0 */ + Word32 *L_qint, /* Q13 */ + Word16 *eref, /* Q10 */ + Word16 *bit_alloc_weight, /* Q13 */ + Word16 *gqlevs, /* Q0 */ + Word16 *Ngq, /* Q0 */ + Word16 *p2a_bands, /* Q0 */ + Word16 *p2a_th, /* Q11 */ + Word16 *pd_thresh, /* Q15 */ + Word16 *ld_slope, /* Q15 */ + Word16 *ni_coef, /* Q14 */ + Word32 L_bwe_br /* Q0 */ +); void reverse_transient_frame_energies_fx( Word32 L_band_energy[], /* o : Q14 : band energies */ @@ -2288,55 +2290,56 @@ void reverse_transient_frame_energies_fx( ); void spt_shorten_domain_pre_fx( - const Word16 band_start[], /* i: Starting position of sub band */ - const Word16 band_end[], /* i: End position of sub band */ - const Word16 prev_SWB_peak_pos[], /* i: Spectral peak */ - const Word16 BANDS, /* i: total number of bands */ - const Word32 L_bwe_br, /* i: bitrate information */ - Word16 new_band_start[], /* o: Starting position of new shorten sub band */ - Word16 new_band_end[], /* o: End position of new shorten sub band */ - Word16 new_band_width[] /* o: new sub band bandwidth */ + const Word16 band_start[], /* i: Starting position of sub band Q0*/ + const Word16 band_end[], /* i: End position of sub band Q0*/ + const Word16 prev_SWB_peak_pos[], /* i: Spectral peak Q0*/ + const Word16 BANDS, /* i: total number of bands Q0*/ + const Word32 L_bwe_br, /* i: bitrate information Q0*/ + Word16 new_band_start[], /* o: Starting position of new shorten sub band Q0*/ + Word16 new_band_end[], /* o: End position of new shorten sub band Q0*/ + Word16 new_band_width[] /* o: new sub band bandwidth Q0*/ ); void spt_shorten_domain_band_save_fx( - const Word16 bands, /* i: total subband */ - const Word16 band_start[], /* i: starting position of subband */ - const Word16 band_end[], /* i: end position of subband */ - const Word16 band_width[], /* i: band width of subband */ - Word16 org_band_start[], /* o: starting position of subband */ - Word16 org_band_end[], /* o: end position of subband */ - Word16 org_band_width[] /* o: band width of subband */ + const Word16 bands, /* i: total subband Q0*/ + const Word16 band_start[], /* i: starting position of subband Q0*/ + const Word16 band_end[], /* i: end position of subband Q0*/ + const Word16 band_width[], /* i: band width of subband Q0*/ + Word16 org_band_start[], /* o: starting position of subband Q0*/ + Word16 org_band_end[], /* o: end position of subband Q0*/ + Word16 org_band_width[] /* o: band width of subband Q0*/ ); void spt_shorten_domain_band_restore_fx( - const Word16 bands, /* i: total subband */ - Word16 band_start[], /* i/o: starting position of subband */ - Word16 band_end[], /* i/o: end position of subband */ - Word16 band_width[], /* i/o: band width of subband */ - const Word16 org_band_start[], /* o: starting position of subband */ - const Word16 org_band_end[], /* o: end position of subband */ - const Word16 org_band_width[] /* o: band width of subband */ + const Word16 bands, /* i: total subband Q0*/ + Word16 band_start[], /* i/o: starting position of subband Q0*/ + Word16 band_end[], /* i/o: end position of subband Q0*/ + Word16 band_width[], /* i/o: band width of subband Q0*/ + const Word16 org_band_start[], /* o: starting position of subband Q0*/ + const Word16 org_band_end[], /* o: end position of subband Q0*/ + const Word16 org_band_width[] /* o: band width of subband Q0*/ ); void spt_swb_peakpos_tmp_save_fx( - const Word32 L_y2[], /* i: coded spectral information */ - const Word16 bands, /* i: total number of bands */ - const Word16 band_start[], /* i: starting position of subband */ - const Word16 band_end[], /* i: end position of subband */ - Word16 prev_SWB_peak_pos_tmp[] /* o: spectral peaks */ + const Word32 L_y2[], /* i: coded spectral information Qx*/ + const Word16 bands, /* i: total number of bands Q0*/ + const Word16 band_start[], /* i: starting position of subband Q0*/ + const Word16 band_end[], /* i: end position of subband Q0*/ + Word16 prev_SWB_peak_pos_tmp[] /* o: spectral peaks Q0*/ ); void bit_allocation_second_fx( - Word32 *Rk, - Word32 *Rk_sort, - Word16 BANDS, - const Word16 *band_width, - Word16 *k_sort, - Word16 *k_num, - const Word16 *p2a_flags, - const Word16 p2a_bands, - const Word16 *last_bitalloc, - const Word16 input_frame ); + Word32 *Rk, /* Q16 */ + Word32 *Rk_sort, /* Q16 */ + Word16 BANDS, /* Q0 */ + const Word16 *band_width, /* Q0 */ + Word16 *k_sort, /* Q0 */ + Word16 *k_num, /* Q0 */ + const Word16 *p2a_flags, /* Q0 */ + const Word16 p2a_bands, /* Q0 */ + const Word16 *last_bitalloc, /* Q0 */ + const Word16 input_frame /* Q0 */ +); // synth_filt_fix.c Word32 syn_kern_16( @@ -5372,19 +5375,19 @@ void fill_spectrum_fx( // hq_bit_allocation_fx.c" void hq_bit_allocation_fx( - const Word32 core_brate, /* i : Core bit-rate */ - const Word16 length, /* i : Frame length */ - const Word16 hqswb_clas, /* i : HQ class */ - Word16 *num_bits, /* i/o: Remaining bit budget */ - const Word16 *normqlg2, /* i : Quantized norms */ - const Word16 nb_sfm, /* i : Number sub bands to be encoded */ - const Word16 *sfmsize, /* i : Sub band bandwidths */ - Word16 *noise_level, /* o : HVQ noise level */ - Word16 *R, /* o : Bit allocation per sub band */ - Word16 *Rsubband, /* o : Fractional bit allocation */ - Word16 *sum, /* o : Sum of allocated shape bits */ - Word16 *core_sfm, /* o : Last coded band in core */ - const Word16 num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE */ + const Word32 core_brate, /* i : Core bit-rate Q0 */ + const Word16 length, /* i : Frame length Q0 */ + const Word16 hqswb_clas, /* i : HQ class Q0 */ + Word16 *num_bits, /* i/o: Remaining bit budget Q0 */ + const Word16 *normqlg2, /* i : Quantized norms Q0 */ + const Word16 nb_sfm, /* i : Number sub bands to be encoded Q0 */ + const Word16 *sfmsize, /* i : Sub band bandwidths Q0 */ + Word16 *noise_level, /* o : HVQ noise level Q15 */ + Word16 *R, /* o : Bit allocation per sub band Q0 */ + Word16 *Rsubband, /* o : Fractional bit allocation Q3 */ + Word16 *sum, /* o : Sum of allocated shape bits Q0 */ + Word16 *core_sfm, /* o : Last coded band in core Q0 */ + const Word16 num_env_bands /* i : Number sub bands to be encoded for HQ_SWB_BWE Q0 */ ); // weight_fx.c @@ -7800,10 +7803,10 @@ Word16 hvq_pvq_bitalloc_fx( const Word16 *ynrm, /* i : Envelope coefficients */ const Word32 manE_peak, /* i : Peak energy mantissa */ const Word16 expE_peak, /* i : Peak energy exponent */ - Word16 *Rk, /* o : bit allocation for concatenated vector */ - Word16 *R, /* i/o: Global bit allocation */ - Word16 *sel_bands, /* o : Selected bands for encoding */ - Word16 *n_sel_bands /* o : No. of selected bands for encoding */ + Word16 *Rk, /* Q3 o : bit allocation for concatenated vector */ + Word16 *R, /* Q0 i/o: Global bit allocation */ + Word16 *sel_bands, /* Q0 o : Selected bands for encoding */ + Word16 *n_sel_bands /* Q0 o : No. of selected bands for encoding */ ); // hq_conf_fec_fx.c diff --git a/lib_com/rom_com.c b/lib_com/rom_com.c index 9047d8338d8c940c08003b3f33066eda8f061e6c..648280d1e8a51d2402a07f385c3bc252bc160966 100644 --- a/lib_com/rom_com.c +++ b/lib_com/rom_com.c @@ -8328,7 +8328,7 @@ const Word16 mean_isf_noise_amr_wb_fx[M] = { 478, 1100, 2213, 3267, 4219, 5222, 6198, 7240, 8229, 9153,10098, 11108, 12144, 13184,14165, 3803 -}; +};/*14Q1*1.28*/ /* ISF codebook - common 1st stage, 1st split (only in AMR-WB IO mode) */ /*------------------------------------------------------* @@ -17816,7 +17816,7 @@ const Word16 dico5_ns_28b_fx[] = 1109, 918, 1101, 503, 1039, 1286, 1220, 317, 1351, 1207, 1010, 326 -}; +}; /*1.28f Q1*/ const Word16 means_nb_31bits_ma_lsf[16] = { 861 /*336.3281f*1.28f Q1*/, 1360 /*531.2500f*1.28f Q1*/, 2270 /*886.7188f*1.28f Q1*/, 3243 /*1266.7969f*1.28f Q1*/, 4171 /*1629.2969f*1.28f Q1*/, 5052 /*1973.4375f*1.28f Q1*/, 6012 /*2348.4375f*1.28f Q1*/, 6776 /*2646.8750f*1.28f Q1*/, 7676 /*2998.4375f*1.28f Q1*/, 8428 /*3292.1875f*1.28f Q1*/, 9194 /*3591.4062f*1.28f Q1*/, 9744 /*3806.2500f*1.28f Q1*/, 10580 /*4132.8125f*1.28f Q1*/, 11911 /*4652.7344f*1.28f Q1*/, 13440 /*5250.0000f*1.28f Q1*/, 15061 /*5883.2031f*1.28f Q1*/ }; const Word16 means_wb_31bits_ma_lsf[16] = { 818 /*319.5312f*1.28f Q1*/, 1403 /*548.0469f*1.28f Q1*/, 2392 /*934.3750f*1.28f Q1*/, 3465 /*1353.5156f*1.28f Q1*/, 4429 /*1730.0781f*1.28f Q1*/, 5428 /*2120.3125f*1.28f Q1*/, 6414 /*2505.4688f*1.28f Q1*/, 7323 /*2860.5469f*1.28f Q1*/, 8304 /*3243.7500f*1.28f Q1*/, 9221 /*3601.9531f*1.28f Q1*/, 10162 /*3969.5312f*1.28f Q1*/, 11091 /*4332.4219f*1.28f Q1*/, 12125 /*4736.3281f*1.28f Q1*/, 13153 /*5137.8906f*1.28f Q1*/, 14241 /*5562.8906f*1.28f Q1*/, 15266 /*5963.2812f*1.28f Q1*/ }; @@ -28071,7 +28071,7 @@ const int16_t intl_cnt_16[N_INTL_GRP_16] = {4, 1}; const int16_t intl_cnt_32[N_INTL_GRP_32] = {4, 4}; const int16_t intl_cnt_48[N_INTL_GRP_48] = {4, 3, 2}; -const int16_t band_start_HQ[44] = +const Word16 band_start_HQ[44] = { 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 144, 160, 176, 192, 208, 224, 240, @@ -28079,7 +28079,7 @@ const int16_t band_start_HQ[44] = 544, 576, 608, 640, 672, 704, 736, 768 }; -const int16_t band_end_HQ[44] = +const Word16 band_end_HQ[44] = { 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 144, 160, 176, 192, 208, 224, 240, 256, @@ -28087,7 +28087,7 @@ const int16_t band_end_HQ[44] = 576, 608, 640, 672, 704, 736, 768, 800 }; -const int16_t band_len_HQ[44] = +const Word16 band_len_HQ[44] = { 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16, 16, 16, 16, 16, 16, 16, diff --git a/lib_com/rom_com.h b/lib_com/rom_com.h index 993e213b38c80501c98b12914474f7f3bacc1743..ce044a4e650d953cc7a5cb7e44533f9bde9ea2c3 100644 --- a/lib_com/rom_com.h +++ b/lib_com/rom_com.h @@ -1066,15 +1066,15 @@ extern const Word16 wscw16q15_16_fx[]; extern const Word16 wscw16q15_32_fx[]; /* Band structure */ -extern const int16_t band_len_HQ[]; -extern const int16_t band_start_HQ[]; -extern const int16_t band_end_HQ[]; +extern const Word16 band_len_HQ[]; +extern const Word16 band_start_HQ[]; +extern const Word16 band_end_HQ[]; extern const int16_t band_len_wb[]; extern const int16_t band_start_wb[]; extern const int16_t band_end_wb[]; extern const int16_t band_len_harm_float[]; -extern const int16_t band_start_harm[]; -extern const int16_t band_end_harm[]; +extern const Word16 band_start_harm[]; +extern const Word16 band_end_harm[]; extern const float rat_flt[SFM_N_WB]; extern const Word16 rat_fx[SFM_N_WB]; extern const int16_t intl_bw_16[N_INTL_GRP_16]; diff --git a/lib_com/stat_noise_uv_mod.c b/lib_com/stat_noise_uv_mod.c index f9b10f501a5073337739d0c133797cac4b730ccb..2899052f3e1e5eef612bde21e6f0728af2891f4e 100644 --- a/lib_com/stat_noise_uv_mod.c +++ b/lib_com/stat_noise_uv_mod.c @@ -40,6 +40,7 @@ #include "prot.h" #include "wmc_auto.h" +#ifndef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * Local constants *---------------------------------------------------------------------*/ @@ -236,3 +237,4 @@ static float calc_tilt( return r1 / r0; } +#endif diff --git a/lib_com/swb_bwe_com_lr.c b/lib_com/swb_bwe_com_lr.c index 638e78db5d868ee362aa0876bf15e8175b5672b9..22d79f157200e2af2a52c0ac3f9a490400df7261 100644 --- a/lib_com/swb_bwe_com_lr.c +++ b/lib_com/swb_bwe_com_lr.c @@ -42,6 +42,7 @@ #include "rom_com.h" #include "wmc_auto.h" +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * hf_parinitiz() * @@ -2108,3 +2109,4 @@ void updat_prev_frm( return; } +#endif diff --git a/lib_enc/acelp_core_enc.c b/lib_enc/acelp_core_enc.c index a814ff029aadd8406387f08c45a1bffe6362a578..d2a43ac55d656ad89c0fd738ed9d2cbc0bcf8310 100644 --- a/lib_enc/acelp_core_enc.c +++ b/lib_enc/acelp_core_enc.c @@ -217,8 +217,6 @@ ivas_error acelp_core_enc( } for ( int ii = 0; ii < M; ii++ ) { - st->mem_MA_fx[ii] = (Word16) ( ( st->mem_MA[ii] ) * 2.56f ); - st->mem_AR_fx[ii] = (Word16) ( ( st->mem_AR[ii] ) * 2.56f ); st->lsf_old_fx[ii] = (Word16) ( ( st->lsf_old[ii] ) * 2.56f ); } Word16 inp_buff[L_FRAME16k + M + 1]; @@ -448,8 +446,6 @@ ivas_error acelp_core_enc( for ( i = 0; i < M; i++ ) { st->lsf_old[i] = st->lsf_old_fx[i] / 2.56f; - st->mem_AR[i] = st->mem_AR_fx[i] / 2.56f; - st->mem_MA[i] = st->mem_MA_fx[i] / 2.56f; } fixedToFloat_arr( st->lsp_old_fx, st->lsp_old, 15, M ); IF( st->hLPDmem ) @@ -508,7 +504,6 @@ ivas_error acelp_core_enc( floatToFixed_arr( lsp_new, lsp_new_fx, Q15, M ); floatToFixed_arr( st->lsp_old, st->lsp_old_fx, Q15, M ); floatToFixed_arr( st->hTdCngEnc->ho_lsp_circ, st->hTdCngEnc->ho_lsp_circ_fx, Q15, HO_HIST_SIZE * M ); - floatToFixed_arr( st->hTdCngEnc->ho_lsp_circ2, st->hTdCngEnc->ho_lsp_circ2_fx, Q15, HO_HIST_SIZE * M ); floatToFixed_arrL( st->hTdCngEnc->ho_ener_circ, st->hTdCngEnc->ho_ener_circ_fx, Q6, HO_HIST_SIZE ); floatToFixed_arr( st->hTdCngEnc->exc_mem2, st->hTdCngEnc->exc_mem2_fx, q_inp, 30 ); for ( i = 0; i < M; i++ ) @@ -525,7 +520,6 @@ ivas_error acelp_core_enc( fixedToFloat_arrL32( q_env_fx, q_env, Q6, NUM_ENV_CNG ); fixedToFloat_arr( st->lsp_old_fx, st->lsp_old, Q15, M ); fixedToFloat_arr( st->hTdCngEnc->ho_lsp_circ_fx, st->hTdCngEnc->ho_lsp_circ, Q15, HO_HIST_SIZE * M ); - fixedToFloat_arr( st->hTdCngEnc->ho_lsp_circ2_fx, st->hTdCngEnc->ho_lsp_circ2, Q15, HO_HIST_SIZE * M ); fixedToFloat_arrL( st->hTdCngEnc->ho_env_circ_fx, st->hTdCngEnc->ho_env_circ, Q6, 160 ); fixedToFloat_arrL( st->hTdCngEnc->ho_ener_circ_fx, st->hTdCngEnc->ho_ener_circ, Q6, HO_HIST_SIZE ); fixedToFloat_arr( st->hTdCngEnc->exc_mem2_fx, st->hTdCngEnc->exc_mem2, q_inp, 30 ); @@ -767,7 +761,6 @@ ivas_error acelp_core_enc( IF( st->hLPDmem ) { st->hLPDmem->tilt_code = float_to_fix16( st->hLPDmem->tilt_code_flt, Q15 ); - st->hLPDmem->gc_threshold = float_to_fix16( st->hLPDmem->gc_threshold_flt, Q16 ); f2me_buf_16( &st->hLPDmem->mem_syn_flt[-1], &st->hLPDmem->mem_syn[-1], &st->hLPDmem->e_mem_syn, M + 1 ); // -1 to sync the exponent of mem_syn with mem_w0 } floatToFixed_arr( lsp_new, lsp_new_fx, Q15, M ); @@ -780,11 +773,8 @@ ivas_error acelp_core_enc( st->clip_var_fx[5] = float_to_fix16( st->clip_var[5], Q14 ); FOR( Word16 idx = 0; idx < M; idx++ ) { - st->lsf_adaptive_mean_fx[idx] = (Word16) ( st->lsf_adaptive_mean[idx] * 2.56f ); IF( tdm_lsfQ_PCh ) tdm_lsfQ_PCh_fx[idx] = (Word16) ( tdm_lsfQ_PCh[idx] * 2.56f ); - st->lsfoldbfi1_fx[idx] = (Word16) ( st->lsfoldbfi1[idx] * 2.56f ); - st->lsfoldbfi0_fx[idx] = (Word16) ( st->lsfoldbfi0[idx] * 2.56f ); } Q_old_bwe_exc = Q_factor_arr( old_bwe_exc, 1380 ); floatToFixed_arr( old_bwe_exc, old_bwe_exc_fx, Q_old_bwe_exc, 1380 ); @@ -1016,11 +1006,6 @@ ivas_error acelp_core_enc( lsf_new[i] = lsf_new_fx[i] / 2.56f; st->lsf_old[i] = st->lsf_old_fx[i] / 2.56f; - st->lsf_adaptive_mean[i] = st->lsf_adaptive_mean_fx[i] / 2.56f; - st->mem_MA[i] = st->mem_MA_fx[i] / 2.56f; - st->mem_AR[i] = st->mem_AR_fx[i] / 2.56f; - st->lsfoldbfi1[i] = st->lsfoldbfi1_fx[i] / 2.56f; - st->lsfoldbfi0[i] = st->lsfoldbfi0_fx[i] / 2.56f; } fixedToFloat_arrL( st->Bin_E_old_fx, st->Bin_E_old, q_comm_Bin, 128 ); fixedToFloat_arrL( st->Bin_E_fx, st->Bin_E, q_comm_Bin, 256 ); @@ -1128,7 +1113,6 @@ ivas_error acelp_core_enc( lsf_syn_mem_restore_ivas_fx( st, tilt_code_bck_fx, gc_threshold_bck_fx, clip_var_bck_fx, next_force_sf_bck, lsp_new_fx, lsp_mid_fx, clip_var_fx, mem_AR_fx, mem_MA_fx, lsp_new_bck_fx, lsp_mid_bck_fx, Bin_E_fx, Bin_E_old_fx, mem_syn_bck_fx, mem_w0_bck_fx, streaklimit_fx, pstreaklen ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS st->hLPDmem->tilt_code_flt = fix16_to_float( st->hLPDmem->tilt_code, Q15 ); - st->hLPDmem->gc_threshold_flt = fix_to_float( st->hLPDmem->gc_threshold, Q16 ); st->clip_var[0] = st->clip_var_fx[0] / 2.56f; st->clip_var[1] = fix16_to_float( st->clip_var_fx[1], Q14 ); st->clip_var[2] = fix16_to_float( st->clip_var_fx[2], Q7 ); @@ -1141,11 +1125,6 @@ ivas_error acelp_core_enc( fixedToFloat_arrL( st->Bin_E_old_fx, st->Bin_E_old, q_comm_Bin, L_FFT / 2 ); fixedToFloat_arr( st->hLPDmem->mem_syn, st->hLPDmem->mem_syn_flt, mem_syn, M ); st->hLPDmem->mem_w0_flt = me2f( st->hLPDmem->mem_w0, st->hLPDmem->e_mem_syn ); - for ( i = 0; i < M; i++ ) - { - st->mem_AR[i] = (float) st->mem_AR_fx[i] / 2.56f; - st->mem_MA[i] = (float) st->mem_MA_fx[i] / 2.56f; - } #endif #else lsf_syn_mem_restore( st, tilt_code_bck, gc_threshold_bck, clip_var_bck, next_force_sf_bck, lsp_new, lsp_mid, clip_var, mem_AR, mem_MA, lsp_new_bck, lsp_mid_bck, Bin_E, Bin_E_old, mem_syn_bck, mem_w0_bck, streaklimit, pstreaklen ); @@ -1268,13 +1247,10 @@ ivas_error acelp_core_enc( floatToFixed_arr( exc2, exc2_fx, Q_exc2, L_FRAME ); #endif floatToFixed_arr( Aq, Aq_fx, 12, NB_SUBFR16k * ( M + 1 ) ); - floatToFixed_arr( st->lspold_s, st->lspold_s_fx, 15, 16 ); - st->min_alpha_fx = float_to_fix16( st->min_alpha, 15 ); Word32 LepsP[2]; Word32 epsP_fx[M + 1]; Word16 e_epsP; f2me_buf( epsP, epsP_fx, &e_epsP, M + 1 ); - st->ge_sm_fx = float_to_fix( st->ge_sm, 6 ); st->exc_pe_fx = float_to_fix16( st->exc_pe, st->Q_stat_noise ); floatToFixed_arr( lsp_new, lsp_new_fx, 15, 16 ); floatToFixed_arr( lsp_mid, lsp_mid_fx, 15, 16 ); @@ -1289,9 +1265,6 @@ ivas_error acelp_core_enc( // conv params from fix to float fixedToFloat_arr( exc2_fx, exc2, Q_exc2, L_FRAME16k ); fixedToFloat_arr( Aq_fx, Aq, 12, NB_SUBFR16k * ( M + 1 ) ); - fixedToFloat_arr( st->lspold_s_fx, st->lspold_s, 15, 16 ); - st->min_alpha = fix16_to_float( st->min_alpha_fx, 15 ); - st->ge_sm = fix_to_float( st->ge_sm_fx, 6 ); st->exc_pe = fix16_to_float( st->exc_pe_fx, st->Q_stat_noise ); #endif #endif @@ -1498,11 +1471,22 @@ ivas_error acelp_core_enc( cng_params_upd( lsp_new, exc, st->L_frame, &st->hTdCngEnc->ho_circ_ptr, st->hTdCngEnc->ho_ener_circ, &st->hTdCngEnc->ho_circ_size, st->hTdCngEnc->ho_lsp_circ, ENC, st->hTdCngEnc->ho_env_circ, &st->hTdCngEnc->cng_buf_cnt, st->hTdCngEnc->cng_exc2_buf_flt, st->hTdCngEnc->cng_brate_buf, st->hDtxEnc->last_active_brate, st->element_mode, st->hFdCngEnc->hFdCngCom->CngBandwidth ); +#ifndef IVAS_FLOAT_FIXED if ( st->L_frame == L_FRAME ) { /* store LSPs@16k, potentially to be used in CNG@16k */ mvr2r( st->lsp_old16k, &( st->hTdCngEnc->ho_lsp_circ2[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); } +#else +#ifdef IVAS_FLOAT_FIXED_CONVERSIONS + floatToFixed_arr( st->lsp_old16k, st->lsp_old16k_fx, Q15, M ); +#endif + IF( EQ_16( st->L_frame, L_FRAME ) ) + { + /* store LSPs@16k, potentially to be used in CNG@16k */ + Copy( st->lsp_old16k_fx, &( st->hTdCngEnc->ho_lsp_circ2_fx[( st->hTdCngEnc->ho_circ_ptr ) * M] ), M ); + } +#endif /* set LSP@16k flag for the first buffer */ st->hTdCngEnc->ho_16k_lsp[st->hTdCngEnc->ho_circ_ptr] = ( st->L_frame == L_FRAME ? 0 : 1 ); diff --git a/lib_enc/acelp_core_switch_enc.c b/lib_enc/acelp_core_switch_enc.c index 768ccf004ad088b8be6297b1f85bb43f5ec86726..465df84a29f4aafb037c287375d8f0ab4d3a140d 100644 --- a/lib_enc/acelp_core_switch_enc.c +++ b/lib_enc/acelp_core_switch_enc.c @@ -43,6 +43,7 @@ #include "prot.h" #include "wmc_auto.h" +#ifndef IVAS_FLOAT_FIXED /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ @@ -460,3 +461,4 @@ static void bwe_switch_enc( return; } +#endif diff --git a/lib_enc/core_enc_init.c b/lib_enc/core_enc_init.c index 633675002edd505a3992d7b7b2741f0793c7329b..add6c9675261c3a34053f3b222cdf79e236bf039 100644 --- a/lib_enc/core_enc_init.c +++ b/lib_enc/core_enc_init.c @@ -424,8 +424,13 @@ void init_coder_ace_plus( st->next_force_safety_net = 0; if ( ( st->last_L_frame != st->L_frame ) || ( st->last_core == AMR_WB_CORE ) || ( st->last_core == HQ_CORE ) ) { +#ifndef IVAS_FLOAT_FIXED set_f( st->mem_MA, 0.0f, M ); mvr2r( GEWB_Ave, st->mem_AR, M ); +#else + set16_fx( st->mem_MA_fx, 0, M ); + Copy( GEWB_Ave_fx, st->mem_AR_fx, M ); +#endif } /* Initialize IGF */ @@ -1372,7 +1377,11 @@ static void init_acelp( if ( hLPDmem != NULL ) { set_zero( hLPDmem->dispMem_flt, 8 ); +#ifndef IVAS_FLOAT_FIXED hLPDmem->gc_threshold_flt = 0.0f; +#else + hLPDmem->gc_threshold = 0; +#endif } /* Pulse Search configuration */ diff --git a/lib_enc/core_enc_switch.c b/lib_enc/core_enc_switch.c index f6c196b42e76db806fdbfb49e438fc8da9a1e796..6397c2d4c957f415ae6bdca6a0a9c36b19203c05 100644 --- a/lib_enc/core_enc_switch.c +++ b/lib_enc/core_enc_switch.c @@ -220,12 +220,6 @@ void core_coder_mode_switch_ivas_fx( st->currEnergyHF = 0; - IF( ( NE_16( st->last_L_frame, st->L_frame ) ) || ( EQ_16( st->last_core, AMR_WB_CORE ) ) || ( EQ_16( st->last_core, HQ_CORE ) ) ) - { - set_f( st->mem_MA, 0.0f, M ); - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - /* Initialize TCX */ IF( hTcxEnc != NULL ) { diff --git a/lib_enc/core_switching_enc.c b/lib_enc/core_switching_enc.c index fe6837e7a555f31614fa02bf003a910a5d52af28..029bdb8bb791a76332678f4713de4113f6db3aee 100644 --- a/lib_enc/core_switching_enc.c +++ b/lib_enc/core_switching_enc.c @@ -213,13 +213,22 @@ void core_switching_pre_enc( set_f( hLPDmem->mem_syn1_flt, 0.0f, M ); hLPDmem->mem_w0_flt = 0.0f; hLPDmem->tilt_code_flt = 0.0f; +#ifndef IVAS_FLOAT_FIXED hLPDmem->gc_threshold_flt = 0.0f; +#else + hLPDmem->gc_threshold = 0; +#endif set_f( hLPDmem->dispMem_flt, 0, 8 ); } st->Nb_ACELP_frames = 0; +#ifndef IVAS_FLOAT_FIXED set_zero( st->mem_MA, M ); mvr2r( GEWB_Ave, st->mem_AR, M ); +#else + set16_fx( st->mem_MA_fx, 0, M ); + Copy( GEWB_Ave_fx, st->mem_AR_fx, M ); +#endif init_gp_clip( st->clip_var ); st->last_coder_type = GENERIC; @@ -261,7 +270,11 @@ void core_switching_pre_enc( hLPDmem->mem_w0_flt = 0.0f; hLPDmem->tilt_code_flt = 0.0f; init_gp_clip( st->clip_var ); +#ifndef IVAS_FLOAT_FIXED hLPDmem->gc_threshold_flt = 0.0f; +#else + hLPDmem->gc_threshold = 0; +#endif set_f( hLPDmem->dispMem_flt, 0, 8 ); } @@ -898,7 +911,11 @@ void core_switching_post_enc( if ( ( st->extl == SWB_TBE || st->extl == FB_TBE ) && ( st->last_core == HQ_CORE || st->L_frame != st->last_L_frame || ( st->last_extl != SWB_TBE && st->last_extl != FB_TBE && st->last_core != TCX_20_CORE && st->last_core != TCX_10_CORE ) ) ) { +#ifdef IVAS_FLOAT_FIXED + set16_fx( st->hBWE_TD->state_ana_filt_shb_fx, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); +#else set_f( st->hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); +#endif #ifdef IVAS_FLOAT_FIXED InitSWBencBufferStates_fx( st->hBWE_TD, NULL ); swb_tbe_reset_fx( st->hBWE_TD->mem_csfilt_fx, st->hBWE_TD->mem_genSHBexc_filt_down_shb_fx, st->hBWE_TD->state_lpc_syn_fx, st->hBWE_TD->syn_overlap_fx, st->hBWE_TD->state_syn_shbexc_fx, &( st->hBWE_TD->tbe_demph_fx ), &( st->hBWE_TD->tbe_premph_fx ), st->hBWE_TD->mem_stp_swb_fx, &( st->hBWE_TD->gain_prec_swb_fx ) ); diff --git a/lib_enc/hq_core_enc.c b/lib_enc/hq_core_enc.c index 317f59eae43389d1a756df43ac85fea04d2ac55b..6345a1c63970996adc084d4e80067f464f71109c 100644 --- a/lib_enc/hq_core_enc.c +++ b/lib_enc/hq_core_enc.c @@ -678,10 +678,11 @@ void HQ_core_enc_init( hHQ_core->prev_stab_hfe2 = 0; #ifndef IVAS_FLOAT_FIXED hHQ_core->prev_ni_ratio = 0.5f; + set_f( hHQ_core->prev_En_sb, 0.0f, NB_SWB_SUBBANDS ); #else hHQ_core->prev_ni_ratio_fx = 16384; + set16_fx( hHQ_core->prev_En_sb_fx, 0, NB_SWB_SUBBANDS ); #endif - set_f( hHQ_core->prev_En_sb, 0.0f, NB_SWB_SUBBANDS ); set_s( hHQ_core->last_bitalloc_max_band, 0, 2 ); #ifndef IVAS_FLOAT_FIXED set_f( hHQ_core->last_ni_gain, 0, BANDS_MAX ); diff --git a/lib_enc/igf_enc.c b/lib_enc/igf_enc.c index a2ec04bbaf5eb6a05c81ac7c33e74d5e991101ba..bc926b32d8b40ddb01a92f2c27c08afb37eff199 100644 --- a/lib_enc/igf_enc.c +++ b/lib_enc/igf_enc.c @@ -209,7 +209,7 @@ static Word16 IGF_getCrest_new_fx( move16(); return crest; } -#endif +#else static float IGF_getCrest_new( const int16_t *logSpec, /* i : power spectrum */ const int16_t start, /* i : start subband index */ @@ -242,6 +242,7 @@ static float IGF_getCrest_new( return crest; } +#endif /*-------------------------------------------------------------------* @@ -305,7 +306,7 @@ static Word16 IGF_getSFM_new_fx( return sfm; } -#endif +#else static float IGF_getSFM_new( const float *powerSpectrum, /* i : power spectrum */ const int16_t *logSpec, /* i : log of power spectrum */ @@ -343,6 +344,7 @@ static float IGF_getSFM_new( return sfm; } +#endif /*-------------------------------------------------------------------* @@ -546,7 +548,7 @@ static Word32 IGF_getTNR_fx( return tonalToNoise; } -#endif // IVAS_FLOAT_FIXED +#else static float IGF_getTNR( const float *powerSpectrum, /* i : energies */ const int16_t start, /* i : start subband index */ @@ -589,8 +591,10 @@ static float IGF_getTNR( return tonalToNoise; } +#endif +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * IGF_getCrest() * @@ -675,6 +679,7 @@ static float IGF_getSFM_ivas( return sfm; } +#endif /*-------------------------------------------------------------------* @@ -1991,6 +1996,7 @@ static void IGF_CalculateStereoEnvelope_fx( return; } #endif +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * IGF_CalculateStereoEnvelope() * @@ -2232,6 +2238,7 @@ static void IGF_CalculateStereoEnvelope( return; } +#endif /*-------------------------------------------------------------------* @@ -2384,6 +2391,7 @@ static int16_t IGF_WriteEnvelope( #endif +#ifndef IVAS_FLOAT_FIXED /*-------------------------------------------------------------------* * IGF_ErodeSpectrum() * @@ -2513,6 +2521,7 @@ static float IGF_ErodeSpectrum_ivas( return highPassEner; } +#endif /*-------------------------------------------------------------------* @@ -2968,6 +2977,7 @@ static void IGF_Whitening_ivas_fx( } #endif // IVAS_FLOAT_FIXED +#ifndef IVAS_FLOAT_FIXED static void IGF_Whitening( const IGF_ENC_INSTANCE_HANDLE hIGFEnc, /* i : | instance handle of IGF Encoder */ float *powerSpectrum, /* i : Q31 | MDCT/MDST power spectrum */ @@ -3310,6 +3320,7 @@ static void IGF_Whitening( return; } +#endif /*-------------------------------------------------------------------* @@ -4282,6 +4293,7 @@ void IGFEncApplyMono( * * apply the IGF encoder, main encoder interface *-------------------------------------------------------------------*/ + #ifdef IVAS_FLOAT_FIXED void IGFEncApplyStereo_fx( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ @@ -4372,8 +4384,7 @@ void IGFEncApplyStereo_fx( } return; } -#endif // IVAS_FLOAT_FIXED - +#else void IGFEncApplyStereo( STEREO_MDCT_ENC_DATA_HANDLE hStereoMdct, /* i/o: MDCT stereo encoder structure */ int16_t ms_mask[2][MAX_SFB], /* i : bandwise MS mask */ @@ -4450,6 +4461,7 @@ void IGFEncApplyStereo( return; } +#endif /*-------------------------------------------------------------------* diff --git a/lib_enc/init_enc.c b/lib_enc/init_enc.c index 6e051302fccb3adb06398d4e04d332cd59f9c6b5..98f4a3df5f22d88efefbb624e77e25fba394f104 100644 --- a/lib_enc/init_enc.c +++ b/lib_enc/init_enc.c @@ -143,20 +143,28 @@ ivas_error init_encoder( * Pre-processing and ACELP core parameters *-----------------------------------------------------------------*/ +#ifndef IVAS_FLOAT_FIXED mvr2r( GEWB_Ave, st->mem_AR, M ); mvr2r( GEWB_Ave, st->lsfoldbfi0, M ); mvr2r( GEWB_Ave, st->lsfoldbfi1, M ); mvr2r( GEWB_Ave, st->lsf_adaptive_mean, M ); +#else + Copy( GEWB_Ave_fx, st->mem_AR_fx, M ); + Copy( GEWB_Ave_fx, st->lsfoldbfi0_fx, M ); + Copy( GEWB_Ave_fx, st->lsfoldbfi1_fx, M ); + Copy( GEWB_Ave_fx, st->lsf_adaptive_mean_fx, M ); +#endif st->next_force_safety_net = 0; st->pstreaklen = 0; #ifndef IVAS_FLOAT_FIXED st->streaklimit = 1.0f; + set_f( st->mem_MA, 0, M ); #else st->streaklimit_fx = 32767; + set16_fx( st->mem_MA_fx, 0, M ); #endif - set_f( st->mem_MA, 0, M ); init_gp_clip( st->clip_var ); pitch_ol_init( @@ -195,9 +203,10 @@ ivas_error init_encoder( set_f( st->mem_decim2, 0, 3 ); set_f( st->Bin_E, 0, L_FFT ); +#ifndef IVAS_FLOAT_FIXED st->ee_old = 10.0f; -#ifdef IVAS_FLOAT_FIXED - st->ee_old_fx = 10 << 6; // 10 in Q6 +#else + st->ee_old_fx = 640; #endif st->Nb_ACELP_frames = 0; st->audio_frame_cnt = AUDIO_COUNTER_INI; /* Initialization of the audio frame counter mildly into the audio mode */ @@ -250,12 +259,17 @@ ivas_error init_encoder( st->tc_cnt = 0; /* find_uv() parameters */ +#ifndef IVAS_FLOAT_FIXED st->old_dE1 = 0.0f; -#ifdef IVAS_FLOAT_FIXED +#else st->old_dE1_fx = 0; #endif st->old_ind_deltaMax = 0; +#ifndef IVAS_FLOAT_FIXED set_f( st->old_enr_ssf, 0.0f, 2 * NB_SSF ); +#else + set32_fx( st->old_enr_ssf_fx, 0, 2 * NB_SSF ); +#endif st->spike_hyst = -1; /* stereo switching memories */ @@ -271,12 +285,27 @@ ivas_error init_encoder( st->sharpFlag = 0; #endif /* Stationary noise UV modification */ +#ifndef IVAS_FLOAT_FIXED st->ge_sm = 10; +#else + st->ge_sm_fx = L_deposit_l( 640 ); +#endif st->uv_count = 0; st->act_count = 3; +#ifndef IVAS_FLOAT_FIXED mvr2r( st->lsp_old, st->lspold_s, M ); +#else +#ifdef IVAS_FLOAT_FIXED_CONVERSIONS + floatToFixed_arr( st->lsp_old, st->lsp_old_fx, Q15, M ); +#endif + Copy( st->lsp_old_fx, st->lspold_s_fx, M ); +#endif st->noimix_seed = RANDOM_INITSEED; +#ifndef IVAS_FLOAT_FIXED st->min_alpha = 1; +#else + st->min_alpha_fx = 32767; +#endif st->exc_pe = 0; #ifdef IVAS_FLOAT_FIXED st->exc_pe_fx = 0; @@ -1230,12 +1259,7 @@ ivas_error init_encoder_ivas_fx( Copy( GEWB_Ave_fx, st->lsfoldbfi1_fx, M ); Copy( GEWB_Ave_fx, st->lsf_adaptive_mean_fx, M ); #if 1 // TODO: Float Initializations. To be removed later - mvr2r( GEWB_Ave, st->mem_AR, M ); - mvr2r( GEWB_Ave, st->lsfoldbfi0, M ); - mvr2r( GEWB_Ave, st->lsfoldbfi1, M ); - mvr2r( GEWB_Ave, st->lsf_adaptive_mean, M ); init_gp_clip( st->clip_var ); - set_zero( st->mem_MA, M ); pitch_ol_init( #ifndef IVAS_FLOAT_FIXED &st->old_thres, @@ -1278,8 +1302,6 @@ ivas_error init_encoder_ivas_fx( st->mem_wsp = 0.0f; set_f( st->mem_decim2, 0, 3 ); set_f( st->Bin_E, 0, L_FFT ); - st->ee_old = 10.0f; - st->old_dE1 = 0.0f; if ( st->Opt_AMR_WB ) { mvr2r( mean_isf_amr_wb, st->lsf_old, M ); @@ -1294,12 +1316,10 @@ ivas_error init_encoder_ivas_fx( mvr2r( st->lsp_old1, st->lsp_old, M ); mvr2r( st->lsp_old, st->lsp_old16k, M ); mvr2r( st->lsp_old, st->lspold_enc, M ); - set_f( st->old_enr_ssf, 0.0f, 2 * NB_SSF ); st->mem_preemph_DFT = 0.0f; set_f( st->inp_12k8_mem_stereo_sw, 0, STEREO_DFT_OVL_12k8 - L_MEM_RECALC_12K8 - L_FILT ); st->mem_preemph16k_DFT = 0.0f; set_f( st->inp_16k_mem_stereo_sw, 0, STEREO_DFT_OVL_16k - L_MEM_RECALC_16K - L_FILT16k ); - mvr2r( st->lsp_old, st->lspold_s, M ); set_f( st->old_Aq_12_8 + 1, 0, M ); st->old_Aq_12_8[0] = 4096; st->voicing0_sm = 0; @@ -1317,7 +1337,6 @@ ivas_error init_encoder_ivas_fx( st->EnergyLT = 0.0f; st->Energy_Old = 0; #endif - st->min_alpha = 1; #ifndef IVAS_FLOAT_FIXED st->prev_fmerit_flt = 0; st->fmerit_dt_flt = 0; @@ -1350,7 +1369,7 @@ ivas_error init_encoder_ivas_fx( set16_fx( st->mem_decim2_fx, 0, 3 ); set32_fx( st->Bin_E_fx, 0, L_FFT ); - st->ee_old_fx = 640; /*chk //10 in Q6 */ + st->ee_old_fx = 640; /* 10.0f in Q6 */ move16(); st->Nb_ACELP_frames = 0; move16(); @@ -1430,9 +1449,7 @@ ivas_error init_encoder_ivas_fx( st->sharpFlag = 0; /* Stationary noise UV modification */ - st->ge_sm_fx = 10; /*chk //10 in Q6 */ - move16(); - st->ge_sm = 10; /*chk //10 in Q6 */ + st->ge_sm_fx = L_deposit_l( 640 ); /*Q(GE_SHIFT)*/ move16(); st->uv_count = 0; move16(); @@ -2248,12 +2265,6 @@ ivas_error init_encoder_ivas_fx( st->currEnergyHF = 0; - IF( ( NE_16( st->last_L_frame, st->L_frame ) ) || ( EQ_16( st->last_core, AMR_WB_CORE ) ) || ( EQ_16( st->last_core, HQ_CORE ) ) ) - { - set_f( st->mem_MA, 0.0f, M ); - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - /* Initialize TCX */ IF( hTcxEnc != NULL ) { @@ -2416,7 +2427,11 @@ void LPDmem_enc_init( set_f( hLPDmem->mem_syn3_flt, 0, M ); hLPDmem->tilt_code_flt = 0.0f; +#ifndef IVAS_FLOAT_FIXED hLPDmem->gc_threshold_flt = 0.0f; +#else + hLPDmem->gc_threshold = 0; +#endif set_f( hLPDmem->dispMem_flt, 0, 8 ); return; diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index 20ac14fb6dc9f5bdd0a363e2a3d415aad736ea7a..32ea924228c5c2ec33ed518148cd58a7ea8bd62b 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -489,7 +489,6 @@ ivas_error ivas_core_enc( fixedToFloat_arr( st->hTdCngEnc->ho_lsp_circ_fx, st->hTdCngEnc->ho_lsp_circ, Q15, HO_HIST_SIZE * M ); fixedToFloat_arrL( st->hTdCngEnc->ho_env_circ_fx, st->hTdCngEnc->ho_env_circ, Q6, HO_HIST_SIZE * NUM_ENV_CNG ); // fixedToFloat_arr( st->hTdCngEnc->cng_exc2_buf, st->hTdCngEnc->cng_exc2_buf_flt, Q_exc, HO_HIST_SIZE * L_FFT ); - fixedToFloat_arr( st->hTdCngEnc->ho_lsp_circ2_fx, st->hTdCngEnc->ho_lsp_circ2, M, Q15 ); } st->hTcxEnc->measuredBwRatio_flt = fix16_to_float( st->hTcxEnc->measuredBwRatio, Q14 ); @@ -507,9 +506,6 @@ ivas_error ivas_core_enc( for ( int j = 0; j < M; j++ ) { st->lsf_old[j] = (float) st->lsf_old_fx[j] / 2.56f; - st->lsf_adaptive_mean[j] = (float) st->lsf_adaptive_mean_fx[j] / 2.56f; - st->mem_AR[j] = (float) st->mem_AR_fx[j] / 2.56f; - st->mem_MA[j] = (float) st->mem_MA_fx[j] / 2.56f; } for ( int k = 0; k < 2; k++ ) { @@ -1423,12 +1419,6 @@ ivas_error ivas_core_enc( me2f_buf_16( st->hTcxEnc->buf_speech_ltp, st->hTcxEnc->exp_buf_speech_ltp, st->hTcxEnc->buf_speech_ltp_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); } - IF( ( st->Opt_DTX_ON && LE_32( st->core_brate, SID_2k40 ) && EQ_16( st->cng_type, FD_CNG ) ) || ( st->tcxonly && ( EQ_16( st->codec_mode, MODE2 ) || GT_16( st->element_mode, EVS_MONO ) ) ) ) - { - set_zero( st->mem_MA, M ); - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - IF( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) { st->hTcxEnc->tcxltp_norm_corr_mem_flt = fixedToFloat( st->hTcxEnc->tcxltp_norm_corr_mem, 15 ); diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index b84e822620f97926f3842a4812b3fe0f4e772d7c..1a6970133cab4282dc56830f07c2647e252368fe 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -2383,9 +2383,6 @@ ivas_error pre_proc_front_ivas_fx( } st->hNoiseEst->Etot_last_fx = float_to_fix16( st->hNoiseEst->Etot_last, Q8 ); - - floatToFixed_arr32( st->old_enr_ssf, st->old_enr_ssf_fx, 0, 2 * NB_SSF ); - #endif // IVAS_FLOAT_FIXED_CONVERSIONS /* Detection of very short stable pitch period */ @@ -2473,8 +2470,6 @@ ivas_error pre_proc_front_ivas_fx( fixedToFloat_arrL32( ee_fx, ee, Q6, 2 ); fixedToFloat_arrL32( hp_E_fx, hp_E, q_fr_bands, 2 ); - fixedToFloat_arrL32( st->old_enr_ssf_fx, st->old_enr_ssf, 0, 2 * NB_SSF ); - non_staX = fixedToFloat_16( non_staX16_fx, Q8 ); sp_div = fixedToFloat_16( sp_div16_fx, q_sp_div ); *cor_map_sum = fixedToFloat_16( cor_map_sum16_fx, Q8 ); diff --git a/lib_enc/ivas_cpe_enc.c b/lib_enc/ivas_cpe_enc.c index 46fc422917423199521426e7c3ea50ee925cc05a..2b8930a55ad52fa5db99bdb12ea41403de84bcd8 100644 --- a/lib_enc/ivas_cpe_enc.c +++ b/lib_enc/ivas_cpe_enc.c @@ -733,9 +733,6 @@ ivas_error ivas_cpe_enc( sts[0]->old_corr_fx = float_to_fix16( sts[0]->old_corr, Q15 ); sts[1]->old_corr_fx = float_to_fix16( sts[1]->old_corr, Q15 ); - sts[0]->ee_old_fx = floatToFixed( sts[0]->ee_old, Q6 ); - sts[1]->ee_old_fx = floatToFixed( sts[1]->ee_old, Q6 ); - IF( hCPE->hStereoTD->tdm_last_SM_flag ) { floatToFixed_arr16( sts[0]->input, sts[0]->input_fx, 0, input_frame ); diff --git a/lib_enc/ivas_dirac_enc.c b/lib_enc/ivas_dirac_enc.c index 45a0085435bd6dde0f1dfd904297edebbc60644f..5dc8c4f61cbc35f2a3f800b9647f4aa15a63e516 100644 --- a/lib_enc/ivas_dirac_enc.c +++ b/lib_enc/ivas_dirac_enc.c @@ -1842,6 +1842,8 @@ void ivas_dirac_param_est_enc( /* Sectors */ IF( hodirac_flag ) { + Word32 L_tmp, L_tmp1; + Word16 e_tmp, e_tmp1, exp_diff; FOR( band_m_idx = 0; band_m_idx < hDirAC->hConfig->nbands; band_m_idx++ ) { q_direction->band_data[band_m_idx].azimuth_fx[block_m_idx] = L_shr( azi_secs_fx[band_m_idx], 1 ); // Q23 -> Q22 @@ -1854,20 +1856,21 @@ void ivas_dirac_param_est_enc( q_direction[1].band_data[band_m_idx].elevation_fx[block_m_idx] = L_shr( ele_secs_fx[num_freq_bands + band_m_idx], 1 ); // Q23 -> Q22 move32(); - Word32 x = L_sub( ONE_IN_Q30, L_shr( diff_secs_fx[band_m_idx], sub( 1, diff_secs_exp[band_m_idx] ) ) ); - Word32 y = L_sub( ONE_IN_Q30, L_shr( diff_secs_fx[num_freq_bands + band_m_idx], sub( 1, diff_secs_exp[num_freq_bands + band_m_idx] ) ) ); - - Word16 tmp16 = extract_h( L_add( x, y ) ); - Word32 tmp32; - IF( tmp16 == 0 ) + L_tmp = BASOP_Util_Add_Mant32Exp( ONE_IN_Q30, Q1, L_negate( diff_secs_fx[band_m_idx] ), diff_secs_exp[band_m_idx], &e_tmp ); + L_tmp1 = BASOP_Util_Add_Mant32Exp( ONE_IN_Q30, Q1, L_negate( diff_secs_fx[num_freq_bands + band_m_idx] ), diff_secs_exp[num_freq_bands + band_m_idx], &e_tmp1 ); + L_tmp1 = BASOP_Util_Add_Mant32Exp( L_tmp, e_tmp, L_tmp1, e_tmp1, &e_tmp1 ); + IF( L_tmp1 == 0 ) { - tmp32 = L_deposit_h( div_l( x, EPSILON_FX ) ); + q_direction[1].band_data[band_m_idx].energy_ratio_fx[block_m_idx] = L_shl( div_l( L_tmp, EPSILON_FX ), Q30 - Q15 ); // Q30 + move32(); } ELSE { - tmp32 = L_deposit_h( div_l( x, tmp16 ) ); + L_tmp = L_deposit_h( BASOP_Util_Divide3232_Scale( L_tmp, L_add( L_tmp1, EPSILON_FX ), &exp_diff ) ); + exp_diff = add( exp_diff, sub( e_tmp, e_tmp1 ) ); + q_direction[1].band_data[band_m_idx].energy_ratio_fx[block_m_idx] = L_shl( L_tmp, sub( exp_diff, Q1 ) ); // Q30 + move32(); } - tmp32 = L_shr( tmp32, 1 ); // Q31 -> Q30 } } } diff --git a/lib_enc/ivas_masa_enc.c b/lib_enc/ivas_masa_enc.c index 63354efd434b21594f9f7ae121ce1a3aa4642428..4c27158a0f76f2297d9ad2b3fba28d7ece3431a5 100644 --- a/lib_enc/ivas_masa_enc.c +++ b/lib_enc/ivas_masa_enc.c @@ -551,7 +551,7 @@ ivas_error ivas_masa_encode_fx( ivas_error error; Word16 guard_bits, tmp; - guard_bits = find_guarded_bits_fx( 24 ); + guard_bits = find_guarded_bits_fx( 9 ); masa_sid_descriptor = -1; h_orig_metadata = NULL; @@ -2381,6 +2381,9 @@ static void combine_freqbands_and_subframes_fx( Word32 x[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word32 y[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word32 z[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + Word16 x_e[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + Word16 y_e[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; + Word16 z_e[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS]; Word32 vecLen; Word16 vecLen_e; Word32 xSum, ySum, zSum; @@ -2468,12 +2471,27 @@ static void combine_freqbands_and_subframes_fx( eleRad = extract_l( L_shl( Mpy_32_32( hMeta->directional_meta[i].elevation_fx[j][k], PI_OVER_180_FX ), Q13 - Q22 ) ); // ((Q22, Q31) -> Q22) >> Q9 -> Q13 vecLen = Mpy_32_32( hMeta->directional_meta[i].energy_ratio_fx[j][k], hMasa->data.energy_fx[j][k] ); // (Q30, 31-hMasa->data.energy_e[j][k]) -> (31-hMasa->data.energy_e[j][k]) - Q1 - x[i][j][k] = Mpy_32_32( L_mult( getCosWord16( aziRad ), getCosWord16( eleRad ) ), vecLen ); // (Q29, (31-hMasa->data.energy_e[j][k]) - Q1) -> (31-hMasa->data.energy_e[j][k]) - Q3 + /* Need more precision for some DTX cases with low energy frames */ + W_tmp = W_mult0_32_32( L_mult( getCosWord16( aziRad ), getCosWord16( eleRad ) ), vecLen ); // (Q29, (31-hMasa->data.energy_e[j][k]) - Q1) -> (Q59 - hMasa->data.energy_e[j][k]) + q_shift = W_norm( W_tmp ); + x[i][j][k] = W_extract_h( W_shl( W_tmp, q_shift ) ); move32(); - y[i][j][k] = Mpy_32_32( L_mult0( getSinWord16( aziRad ), getCosWord16( eleRad ) ), vecLen ); // (Q29, (31-hMasa->data.energy_e[j][k]) - Q1) -> (31-hMasa->data.energy_e[j][k]) - Q3 + x_e[i][j][k] = sub( Q31, add( sub( 59, hMasa->data.energy_e[j][k] ), sub( q_shift, 32 ) ) ); + move16(); + + W_tmp = W_mult0_32_32( L_mult0( getSinWord16( aziRad ), getCosWord16( eleRad ) ), vecLen ); // (Q29, (31-hMasa->data.energy_e[j][k]) - Q1) -> (Q59 - hMasa->data.energy_e[j][k]) + q_shift = W_norm( W_tmp ); + y[i][j][k] = W_extract_h( W_shl( W_tmp, q_shift ) ); move32(); - z[i][j][k] = Mpy_32_32( L_mult0( getSinWord16( eleRad ), ONE_IN_Q14 ), vecLen ); // (Q29, (31-hMasa->data.energy_e[j][k]) - Q1) -> (31-hMasa->data.energy_e[j][k]) - Q3 + y_e[i][j][k] = sub( Q31, add( sub( 59, hMasa->data.energy_e[j][k] ), sub( q_shift, 32 ) ) ); + move16(); + + W_tmp = W_mult0_32_32( L_mult0( getSinWord16( eleRad ), ONE_IN_Q14 ), vecLen ); // (Q29, (31-hMasa->data.energy_e[j][k]) - Q1) -> (Q59 - hMasa->data.energy_e[j][k]) + q_shift = W_norm( W_tmp ); + z[i][j][k] = W_extract_h( W_shl( W_tmp, q_shift ) ); move32(); + z_e[i][j][k] = sub( Q31, add( sub( 59, hMasa->data.energy_e[j][k] ), sub( q_shift, 32 ) ) ); + move16(); } } } @@ -2512,9 +2530,9 @@ static void combine_freqbands_and_subframes_fx( FOR( m = brange[0]; m < brange[1]; m++ ) { - xSum = BASOP_Util_Add_Mant32Exp( xSum, xSum_e, x[i][j][m], add( hMasa->data.energy_e[j][m], 3 ), &xSum_e ); // xSum_e - ySum = BASOP_Util_Add_Mant32Exp( ySum, ySum_e, y[i][j][m], add( hMasa->data.energy_e[j][m], 3 ), &ySum_e ); // ySum_e - zSum = BASOP_Util_Add_Mant32Exp( zSum, zSum_e, z[i][j][m], add( hMasa->data.energy_e[j][m], 3 ), &zSum_e ); // zSum_e + xSum = BASOP_Util_Add_Mant32Exp( xSum, xSum_e, x[i][j][m], x_e[i][j][m], &xSum_e ); // xSum_e + ySum = BASOP_Util_Add_Mant32Exp( ySum, ySum_e, y[i][j][m], y_e[i][j][m], &ySum_e ); // ySum_e + zSum = BASOP_Util_Add_Mant32Exp( zSum, zSum_e, z[i][j][m], z_e[i][j][m], &zSum_e ); // zSum_e energySum = BASOP_Util_Add_Mant32Exp( energySum, energySum_e, hMasa->data.energy_fx[j][m], hMasa->data.energy_e[j][m], &energySum_e ); // energySum_e } common_e = add( s_max( xSum_e, s_max( ySum_e, zSum_e ) ), 2 ); /*2 is guard bit for addition operations*/ @@ -2563,7 +2581,8 @@ static void combine_freqbands_and_subframes_fx( hMeta->directional_meta[i].spread_coherence_fx[j][k] = BASOP_Util_Divide3232_Scale( spreadCohSum, L_add( energySum, EPSILON_FX ), &exp_diff ); /*exp_diff+spreadCohSum_e-energySum_e*/ exp_diff = add( exp_diff, sub( spreadCohSum_e, energySum_e ) ); move16(); - hMeta->directional_meta[i].spread_coherence_fx[j][k] = shl( hMeta->directional_meta[i].spread_coherence_fx[j][k], exp_diff ); // Q15 + /* Saturation - LTV fix for values close to 1.0f+ */ + hMeta->directional_meta[i].spread_coherence_fx[j][k] = shl_sat( hMeta->directional_meta[i].spread_coherence_fx[j][k], exp_diff ); // Q15 move16(); IF( i == 0 ) @@ -2579,7 +2598,8 @@ static void combine_freqbands_and_subframes_fx( hMeta->common_meta.surround_coherence_fx[j][k] = BASOP_Util_Divide3232_Scale( surrCohSum, L_add( energySum, EPSILON_FX ), &exp_diff ); /*exp_diff+surrCohSum_e-energySum_e*/ move16(); exp_diff = add( exp_diff, sub( surrCohSum_e, energySum_e ) ); - hMeta->common_meta.surround_coherence_fx[j][k] = shl( hMeta->common_meta.surround_coherence_fx[j][k], exp_diff ); // Q15 + /* Saturation - LTV fix for values close to 1.0f+ */ + hMeta->common_meta.surround_coherence_fx[j][k] = shl_sat( hMeta->common_meta.surround_coherence_fx[j][k], exp_diff ); // Q15 move16(); } } @@ -2882,11 +2902,8 @@ void ivas_masa_combine_directions_fx( Word16 exp_sumVecLen_buff[MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS], exp_sumVecLen = MIN16B_FLT_FX; move16(); Word32 tempImportance_fx; - Word16 exp_tmp_importance = 0; - move16(); Word32 importance_fx[MASA_FREQUENCY_BANDS]; - Word16 exp_importance_buff[MASA_FREQUENCY_BANDS], exp_importance = MIN16B_FLT_FX; - move16(); + Word16 exp_importance; Word16 indicesOfLargest[MASA_FREQUENCY_BANDS]; Word32 ratioSum_fx; @@ -3004,41 +3021,29 @@ void ivas_masa_combine_directions_fx( } /* Estimate the importance of having two directions instead of one */ + /* Reduced precision of importance_fx intentionally to Q13 to maintatin 0.0001f resolution */ FOR( i = 0; i < numCodingBands; i++ ) { importance_fx[i] = 0; move32(); FOR( j = 0; j < numSf; j++ ) { - tempImportance_fx = L_add( hMeta->directional_meta[0].energy_ratio_fx[j][i], hMeta->directional_meta[1].energy_ratio_fx[j][i] ); - exp_tmp_importance = 0; - move16(); - tempImportance_fx = BASOP_Util_Add_Mant32Exp( tempImportance_fx, 31 - Q30, L_negate( sumVecLen_fx[j][i] ), exp_sumVecLen, &exp_tmp_importance ); - importance_fx[i] = BASOP_Util_Add_Mant32Exp( importance_fx[i], exp_importance_buff[i], tempImportance_fx, exp_tmp_importance, &exp_importance_buff[i] ); + tempImportance_fx = L_shr( L_add( hMeta->directional_meta[0].energy_ratio_fx[j][i], hMeta->directional_meta[1].energy_ratio_fx[j][i] ), Q30 - Q13 ); // Q13 + tempImportance_fx = L_sub( tempImportance_fx, L_shr( sumVecLen_fx[j][i], sub( sub( Q31, exp_sumVecLen ), Q13 ) ) ); // Q13 + importance_fx[i] = L_add( importance_fx[i], tempImportance_fx ); // Q13 move32(); } IF( NE_16( numSf, 1 ) ) { - importance_fx[i] = L_shr( importance_fx[i], 2 ); + importance_fx[i] = L_shr( importance_fx[i], 2 ); // Q13 move32(); } - importance_fx[i] = Mpy_32_32( importance_fx[i], hMasa->data.importanceWeight_fx[i] ); - move32(); - exp_importance_buff[i] = add( exp_importance_buff[i], 1 ); - move16(); - } - - /*make commen exp for importance_fx buffer*/ - FOR( i = 0; i < numCodingBands; i++ ) - { - exp_importance = s_max( exp_importance_buff[i], exp_importance ); - } - FOR( i = 0; i < numCodingBands; i++ ) - { - importance_fx[i] = L_shr( importance_fx[i], sub( exp_importance, exp_importance_buff[i] ) ); + importance_fx[i] = Mpy_32_32( importance_fx[i], hMasa->data.importanceWeight_fx[i] ); //(Q13, Q30) -> Q12 move32(); } + exp_importance = Q31 - Q12; + move16(); /* Determine bands where to use two directions */ find_n_largest_fx( importance_fx, exp_importance, indicesOfLargest, numCodingBands, hMasa->config.numTwoDirBands ); @@ -5996,8 +6001,8 @@ static void masa_metadata_direction_alignment_fx( FOR( band = 0; band < MASA_FREQUENCY_BANDS; band++ ) { UWord8 sf; - Word16 diff_swap_fx; - Word16 diff_no_swap_fx; + Word32 diff_swap_fx; + Word32 diff_no_swap_fx; /* trade 2*(cos+sin) against storing the values between frames */ Word16 prev_ele_dir1_sin_fx, prev_ele_dir2_sin_fx; @@ -6041,7 +6046,9 @@ static void masa_metadata_direction_alignment_fx( LT_32( L_abs( L_sub( ele_rad2_fx, hAlignState->previous_ele_dir2_fx[band] ) ), EPSILON_FX ) ) { diff_swap_fx = ONE_IN_Q13; /*1 q13*/ + move32(); diff_no_swap_fx = 0; + move32(); /* cached values that will be used for the short-cuts and over-written by the real computations, if done */ sin_ele1_fx = prev_ele_dir1_sin_fx; /*q15*/ sin_ele2_fx = prev_ele_dir2_sin_fx; /*q15*/ @@ -6051,8 +6058,6 @@ static void masa_metadata_direction_alignment_fx( move16(); move16(); move16(); - move16(); - move16(); } ELSE IF( LT_32( L_abs( L_sub( azi_rad1_fx, hAlignState->previous_azi_dir2_fx[band] ) ), EPSILON_FX ) && LT_32( L_abs( L_sub( azi_rad2_fx, hAlignState->previous_azi_dir1_fx[band] ) ), EPSILON_FX ) && @@ -6060,7 +6065,9 @@ static void masa_metadata_direction_alignment_fx( LT_32( L_abs( L_sub( ele_rad2_fx, hAlignState->previous_ele_dir1_fx[band] ) ), EPSILON_FX ) ) { diff_swap_fx = 0; + move32(); diff_no_swap_fx = ONE_IN_Q13; /*1.0 q13*/ + move32(); /* cached values that will be used for the short-cuts and over-written by the real computations, if done */ sin_ele1_fx = prev_ele_dir2_sin_fx; /*q15*/ sin_ele2_fx = prev_ele_dir1_sin_fx; /*q15*/ @@ -6070,8 +6077,6 @@ static void masa_metadata_direction_alignment_fx( move16(); move16(); move16(); - move16(); - move16(); } ELSE { @@ -6089,8 +6094,8 @@ static void masa_metadata_direction_alignment_fx( temp1_e = 1; /*stores expoenent for square root operation*/ move16(); temp2 = Sqrt32( L_sub( ONE_IN_Q30, L_mult0( temp1, temp1 ) ), &temp1_e ); /*31-temp1_e*/ - temp1 = BASOP_util_atan2( temp2, abs_s( temp1 ), sub( temp1_e, 16 ) ); /*q13*/ - diff_no_swap_fx = temp1; /*q13*/ + temp1 = BASOP_util_atan2( temp2, temp1, sub( temp1_e, 16 ) ); /*q13*/ + diff_no_swap_fx = L_deposit_l( temp1 ); /*q13*/ temp1 = getCosWord16R2( extract_l( Mpy_32_32( L_sub( azi_rad2_fx, hAlignState->previous_azi_dir2_fx[band] ), 2670177 /*2^24/(2*pi)*/ ) ) ); /*q15*/ temp1 = mult( mult( temp1, cos_ele2_fx ) /*q31*/, prev_ele_dir2_cos_fx /*q15*/ ); /*q15*/ @@ -6098,8 +6103,8 @@ static void masa_metadata_direction_alignment_fx( temp1_e = 1; /*stores expoenent for square root operation*/ move16(); temp2 = Sqrt32( L_sub( ONE_IN_Q30, L_mult0( temp1, temp1 ) ), &temp1_e ); /*31-temp1_e*/ - temp1 = BASOP_util_atan2( temp2, abs_s( temp1 ), sub( temp1_e, 16 ) ); /*q13*/ - diff_no_swap_fx = add( diff_no_swap_fx, temp1 ); /*q13*/ + temp1 = BASOP_util_atan2( temp2, temp1, sub( temp1_e, 16 ) ); /*q13*/ + diff_no_swap_fx = L_add( diff_no_swap_fx, temp1 ); /*q13*/ temp1 = getCosWord16R2( extract_l( Mpy_32_32( L_sub( azi_rad1_fx, hAlignState->previous_azi_dir2_fx[band] ), 2670177 /*2^24/(2*pi)*/ ) ) ); /*q15*/ temp1 = mult( mult( temp1, cos_ele1_fx ) /*q31*/, prev_ele_dir2_cos_fx /*q15*/ ); /*q15*/ @@ -6107,8 +6112,8 @@ static void masa_metadata_direction_alignment_fx( temp1_e = 1; /*stores expoenent for square root operation*/ move16(); temp2 = Sqrt32( L_sub( ONE_IN_Q30, L_mult0( temp1, temp1 ) ), &temp1_e ); /*31-temp1_e*/ - temp1 = BASOP_util_atan2( temp2, abs_s( temp1 ), sub( temp1_e, 16 ) ); /*q13*/ - diff_swap_fx = temp1; /*q13*/ + temp1 = BASOP_util_atan2( temp2, temp1, sub( temp1_e, 16 ) ); /*q13*/ + diff_swap_fx = L_deposit_l( temp1 ); /*q13*/ temp1 = getCosWord16R2( extract_l( Mpy_32_32( L_sub( azi_rad2_fx, hAlignState->previous_azi_dir1_fx[band] ), 2670177 /*2^24/(2*pi)*/ ) ) ); /*q15*/ temp1 = mult( mult( temp1, cos_ele2_fx ) /*q31*/, prev_ele_dir1_cos_fx /*q15*/ ); /*q15*/ @@ -6116,8 +6121,8 @@ static void masa_metadata_direction_alignment_fx( temp1_e = 1; /*stores expoenent for square root operation*/ move16(); temp2 = Sqrt32( L_sub( ONE_IN_Q30, L_mult0( temp1, temp1 ) ), &temp1_e ); /*31-temp1_e*/ - temp1 = BASOP_util_atan2( temp2, abs_s( temp1 ), sub( temp1_e, 16 ) ); /*q13*/ - diff_swap_fx = add( diff_swap_fx, temp1 ); /*q13*/ + temp1 = BASOP_util_atan2( temp2, temp1, sub( temp1_e, 16 ) ); /*q13*/ + diff_swap_fx = L_add( diff_swap_fx, temp1 ); /*q13*/ } } ELSE @@ -6138,12 +6143,12 @@ static void masa_metadata_direction_alignment_fx( diff_swap_fx = ONE_IN_Q13; /*1.0 in Q13*/ diff_no_swap_fx = 0; - move16(); - move16(); + move32(); + move32(); } test(); - IF( GT_16( n_dirs, 1 ) && GT_16( diff_no_swap_fx, diff_swap_fx ) ) + IF( GT_16( n_dirs, 1 ) && GT_32( diff_no_swap_fx, diff_swap_fx ) ) { /* swap the metadata of the two directions in this TF-tile */ Word32 tmp_val; diff --git a/lib_enc/ivas_mct_enc.c b/lib_enc/ivas_mct_enc.c index 472043f0224eb8b337ec6440b778f498d01e5e1c..07379e99caf636afa17c1a2ccde15475ac2f4590 100644 --- a/lib_enc/ivas_mct_enc.c +++ b/lib_enc/ivas_mct_enc.c @@ -779,12 +779,6 @@ ivas_error ivas_mct_enc( me2f_buf_16( st->hTcxEnc->buf_speech_ltp, st->hTcxEnc->exp_buf_speech_ltp, st->hTcxEnc->buf_speech_ltp_flt, L_PAST_MAX_32k + L_FRAME32k + L_NEXT_MAX_32k ); } - IF( ( st->Opt_DTX_ON && LE_32( st->core_brate, SID_2k40 ) && EQ_16( st->cng_type, FD_CNG ) ) || ( st->tcxonly && ( EQ_16( st->codec_mode, MODE2 ) || GT_16( st->element_mode, EVS_MONO ) ) ) ) - { - set_zero( st->mem_MA, M ); - mvr2r( GEWB_Ave, st->mem_AR, M ); - } - IF( st->element_mode > EVS_MONO && st->hTcxEnc != NULL ) { st->hTcxEnc->tcxltp_norm_corr_mem_flt = fixedToFloat( st->hTcxEnc->tcxltp_norm_corr_mem, 15 ); diff --git a/lib_enc/ivas_qmetadata_enc.c b/lib_enc/ivas_qmetadata_enc.c index f34ae9ef04984abcd1e5c36a760e348b6ee2d198..f77bce2a8d732cd0c024a82f4200c810ee26c97b 100644 --- a/lib_enc/ivas_qmetadata_enc.c +++ b/lib_enc/ivas_qmetadata_enc.c @@ -1621,7 +1621,7 @@ void ivas_qmetadata_enc_sid_encode_fx( const Word16 ivas_format /* i : IVAS format */ ) { - Word16 b, m, i; + Word16 b, m; Word16 bit_pos_start; IVAS_QDIRECTION *q_direction; Word16 nbands, nblocks, start_band; @@ -1823,14 +1823,11 @@ void ivas_qmetadata_enc_sid_encode_fx( { /*compute the average direction */ ivas_qmetadata_azimuth_elevation_to_direction_vector_fx( q_direction->band_data[b].azimuth_fx[m], q_direction->band_data[b].elevation_fx[m], direction_vector_fx ); - FOR( i = 0; i < 3; i++ ) - { - avg_direction_vector_fx[i] = L_add( avg_direction_vector_fx[i], L_shr( direction_vector_fx[i], 1 ) ); - move32(); - } + scale_sig32( direction_vector_fx, 3, Q22 - Q30 ); // Q30 -> Q22 + v_add_fixed( avg_direction_vector_fx, direction_vector_fx, avg_direction_vector_fx, 3, 0 ); // Q22 } - ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, Q30, &avg_azimuth_fx[b], &avg_elevation_fx[b] ); + ivas_qmetadata_direction_vector_to_azimuth_elevation_fx( avg_direction_vector_fx, Q22, &avg_azimuth_fx[b], &avg_elevation_fx[b] ); /* Quantize the average direction */ IF( q_direction->not_in_2D == 0 ) @@ -2549,7 +2546,7 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( FOR( j = hQMetaData->q_direction[0].cfg.start_band; j < hQMetaData->q_direction[0].cfg.nbands; ++j ) { test(); - IF( EQ_16( hQMetaData->no_directions, 2 ) && EQ_16( hQMetaData->twoDirBands[j], 1 ) ) + IF( EQ_32( hQMetaData->no_directions, 2 ) && EQ_16( hQMetaData->twoDirBands[j], 1 ) ) { Word32 diffRatio, dfRatio, dfRatioQ, diffRatioQ, dirRatio1Q, dirRatio2Q; /* Q30 */ Word32 dirRatio1, dirRatio2, sumRatio; /* Q30 */ @@ -2562,27 +2559,28 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( IF( hodirac_flag ) { /* already encoded as total and ratios in HO-DirAC */ - diffRatio = L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0] ); - dfRatio = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; - move32(); + diffRatio = L_sub( ONE_IN_Q30, hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0] ); // Q30 + dfRatio = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; // Q30 move32(); } ELSE { - dirRatio1 = hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0]; - dirRatio2 = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; + dirRatio1 = hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[0]; // Q30 move32(); + dirRatio2 = hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[0]; // Q30 move32(); - sumRatio = L_add( dirRatio1, dirRatio2 ); - diffRatio = L_sub( ONE_IN_Q30, sumRatio ); + sumRatio = L_add( dirRatio1, dirRatio2 ); // Q30 + diffRatio = L_sub( ONE_IN_Q30, sumRatio ); // Q30 IF( LT_32( sumRatio, EPSILON_FIX ) ) { - dfRatio = ONE_IN_Q30 / 2; // 0.5 in Q30 + dfRatio = ONE_IN_Q29 /* 0.5f in Q30*/; // Q30 move32(); } ELSE { - dfRatio = L_shl( L_deposit_l( div_l( dirRatio1, extract_h( sumRatio ) ) ), 15 ); // Q30 + Word16 exp_diff; + dfRatio = L_deposit_h( BASOP_Util_Divide3232_Scale( dirRatio1, sumRatio, &exp_diff ) ); + dfRatio = L_shl( dfRatio, sub( exp_diff, Q1 ) ); // Q30 } } @@ -2607,16 +2605,16 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( IF( hodirac_flag ) { Word16 dfRatioQ16; /* Q14 */ - dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16, 0, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 2 ) /* Q13 */, dfRatio_qsteps ); + dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16 /* Q14 */, 0, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 2 ), dfRatio_qsteps ); dfRatioQ = L_deposit_h( dfRatioQ16 ); // Q30 dirRatio1Q = L_sub( ONE_IN_Q30, diffRatioQ ); // Q30 - dirRatio2Q = dfRatioQ; + dirRatio2Q = dfRatioQ; // Q30 move32(); } ELSE { Word16 dfRatioQ16; /* Q14 */ - dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16, ONE_IN_Q13, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 3 ) /* Q12 */, dfRatio_qsteps ); + dfRatio_index = usquant_fx( extract_h( dfRatio ), &dfRatioQ16 /* Q14 */, ONE_IN_Q13 /* 0.5f in Q14 */, shr( div_s( 1, sub( dfRatio_qsteps, 1 ) ), 3 ), dfRatio_qsteps ); /* Direction quantization requires also separately quantized direct-to-total ratios. Thus, we calculate them. */ dirRatio1Q = L_shl( Mpy_32_16_1( L_sub( ONE_IN_Q30, diffRatioQ ), dfRatioQ16 ), 1 ); // Q30 @@ -2630,9 +2628,9 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( * then later retrieved for further use in encoding. */ FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) { - hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_diff; - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = dirRatio1Q; + hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_diff; // Q0 move16(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = dirRatio1Q; // Q30 move32(); } nbits_diff[0] = add( nbits_diff[0], MASA_BITS_ER ); @@ -2641,7 +2639,7 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( IF( hodirac_flag ) { Word16 tmp; /* Q14 */ - index_dirRatio2Inv = usquant_fx( extract_h( dirRatio2Q ), &tmp, 0, shr( div_s( 1, ( DIRAC_DIFFUSE_LEVELS - 1 ) ), 2 ) /* Q13 */, DIRAC_DIFFUSE_LEVELS ); + index_dirRatio2Inv = usquant_fx( extract_h( dirRatio2Q ), &tmp /* Q14 */, 0, shr( div_s( 1, sub( DIRAC_DIFFUSE_LEVELS, 1 ) ), 2 ), DIRAC_DIFFUSE_LEVELS ); } ELSE { @@ -2650,9 +2648,9 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) { - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = dfRatio_index; - hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[k] = dirRatio2Q; + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index[k] = dfRatio_index; // Q0 move16(); + hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_fx[k] = dirRatio2Q; // Q30 move32(); } nbits_diff[1] = add( nbits_diff[1], dfRatio_bits ); @@ -2667,8 +2665,8 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) { hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv_mod; - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv_mod]; move16(); + hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv_mod]; move16(); } needed_bits[0] = add( needed_bits[0], imult1616( hQMetaData->q_direction[0].cfg.nblocks, bits_direction_masa[index_dirRatio1Inv_mod] ) ); @@ -2677,8 +2675,8 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( FOR( k = 0; k < hQMetaData->q_direction[1].cfg.nblocks; k++ ) { hQMetaData->q_direction[1].band_data[dir2band].energy_ratio_index_mod[k] = index_dirRatio2Inv_mod; - hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[k] = bits_direction_masa[index_dirRatio2Inv_mod]; move16(); + hQMetaData->q_direction[1].band_data[dir2band].bits_sph_idx[k] = bits_direction_masa[index_dirRatio2Inv_mod]; move16(); } needed_bits[1] = add( needed_bits[1], imult1616( hQMetaData->q_direction[1].cfg.nblocks, bits_direction_masa[index_dirRatio2Inv_mod] ) ); @@ -2693,12 +2691,12 @@ static void ivas_qmetadata_quantize_diffuseness_nrg_ratios_fx( FOR( k = 0; k < hQMetaData->q_direction[0].cfg.nblocks; k++ ) { hQMetaData->q_direction[0].band_data[j].energy_ratio_index[k] = index_dirRatio1Inv; - hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv; - hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = L_sub( ONE_IN_Q30, diffuseness_reconstructions_fx[index_dirRatio1Inv] ); - hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv]; move16(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_index_mod[k] = index_dirRatio1Inv; move16(); + hQMetaData->q_direction[0].band_data[j].energy_ratio_fx[k] = L_sub( ONE_IN_Q30, diffuseness_reconstructions_fx[index_dirRatio1Inv] ); // Q30 move32(); + hQMetaData->q_direction[0].band_data[j].bits_sph_idx[k] = bits_direction_masa[index_dirRatio1Inv]; move16(); } diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c index 2ba28fcf617aaa368459bc7cb2df765cd840c739..40223d1bd3c1de3e788226131393398767826b22 100644 --- a/lib_enc/ivas_tcx_core_enc.c +++ b/lib_enc/ivas_tcx_core_enc.c @@ -474,9 +474,6 @@ void stereo_tcx_core_enc( for ( int j = 0; j < M; j++ ) { st->lsf_old_fx[j] = (Word16) ( st->lsf_old[j] * 2.56f ); - st->lsf_adaptive_mean_fx[j] = (Word16) ( st->lsf_adaptive_mean[j] * 2.56f ); - st->mem_MA_fx[j] = (Word16) ( st->mem_MA[j] * 2.56f ); - st->mem_AR_fx[j] = (Word16) ( st->mem_AR[j] * 2.56f ); } floatToFixed_arr( st->lspold_enc, st->lspold_enc_fx, Q15, M ); diff --git a/lib_enc/rst_enc.c b/lib_enc/rst_enc.c index 0e8ec0a3e0d716e61dd4c44a54fedff0eb685141..66ea72cc9f4536dcd63b40d0c58ba49497612a3d 100644 --- a/lib_enc/rst_enc.c +++ b/lib_enc/rst_enc.c @@ -40,6 +40,9 @@ #include "rom_com.h" #include "prot.h" #include "wmc_auto.h" +#ifdef IVAS_FLOAT_FIXED +#include "prot_fx.h" +#endif /*-------------------------------------------------------------------* * CNG_reset_enc() @@ -54,11 +57,20 @@ void CNG_reset_enc( int16_t VBR_cng_reset_flag ) { init_gp_clip( st->clip_var ); +#ifndef IVAS_FLOAT_FIXED mvr2r( UVWB_Ave, st->mem_AR, M ); set_f( st->mem_MA, 0, M ); +#else + Copy( UVWB_Ave_fx, st->mem_AR_fx, M ); + set16_fx( st->mem_MA_fx, 0, M ); +#endif st->hLPDmem->mem_w0_flt = 0.0f; st->hLPDmem->tilt_code_flt = 0.0f; +#ifndef IVAS_FLOAT_FIXED st->hLPDmem->gc_threshold_flt = 0.0f; +#else + st->hLPDmem->gc_threshold = 0; +#endif if ( VBR_cng_reset_flag ) { diff --git a/lib_enc/stat_enc.h b/lib_enc/stat_enc.h index 500dd1307ee3b1f573a0c5360591a9df90d2b7dc..87076409ec83ee623352ed9bcb6f0badca58760c 100644 --- a/lib_enc/stat_enc.h +++ b/lib_enc/stat_enc.h @@ -457,11 +457,14 @@ typedef struct td_cng_enc_structure #else Word16 CNG_att_fx; /* CNG and DTX - attenuation factor for CNG, in dB Q7 */ #endif - int16_t ho_16k_lsp[HO_HIST_SIZE]; /* CNG and DTX - 16k LSPs flags */ - int16_t act_cnt2; /* CNG and DTX - counter of active frames for CNG_mode switching */ - float ho_lsp_circ2[HO_HIST_SIZE * M]; /* CNG and DTX - second buffer of LSPs */ - Word16 ho_lsp_circ2_fx[HO_HIST_SIZE * M]; /* CNG and DTX - second buffer of LSPs */ - int16_t num_ho; /* CNG and DTX - number of selected hangover frames */ + int16_t ho_16k_lsp[HO_HIST_SIZE]; /* CNG and DTX - 16k LSPs flags */ + int16_t act_cnt2; /* CNG and DTX - counter of active frames for CNG_mode switching */ +#ifndef IVAS_FLOAT_FIXED + float ho_lsp_circ2[HO_HIST_SIZE * M]; /* CNG and DTX - second buffer of LSPs */ +#else + Word16 ho_lsp_circ2_fx[HO_HIST_SIZE * M]; /* CNG and DTX - second buffer of LSPs Q15 */ +#endif + int16_t num_ho; /* CNG and DTX - number of selected hangover frames */ #ifndef IVAS_FLOAT_FIXED float old_env[NUM_ENV_CNG]; float lp_env[NUM_ENV_CNG]; @@ -1151,11 +1154,14 @@ typedef struct lpd_state_structure Word16 e_mem_syn; float tilt_code_flt; - float gc_threshold_flt; /* Noise enhancer - threshold for gain_code */ + Word16 tilt_code; /* Q15 */ +#ifndef IVAS_FLOAT_FIXED + float gc_threshold_flt; /* Noise enhancer - threshold for gain_code */ +#else + Word32 gc_threshold; /* Noise enhancer - threshold for gain_code. exponent = 15, 15Q16 */ +#endif float dispMem_flt[8]; /* Noise enhancer - phase dispersion algorithm memory */ Word32 dispMem[8]; /* Noise enhancer - phase dispersion algorithm memory */ - Word16 tilt_code; /* Q15 */ - Word32 gc_threshold; /* exponent = 15, 15Q16 */ struct dispMem_fx dm_fx; /* Noise enhancer - phase dispersion algorithm memory */ } LPD_state, *LPD_state_HANDLE; @@ -1246,11 +1252,11 @@ typedef struct hq_enc_structure int16_t prev_stab_hfe2; #ifndef IVAS_FLOAT_FIXED float prev_ni_ratio; + float prev_En_sb[NB_SWB_SUBBANDS]; #else Word16 prev_ni_ratio_fx; /* Q15 */ + Word16 prev_En_sb_fx[NB_SWB_SUBBANDS]; /* QsEn(4) */ #endif - float prev_En_sb[NB_SWB_SUBBANDS]; - Word16 prev_En_sb_fx[NB_SWB_SUBBANDS]; /* QsEn(4) */ int16_t last_bitalloc_max_band[2]; #ifndef IVAS_FLOAT_FIXED @@ -1463,15 +1469,12 @@ typedef struct td_bwe_enc_structure #ifndef IVAS_FLOAT_FIXED float prev_lsp_shb[LPC_SHB_ORDER]; -#else - Word16 prev_lsp_shb_fx[LPC_SHB_ORDER]; /* Q15 */ -#endif float state_ana_filt_shb[2 * ALLPASSSECTIONS_STEEP + 1]; /* states for the analysis filters */ - Word16 state_ana_filt_shb_fx[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; -#ifndef IVAS_FLOAT_FIXED float cldfbHBLT_flt; #else - Word16 cldfbHBLT; /* Q13 */ + Word16 prev_lsp_shb_fx[LPC_SHB_ORDER]; /* Q15 */ + Word16 state_ana_filt_shb_fx[( 2 * ALLPASSSECTIONS_STEEP + 1 )]; /* states for the analysis filters */ + Word16 cldfbHBLT; /* Q13 */ #endif /* states for the filters used in generating SHB excitation from WB excitation*/ float mem_csfilt[2]; @@ -1486,8 +1489,8 @@ typedef struct td_bwe_enc_structure float prev_enr_EnvSHBres; /* energy of the residual SHB envelope from the previous frame */ float prev_shb_env_tilt; /* tilt of the residual SHB envelope from the previous frame */ #else - Word16 old_mean_EnvSHBres_fx; /* energy of the last subframe of the SHB residual signal from previous frame Q15 */ - Word32 prev_enr_EnvSHBres_fx; /* energy of the residual SHB envelope from the previous frame Q(31 - prev_enr_EnvSHBres_e) */ + Word16 old_mean_EnvSHBres_fx; /* energy of the last subframe of the SHB residual signal from previous frame Q15 */ + Word32 prev_enr_EnvSHBres_fx; /* energy of the residual SHB envelope from the previous frame Q(31 - prev_enr_EnvSHBres_e) */ Word16 prev_enr_EnvSHBres_e; Word16 prev_shb_env_tilt_fx; /* tilt of the residual SHB envelope from the previous frame Q(prev_shb_env_tilt_q) */ Word16 prev_shb_env_tilt_q; @@ -2105,8 +2108,13 @@ typedef struct enc_core_structure float mem_wsp; /* weighted signal vector memory */ float mem_decim2[3]; /* weighted signal decimation filter memory */ float clip_var[6]; /* pitch gain clipping memory */ - float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ - float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) */ +#ifndef IVAS_FLOAT_FIXED + float mem_AR[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ + float mem_MA[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) */ +#else + Word16 mem_AR_fx[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) Qlog2(2.56) */ + Word16 mem_MA_fx[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) Qlog2(2.56) */ +#endif // Word16 pstreaklen_fx; /* LSF quantizer */ Word32 offset_scale1_fx[MAX_NO_MODES + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure 1st 8-dim subvector*/ Word32 offset_scale2_fx[MAX_NO_MODES + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure 2nd 8-dim subvector*/ @@ -2128,34 +2136,41 @@ typedef struct enc_core_structure Word16 clip_var_fx[6]; Word16 mem_deemph_fx; /* deemphasis filter memory */ Word32 mem_hp20_in_fx[5]; /* HP filter memory for AMR-WB IO */ - Word16 mem_AR_fx[M]; /* AR memory of LSF quantizer (past quantized LSFs without mean) */ - Word16 mem_MA_fx[M]; /* MA memory of LSF quantizer (past quantized residual) (used also in AMR-WB IO mode) */ Word16 mCb1_fx; /* LSF quantizer - counter of stationary frames after a transition frame */ int16_t GSC_noisy_speech; /* AC mode (GSC) - flag to indicate GSC on SWB noisy speech */ int16_t GSC_IVAS_mode; GSC_ENC_HANDLE hGSCEnc; - int16_t Last_pulse_pos; /* FEC - last position of the first glottal pulse in the frame */ - float lsfoldbfi0[M]; /* FEC - LSF vector of the previous frame */ - float lsfoldbfi1[M]; /* FEC - LSF vector of the past previous frame */ - float lsf_adaptive_mean[M]; /* FEC - adaptive mean LSF vector for FEC */ - Word16 lsfoldbfi0_fx[M]; /* FEC - LSF vector of the previous frame */ - Word16 lsfoldbfi1_fx[M]; /* FEC - LSF vector of the past previous frame */ - Word16 lsf_adaptive_mean_fx[M]; /* FEC - adaptive mean LSF vector for FEC */ - int16_t next_force_safety_net; /* FEC - flag to force safety net in next frame */ + int16_t Last_pulse_pos; /* FEC - last position of the first glottal pulse in the frame */ +#ifndef IVAS_FLOAT_FIXED + float lsfoldbfi0[M]; /* FEC - LSF vector of the previous frame */ + float lsfoldbfi1[M]; /* FEC - LSF vector of the past previous frame */ + float lsf_adaptive_mean[M]; /* FEC - adaptive mean LSF vector for FEC */ +#else + Word16 lsfoldbfi0_fx[M]; /* FEC - LSF vector of the previous frame Qlog2(2.56) */ + Word16 lsfoldbfi1_fx[M]; /* FEC - LSF vector of the past previous frame Qlog2(2.56) */ + Word16 lsf_adaptive_mean_fx[M]; /* FEC - adaptive mean LSF vector for FEC Qlog2(2.56) */ +#endif + int16_t next_force_safety_net; /* FEC - flag to force safety net in next frame */ // Word16 next_force_safety_net_fx; /* FEC - flag to force safety net in next frame */ - int16_t uv_count; /* Stationary noise UV modification - unvoiced counter */ - int16_t act_count; /* Stationary noise UV modification - activation counter */ - float ge_sm; /* Stationary noise UV modification - smoothed excitation gain */ - float lspold_s[M]; /* Stationary noise UV modification - old LSP vector */ - Word32 ge_sm_fx; /* Stationary noise UV modification - smoothed excitation gain */ - Word16 lspold_s_fx[M]; /*Q15*/ /* Stationary noise UV modification - old LSP vector */ - int16_t noimix_seed; /* Stationary noise UV modification - mixture seed */ - float min_alpha; /* Stationary noise UV modification - minimum alpha */ - float exc_pe; /* Stationary noise UV modification - memory of the preemphasis filter */ - Word16 min_alpha_fx; /*Q15*/ /* Stationary noise UV modification - minimum alpha */ - Word16 exc_pe_fx; /* Stationary noise UV modification - memory of the preemphasis filter */ + int16_t uv_count; /* Stationary noise UV modification - unvoiced counter */ + int16_t act_count; /* Stationary noise UV modification - activation counter */ +#ifndef IVAS_FLOAT_FIXED + float ge_sm; /* Stationary noise UV modification - smoothed excitation gain */ + float lspold_s[M]; /* Stationary noise UV modification - old LSP vector */ +#else + Word32 ge_sm_fx; /* Stationary noise UV modification - smoothed excitation gain Q(GE_SHIFT) */ + Word16 lspold_s_fx[M]; /* Stationary noise UV modification - old LSP vector Q15 */ +#endif + int16_t noimix_seed; /* Stationary noise UV modification - mixture seed */ +#ifndef IVAS_FLOAT_FIXED + float min_alpha; /* Stationary noise UV modification - minimum alpha */ +#else + Word16 min_alpha_fx; /* Stationary noise UV modification - minimum alpha Q15 */ +#endif + float exc_pe; /* Stationary noise UV modification - memory of the preemphasis filter */ + Word16 exc_pe_fx; /* Stationary noise UV modification - memory of the preemphasis filter */ int16_t coder_type_raw; /* raw coder_type (before UNVOICED is lost) */ int16_t last_coder_type_raw; /* raw last_coder_type (coming from the sigal classification) */ @@ -2169,25 +2184,33 @@ typedef struct enc_core_structure Word16 old_corr_fx; /* normalized correlation in previous frame (mean value) Q15 */ int16_t old_pitch; /* previous pitch for open-loop pitch search */ int16_t delta_pit; /* open-loop pitch extrapolation correction */ - float ee_old; /* previous frame low/high frequency energy ratio */ - - Word32 ee_old_fx; - int16_t min_band; /* minimum critical band of useful bandwidth */ - int16_t max_band; /* maximum critical band of useful bandwidth */ - int16_t tc_cnt; /* TC frame counter */ - int16_t audio_frame_cnt; /* Counter of relative presence of audio frames */ - float old_dE1; /* Maximum energy increase in previous frame */ - Word32 old_dE1_fx; /* Maximum energy increase in previous frame */ - int16_t old_ind_deltaMax; /* Index of the sub-subframe of maximum energy in previous frame */ - float old_enr_ssf[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ - Word32 old_enr_ssf_fx[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ - int16_t spike_hyst; /* Hysteresis to prevent UC after sharp energy spike */ - int16_t last_harm_flag_acelp; /* harmonicity flag for ACELP @32kbps rate */ - float old_Aq_12_8[M + 1]; /* old Aq[] for core switching */ - float old_Es_pred; /* old Es_pred for core switching */ - Word16 old_Aq_12_8_fx[M + 1]; /* Q12 old Aq[] for core switching */ - Word16 old_Es_pred_fx; /* Q8 old Es_pred for core switching */ - Word16 music_hysteresis_fx; /* Counter of frames after AUDIO coding mode to prevent UC */ +#ifndef IVAS_FLOAT_FIXED + float ee_old; /* previous frame low/high frequency energy ratio */ +#else + Word32 ee_old_fx; /* previous frame low/high frequency energy ratio Q6 */ +#endif + int16_t min_band; /* minimum critical band of useful bandwidth */ + int16_t max_band; /* maximum critical band of useful bandwidth */ + int16_t tc_cnt; /* TC frame counter */ + int16_t audio_frame_cnt; /* Counter of relative presence of audio frames */ +#ifndef IVAS_FLOAT_FIXED + float old_dE1; /* Maximum energy increase in previous frame */ +#else + Word32 old_dE1_fx; /* Maximum energy increase in previous frame Q13 */ +#endif + int16_t old_ind_deltaMax; /* Index of the sub-subframe of maximum energy in previous frame */ +#ifndef IVAS_FLOAT_FIXED + float old_enr_ssf[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ +#else + Word32 old_enr_ssf_fx[2 * NB_SSF]; /* Maxima of energies per sub-subframes of previous frame */ +#endif + int16_t spike_hyst; /* Hysteresis to prevent UC after sharp energy spike */ + int16_t last_harm_flag_acelp; /* harmonicity flag for ACELP @32kbps rate */ + float old_Aq_12_8[M + 1]; /* old Aq[] for core switching */ + float old_Es_pred; /* old Es_pred for core switching */ + Word16 old_Aq_12_8_fx[M + 1]; /* Q12 old Aq[] for core switching */ + Word16 old_Es_pred_fx; /* Q8 old Es_pred for core switching */ + Word16 music_hysteresis_fx; /* Counter of frames after AUDIO coding mode to prevent UC */ Word16 last_vad_spa_fx; Word16 last_L_frame; /* ACELP@16kHz - last L_frame value */ diff --git a/lib_enc/swb_tbe_enc.c b/lib_enc/swb_tbe_enc.c index 37c799639bcba53d30010c6830c6d58c3b5e1053..dad834fcfda2e70a13a47286b87da6032df70540 100644 --- a/lib_enc/swb_tbe_enc.c +++ b/lib_enc/swb_tbe_enc.c @@ -99,19 +99,19 @@ void InitSWBencBuffer( set_f( hBWE_TD->old_bwe_exc_extended, 0.0f, NL_BUFF_OFFSET ); #ifndef IVAS_FLOAT_FIXED hBWE_TD->bwe_non_lin_prev_scale = 0; -#else - hBWE_TD->bwe_non_lin_prev_scale_fx = 0; -#endif set_f( hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); -#ifndef IVAS_FLOAT_FIXED set_f( hBWE_TD->elliptic_bpf_2_48k_mem[0], 0.0f, 4 ); set_f( hBWE_TD->elliptic_bpf_2_48k_mem[1], 0.0f, 4 ); set_f( hBWE_TD->elliptic_bpf_2_48k_mem[2], 0.0f, 4 ); set_f( hBWE_TD->elliptic_bpf_2_48k_mem[3], 0.0f, 4 ); hBWE_TD->prev_fb_energy = 0.0f; #else + hBWE_TD->bwe_non_lin_prev_scale_fx = 0; + + set16_fx( hBWE_TD->state_ana_filt_shb_fx, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); + set32_fx( hBWE_TD->elliptic_bpf_2_48k_mem_fx[0], 0, 4 ); set32_fx( hBWE_TD->elliptic_bpf_2_48k_mem_fx[1], 0, 4 ); set32_fx( hBWE_TD->elliptic_bpf_2_48k_mem_fx[2], 0, 4 ); @@ -2976,7 +2976,11 @@ void TBEreset_enc( } else if ( bwidth == SWB || bwidth == FB ) { +#ifdef IVAS_FLOAT_FIXED + set16_fx( hBWE_TD->state_ana_filt_shb_fx, 0, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); +#else set_f( hBWE_TD->state_ana_filt_shb, 0.0f, ( 2 * ALLPASSSECTIONS_STEEP + 1 ) ); +#endif swb_tbe_reset( hBWE_TD->mem_csfilt, hBWE_TD->mem_genSHBexc_filt_down_shb, hBWE_TD->state_lpc_syn, hBWE_TD->syn_overlap, hBWE_TD->state_syn_shbexc, &( hBWE_TD->tbe_demph ), &( hBWE_TD->tbe_premph ), hBWE_TD->mem_stp_swb, &( hBWE_TD->gain_prec_swb ) );