diff --git a/lib_com/cldfb.c b/lib_com/cldfb.c index 5b6e77394147ac6afba2255cf9548de53e585cbc..f5efb77d27dec18fdd9713d4d40e00a5127f3369 100644 --- a/lib_com/cldfb.c +++ b/lib_com/cldfb.c @@ -325,7 +325,7 @@ void cldfbAnalysis_ivas_fx( rot_vctr_im_fx = h_cldfb->rot_vec_ana_im_fx; ptr_pf_fx = h_cldfb->p_filter; - ptr_pf_sf = h_cldfb->p_filter_sf; + ptr_pf_sf = h_cldfb->p_filter_sf; // Q14 move16(); FOR( i = 0; i < no_col; i++ ) @@ -766,7 +766,7 @@ void cldfbAnalysis_ts_fx( rot_vctr_delay_im_fx = h_cldfb->rot_vec_ana_delay_im_fx; // q = 31 ptr_pf_fx = h_cldfb->p_filter; - ptr_pf_sf = h_cldfb->p_filter_sf; + ptr_pf_sf = h_cldfb->p_filter_sf; // Q14 move16(); FOR( i = 0; i < no_col; i++ ) @@ -1046,7 +1046,7 @@ void cldfbAnalysis_ts_fx_fixed_q( rot_vctr_delay_im_fx = h_cldfb->rot_vec_ana_delay_im_fx; // q = 31 ptr_pf_fx = h_cldfb->p_filter; - ptr_pf_sf = h_cldfb->p_filter_sf; + ptr_pf_sf = h_cldfb->p_filter_sf; // Q14 move16(); FOR( i = 0; i < no_col; i++ ) @@ -1477,7 +1477,7 @@ void cldfbSynthesis_ivas_fx( Copy32( h_cldfb->cldfb_state_fx, synthesisBuffer_fx + i_mult( M1, no_col ), h_cldfb->p_filter_length ); p_filter = h_cldfb->p_filter; - p_filter_sf = h_cldfb->p_filter_sf; + p_filter_sf = h_cldfb->p_filter_sf; // Q14 move16(); ptr_time_out_fx = timeOut_fx; @@ -1823,7 +1823,9 @@ ivas_error openCldfb_ivas_enc( hs->prototype = prototype; configureCldfb_ivas_enc( hs, sampling_rate ); +#ifndef IVAS_FLOAT_FIXED hs->memory_flt = NULL; +#endif hs->memory_length = 0; if ( type == CLDFB_ANALYSIS ) @@ -1843,11 +1845,13 @@ ivas_error openCldfb_ivas_enc( #endif } +#ifndef IVAS_FLOAT_FIXED if ( ( hs->cldfb_state = (float *) malloc( buf_len * sizeof( float ) ) ) == NULL ) { return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Cannot allocate memory for CLDFB" ); } set_f( hs->cldfb_state, 0.0f, buf_len ); +#endif #ifdef IVAS_FLOAT_FIXED if ( ( hs->cldfb_state_fx = (Word32 *) malloc( buf_len * sizeof( Word32 ) ) ) == NULL ) { @@ -1858,6 +1862,8 @@ ivas_error openCldfb_ivas_enc( hs->cldfb_size = buf_len; /*for having original size at intermediatery conversion, will be removed on removing conversion*/ move16(); set32_fx( hs->cldfb_state_fx, 0, buf_len ); + hs->Q_cldfb_state = 0; + move16(); set16_fx( hs->FilterStates, 0, i_mult( 9 + 16, hs->no_channels ) ); set16_fx( hs->FilterStates_e, 0, sizeof( hs->FilterStates_e ) / sizeof( hs->FilterStates_e[0] ) ); #endif // IVAS_FLOAT_FIXED @@ -2101,11 +2107,12 @@ void deleteCldfb_ivas( return; } +#ifndef IVAS_FLOAT_FIXED IF( hs->cldfb_state ) { free( hs->cldfb_state ); } -#ifdef IVAS_FLOAT_FIXED +#else IF( hs->cldfb_state_fx ) { free( hs->cldfb_state_fx ); @@ -2176,7 +2183,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17036; + hs->p_filter_sf = (Word16) 17036; // Q14 hs->p_filter = CLDFB80_10_fx; hs->scale = CLDFB80_10_SCALE_FX_Q8; } @@ -2188,7 +2195,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->p_filter = LDQMF_10_fx; hs->scale = LDQMF_10_SCALE_FX_Q8; } @@ -2207,7 +2214,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_16_fx; hs->scale = CLDFB80_16_SCALE_FX_Q8; } @@ -2219,7 +2226,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->p_filter = LDQMF_16_fx; hs->scale = LDQMF_16_SCALE_FX_Q8; } @@ -2238,7 +2245,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17050; + hs->p_filter_sf = (Word16) 17050; // Q14 hs->p_filter = CLDFB80_20_fx; hs->scale = CLDFB80_20_SCALE_FX_Q8; } @@ -2250,7 +2257,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15390; + hs->p_filter_sf = (Word16) 15390; // Q14 hs->p_filter = LDQMF_20_fx; hs->scale = LDQMF_20_SCALE_FX_Q8; } @@ -2269,7 +2276,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_30_fx; hs->scale = CLDFB80_30_SCALE_FX_Q8; } @@ -2281,7 +2288,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->p_filter = LDQMF_30_fx; hs->scale = LDQMF_30_SCALE_FX_Q8; } @@ -2300,7 +2307,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17050; + hs->p_filter_sf = (Word16) 17050; // Q14 hs->p_filter = CLDFB80_32_fx; hs->scale = CLDFB80_32_SCALE_FX_Q8; } @@ -2312,7 +2319,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15392; + hs->p_filter_sf = (Word16) 15392; // Q14 hs->p_filter = LDQMF_32_fx; hs->scale = LDQMF_32_SCALE_FX_Q8; } @@ -2331,7 +2338,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_40_fx; hs->scale = CLDFB80_40_SCALE_FX_Q8; } @@ -2343,7 +2350,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; + hs->p_filter_sf = (Word16) 15391; // Q14 hs->p_filter = LDQMF_40_fx; hs->scale = LDQMF_40_SCALE_FX_Q8; } @@ -2362,7 +2369,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_60_fx; hs->scale = CLDFB80_60_SCALE_FX_Q8; } @@ -2374,7 +2381,7 @@ static void cldfb_init_proto_and_twiddles( hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; + hs->p_filter_sf = (Word16) 15391; // Q14 hs->p_filter = LDQMF_60_fx; hs->scale = LDQMF_60_SCALE_FX_Q8; } @@ -2779,11 +2786,12 @@ static void cldfb_init_proto_and_twiddles_enc( switch ( hs->no_channels ) { case 10: +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_re = rot_vec_ana_re_L10; hs->rot_vec_ana_im = rot_vec_ana_im_L10; hs->rot_vec_syn_re = rot_vec_syn_re_L10; hs->rot_vec_syn_im = rot_vec_syn_im_L10; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L10_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L10_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L10_fx; @@ -2803,40 +2811,44 @@ static void cldfb_init_proto_and_twiddles_enc( #endif if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) { - hs->p_filter_flt = CLDFB80_10_flt; - hs->scale_flt = CLDFB80_10_SCALE; hs->ds = 10; hs->da = 10; + hs->scale_flt = CLDFB80_10_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = CLDFB80_10_flt; hs->rot_vec_ana_delay_re = NULL; hs->rot_vec_ana_delay_im = NULL; hs->rot_vec_syn_delay_re = NULL; hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17036; + hs->p_filter_sf = (Word16) 17036; // Q14 hs->scale = cldfb_scale_2_5ms[0]; hs->p_filter = CLDFB80_10_fx; #endif } else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) { +#ifndef IVAS_FLOAT_FIXED hs->p_filter_flt = LDQMF_10; +#endif hs->scale_flt = LDQMF_10_SCALE; hs->ds = 40; hs->da = -20; +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->p_filter = LDQMF_10_fx; hs->scale = cldfb_scale_5_0ms[0]; #endif @@ -2844,11 +2856,12 @@ static void cldfb_init_proto_and_twiddles_enc( break; case 16: +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_re = rot_vec_ana_re_L16; hs->rot_vec_ana_im = rot_vec_ana_im_L16; hs->rot_vec_syn_re = rot_vec_syn_re_L16; hs->rot_vec_syn_im = rot_vec_syn_im_L16; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L16_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L16_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L16_fx; @@ -2862,40 +2875,44 @@ static void cldfb_init_proto_and_twiddles_enc( #endif if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) { +#ifndef IVAS_FLOAT_FIXED hs->p_filter_flt = CLDFB80_16_flt; +#endif hs->scale_flt = CLDFB80_16_SCALE; hs->ds = 20; hs->da = 20; +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_delay_re = NULL; hs->rot_vec_ana_delay_im = NULL; hs->rot_vec_syn_delay_re = NULL; hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_16_fx; hs->scale = cldfb_scale_2_5ms[1]; #endif } else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) { - hs->p_filter_flt = LDQMF_16; - hs->scale_flt = LDQMF_16_SCALE; hs->ds = 80; hs->da = -40; + hs->scale_flt = LDQMF_16_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = LDQMF_16; hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->p_filter = LDQMF_16_fx; hs->scale = cldfb_scale_5_0ms[1]; #endif @@ -2903,11 +2920,12 @@ static void cldfb_init_proto_and_twiddles_enc( break; case 20: +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_re = rot_vec_ana_re_L20; hs->rot_vec_ana_im = rot_vec_ana_im_L20; hs->rot_vec_syn_re = rot_vec_syn_re_L20; hs->rot_vec_syn_im = rot_vec_syn_im_L20; -#ifdef IVAS_FLOAT_FIXED +#else hs->rRotVctr = rRotVectr_20; hs->iRotVctr = iRotVectr_20; hs->rot_vec_ana_re_fx = rot_vec_ana_re_L20_fx; @@ -2927,40 +2945,42 @@ static void cldfb_init_proto_and_twiddles_enc( #endif if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) { - hs->p_filter_flt = CLDFB80_20_flt; - hs->scale_flt = CLDFB80_20_SCALE; hs->ds = 20; hs->da = 20; + hs->scale_flt = CLDFB80_20_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = CLDFB80_20_flt; hs->rot_vec_ana_delay_re = NULL; hs->rot_vec_ana_delay_im = NULL; hs->rot_vec_syn_delay_re = NULL; hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17050; + hs->p_filter_sf = (Word16) 17050; // Q14 hs->p_filter = CLDFB80_20_fx; hs->scale = cldfb_scale_2_5ms[2]; #endif } else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) { - hs->p_filter_flt = LDQMF_20; - hs->scale_flt = LDQMF_20_SCALE; hs->ds = 80; hs->da = -40; + hs->scale_flt = LDQMF_20_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = LDQMF_20; hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15390; + hs->p_filter_sf = (Word16) 15390; // Q14 hs->p_filter = LDQMF_20_fx; hs->scale = cldfb_scale_5_0ms[2]; #endif @@ -2968,11 +2988,12 @@ static void cldfb_init_proto_and_twiddles_enc( break; case 30: +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_re = rot_vec_ana_re_L30; hs->rot_vec_ana_im = rot_vec_ana_im_L30; hs->rot_vec_syn_re = rot_vec_syn_re_L30; hs->rot_vec_syn_im = rot_vec_syn_im_L30; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L30_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L30_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L30_fx; @@ -2992,40 +3013,42 @@ static void cldfb_init_proto_and_twiddles_enc( #endif if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) { - hs->p_filter_flt = CLDFB80_30_flt; - hs->scale_flt = CLDFB80_30_SCALE; hs->ds = 30; hs->da = 30; + hs->scale_flt = CLDFB80_30_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = CLDFB80_30_flt; hs->rot_vec_ana_delay_re = NULL; hs->rot_vec_ana_delay_im = NULL; hs->rot_vec_syn_delay_re = NULL; hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->scale = cldfb_scale_2_5ms[6]; hs->p_filter = CLDFB80_30_fx; #endif } else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) { - hs->p_filter_flt = LDQMF_30; - hs->scale_flt = LDQMF_30_SCALE; hs->ds = 120; hs->da = -60; + hs->scale_flt = LDQMF_30_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = LDQMF_30; hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15388; + hs->p_filter_sf = (Word16) 15388; // Q14 hs->scale = cldfb_scale_5_0ms[6]; hs->p_filter = LDQMF_30_fx; #endif @@ -3033,11 +3056,12 @@ static void cldfb_init_proto_and_twiddles_enc( break; case 32: +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_re = rot_vec_ana_re_L32; hs->rot_vec_ana_im = rot_vec_ana_im_L32; hs->rot_vec_syn_re = rot_vec_syn_re_L32; hs->rot_vec_syn_im = rot_vec_syn_im_L32; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L32_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L32_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L32_fx; @@ -3051,40 +3075,42 @@ static void cldfb_init_proto_and_twiddles_enc( #endif if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) { - hs->p_filter_flt = CLDFB80_32_flt; - hs->scale_flt = CLDFB80_32_SCALE; hs->ds = 32; hs->da = 32; + hs->scale_flt = CLDFB80_32_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = CLDFB80_32_flt; hs->rot_vec_ana_delay_re = NULL; hs->rot_vec_ana_delay_im = NULL; hs->rot_vec_syn_delay_re = NULL; hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17050; + hs->p_filter_sf = (Word16) 17050; // Q14 hs->p_filter = CLDFB80_32_fx; hs->scale = cldfb_scale_2_5ms[3]; #endif } else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) { - hs->p_filter_flt = LDQMF_32; - hs->scale_flt = LDQMF_32_SCALE; hs->ds = 160; hs->da = -80; + hs->scale_flt = LDQMF_32_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = LDQMF_32; hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15392; + hs->p_filter_sf = (Word16) 15392; // Q14 hs->scale = cldfb_scale_5_0ms[3]; hs->p_filter = LDQMF_32_fx; #endif @@ -3092,11 +3118,12 @@ static void cldfb_init_proto_and_twiddles_enc( break; case 40: +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_re = rot_vec_ana_re_L40; hs->rot_vec_ana_im = rot_vec_ana_im_L40; hs->rot_vec_syn_re = rot_vec_syn_re_L40; hs->rot_vec_syn_im = rot_vec_syn_im_L40; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L40_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L40_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L40_fx; @@ -3116,40 +3143,42 @@ static void cldfb_init_proto_and_twiddles_enc( #endif if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) { - hs->p_filter_flt = CLDFB80_40_flt; - hs->scale_flt = CLDFB80_40_SCALE; hs->ds = 40; hs->da = 40; + hs->scale_flt = CLDFB80_40_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = CLDFB80_40_flt; hs->rot_vec_ana_delay_re = NULL; hs->rot_vec_ana_delay_im = NULL; hs->rot_vec_syn_delay_re = NULL; hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->scale = cldfb_scale_2_5ms[4]; hs->p_filter = CLDFB80_40_fx; #endif } else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) { - hs->p_filter_flt = LDQMF_40; - hs->scale_flt = LDQMF_40_SCALE; hs->ds = 160; hs->da = -80; + hs->scale_flt = LDQMF_40_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = LDQMF_40; hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; + hs->p_filter_sf = (Word16) 15391; // Q14 hs->p_filter = LDQMF_40_fx; hs->scale = cldfb_scale_5_0ms[4]; #endif @@ -3157,11 +3186,12 @@ static void cldfb_init_proto_and_twiddles_enc( break; case 60: +#ifndef IVAS_FLOAT_FIXED hs->rot_vec_ana_re = rot_vec_ana_re_L60; hs->rot_vec_ana_im = rot_vec_ana_im_L60; hs->rot_vec_syn_re = rot_vec_syn_re_L60; hs->rot_vec_syn_im = rot_vec_syn_im_L60; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_re_fx = rot_vec_ana_re_L60_fx; hs->rot_vec_ana_im_fx = rot_vec_ana_im_L60_fx; hs->rot_vec_syn_re_fx = rot_vec_syn_re_L60_fx; @@ -3181,40 +3211,42 @@ static void cldfb_init_proto_and_twiddles_enc( #endif if ( hs->prototype == CLDFB_PROTOTYPE_1_25MS ) { - hs->p_filter_flt = CLDFB80_60_flt; - hs->scale_flt = CLDFB80_60_SCALE; hs->ds = 60; hs->da = 60; + hs->scale_flt = CLDFB80_60_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = CLDFB80_60_flt; hs->rot_vec_ana_delay_re = NULL; hs->rot_vec_ana_delay_im = NULL; hs->rot_vec_syn_delay_re = NULL; hs->rot_vec_syn_delay_im = NULL; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = NULL; hs->rot_vec_ana_delay_im_fx = NULL; hs->rot_vec_syn_delay_re_fx = NULL; hs->rot_vec_syn_delay_im_fx = NULL; - hs->p_filter_sf = (Word16) 17051; + hs->p_filter_sf = (Word16) 17051; // Q14 hs->p_filter = CLDFB80_60_fx; hs->scale = cldfb_scale_2_5ms[5]; #endif } else if ( hs->prototype == CLDFB_PROTOTYPE_5_00MS ) { - hs->p_filter_flt = LDQMF_60; - hs->scale_flt = LDQMF_60_SCALE; hs->ds = 240; hs->da = -120; + hs->scale_flt = LDQMF_60_SCALE; +#ifndef IVAS_FLOAT_FIXED + hs->p_filter_flt = LDQMF_60; hs->rot_vec_ana_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_ana_delay_im = rot_vec_delay_im_LDQMF; hs->rot_vec_syn_delay_re = rot_vec_delay_re_LDQMF; hs->rot_vec_syn_delay_im = rot_vec_delay_im_LDQMF; -#ifdef IVAS_FLOAT_FIXED +#else hs->rot_vec_ana_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_ana_delay_im_fx = rot_vec_delay_im_LDQMF_fx; hs->rot_vec_syn_delay_re_fx = rot_vec_delay_re_LDQMF_fx; hs->rot_vec_syn_delay_im_fx = rot_vec_delay_im_LDQMF_fx; - hs->p_filter_sf = (Word16) 15391; + hs->p_filter_sf = (Word16) 15391; // Q14 hs->p_filter = LDQMF_60_fx; hs->scale = cldfb_scale_5_0ms[5]; #endif diff --git a/lib_com/rom_com.c b/lib_com/rom_com.c index 648280d1e8a51d2402a07f385c3bc252bc160966..e8143222dd1ce7e5f012d568b7a458de28f4d687 100644 --- a/lib_com/rom_com.c +++ b/lib_com/rom_com.c @@ -36764,42 +36764,42 @@ const Word16 qGains[2][1 << kTcxHmNumGainBits] = const struct TnsParameters tnsParametersIGF32kHz_LowBR[1] = { - { 600, 3, 1.85f, 0.075f, 4.4f, 237/*1.85f Q7*/, 2458/*0.075f Q15*/,563 /*4.4f Q7*/ } + { 600, 3, /*1.85f, 0.075f, 4.4f,*/ 237/*1.85f Q7*/, 2458/*0.075f Q15*/,563 /*4.4f Q7*/ } }; const struct TnsParameters tnsParameters32kHz[2] = { - { 4500, 3, 1.35f, 0.0300f, 1.0f ,173/*1.35f Q7*/, 983/*0.0300f Q15*/, 128/*1.0f Q7*/}, - { 600, 1, 1.75f, 0.0625f, 4.4f ,224/*1.75f Q7*/, 2048/*0.0625f Q15*/, 563 /*4.4f Q7*/ } + { 4500, 3, /*1.35f, 0.0300f, 1.0f ,*/ 173/*1.35f Q7*/, 983/*0.0300f Q15*/, 128/*1.0f Q7*/}, + { 600, 1, /*1.75f, 0.0625f, 4.4f ,*/ 224/*1.75f Q7*/, 2048/*0.0625f Q15*/, 563 /*4.4f Q7*/ } }; const struct TnsParameters tnsParameters32kHz_grouped[2] = { - { 8400, 3, 1.375f, 0.03125f, 1.0f , 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/ }, - { 800, 3, 1.375f, 0.03125f, 1.0f , 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/} + { 8400, 3, /*1.375f, 0.03125f, 1.0f ,*/ 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/ }, + { 800, 3, /*1.375f, 0.03125f, 1.0f ,*/ 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/} }; const struct TnsParameters tnsParameters16kHz[1] = { - { 600, 3, 1.5f, 0.05f, 4.4f, 192/*1.5f Q7*/, 1638/*0.05f Q15*/ ,563 /*4.4f Q7*/ } + { 600, 3, /*1.5f, 0.05f, 4.4f,*/ 192/*1.5f Q7*/, 1638/*0.05f Q15*/ ,563 /*4.4f Q7*/ } }; const struct TnsParameters tnsParameters16kHz_grouped[2] = { - { 4400, 3, 1.5f, 0.05f, 1.0f, 192/*1.5f Q7*/, 1638/*0.05f Q15*/ , 128/*1.0f Q7*/}, - { 800, 3, 1.5f, 0.05f, 1.0f, 192/*1.5f Q7*/, 1638/*0.05f Q15*/ , 128/*1.0f Q7*/} + { 4400, 3, /*1.5f, 0.05f, 1.0f,*/ 192/*1.5f Q7*/, 1638/*0.05f Q15*/ , 128/*1.0f Q7*/}, + { 800, 3, /*1.5f, 0.05f, 1.0f,*/ 192/*1.5f Q7*/, 1638/*0.05f Q15*/ , 128/*1.0f Q7*/} }; const struct TnsParameters tnsParameters48kHz_grouped[2] = { - { 10400, 3, 1.375f, 0.03125f, 1.0f, 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/}, - { 800, 3, 1.375f, 0.03125f, 1.0f, 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/ } + { 10400, 3, /*1.375f, 0.03125f, 1.0f,*/ 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/}, + { 800, 3, /*1.375f, 0.03125f, 1.0f,*/ 176/*1.375f Q7*/, 1024/*0.03125f Q15*/ , 128/*1.0f Q7*/ } }; const struct TnsParameters tnsParameters32kHz_Stereo[2]= { - { 4500, 3, 1.35f, 0.0300f, 1.0f ,173/*1.35f Q7*/, 983/*0.0300f Q15*/ , 128/*1.0f Q7*/}, - { 600, 3, 1.75f, 0.0625f, 4.4f ,224/*1.75f Q7*/, 2048/*0.0625f Q15*/ ,563 /*4.4f Q7*/ } + { 4500, 3, /*1.35f, 0.0300f, 1.0f ,*/ 173/*1.35f Q7*/, 983/*0.0300f Q15*/ , 128/*1.0f Q7*/}, + { 600, 3, /*1.75f, 0.0625f, 4.4f ,*/ 224/*1.75f Q7*/, 2048/*0.0625f Q15*/ ,563 /*4.4f Q7*/ } }; const float tnsAcfWindow[TNS_MAX_FILTER_ORDER] = diff --git a/lib_com/stat_com.h b/lib_com/stat_com.h index 97fec1041b63c30edac2df5942cd318cb13bd651..4cfcb8caf0f1547fd96e2ed17ba6e1510e15ac0f 100644 --- a/lib_com/stat_com.h +++ b/lib_com/stat_com.h @@ -662,14 +662,16 @@ typedef struct ParamsBitMap struct TnsParameters { /* Parameters for each TNS filter */ - int16_t startLineFrequency; /* Starting lower frequency of the TNS filter [20..16000] */ - int16_t nSubdivisions; /* Number of spectrum subdivisions in which the filter operates [1..8) */ + Word16 startLineFrequency; /* Starting lower frequency of the TNS filter [20..16000] */ + Word16 nSubdivisions; /* Number of spectrum subdivisions in which the filter operates [1..8) */ +#ifndef IVAS_FLOAT_FIXED float minPredictionGain_flt; /* Minimum prediction gain required to turn on the TNS filter */ float minAvgSqrCoef_flt; /* Minimum average square of coefficients required to turn on the TNS filter */ float minEnergyChange_flt; /* Minimum energy change required to turn on the TNS filter */ - Word16 minPredictionGain; /* Minimum prediction gain required to turn on the TNS filter. Exponent = PRED_GAIN_E */ - Word16 minAvgSqrCoef; /* Minimum average square of coefficients required to turn on the TNS filter. Exponent = 0 */ - Word16 minEnergyChange; /* Minimum energy change required to turn on the TNS filter. Exponent = 8 */ +#endif + Word16 minPredictionGain; /* Minimum prediction gain required to turn on the TNS filter. Exponent = PRED_GAIN_E */ + Word16 minAvgSqrCoef; /* Minimum average square of coefficients required to turn on the TNS filter. Exponent = 0 */ + Word16 minEnergyChange; /* Minimum energy change required to turn on the TNS filter. Exponent = 8 */ }; /**********************************************/ @@ -713,31 +715,32 @@ typedef struct typedef struct cldfb_filter_bank_struct { - int16_t no_channels; - int16_t no_col; - int16_t p_filter_length; + Word16 no_channels; + Word16 no_col; + Word16 p_filter_length; Word16 lsb; /*!< Top of low subbands */ Word16 usb; /*!< Top of high subbands */ Word16 zeros; /*!< number of zeros in filter coefficients */ UWord16 flags; /*!< flags */ CLDFB_TYPE type; - int16_t ds; /* delay synthesis */ - int16_t da; /* delay analysis */ + Word16 ds; /* delay synthesis */ + Word16 da; /* delay analysis */ CLDFB_PROTOTYPE prototype; - +#ifndef IVAS_FLOAT_FIXED const float *p_filter_flt; +#endif const Word16 *p_filter; /*!< Pointer to filter coefficients */ Word16 p_filter_sf; /* rotation vectors */ +#ifndef IVAS_FLOAT_FIXED const float *rot_vec_ana_re; const float *rot_vec_ana_im; const float *rot_vec_syn_re; const float *rot_vec_syn_im; - -#ifdef IVAS_FLOAT_FIXED +#else const Word32 *rot_vec_syn_re_fx; const Word32 *rot_vec_syn_im_fx; @@ -745,12 +748,12 @@ typedef struct cldfb_filter_bank_struct const Word32 *rot_vec_syn_delay_im_fx; #endif /* rotation vectors for delay */ +#ifndef IVAS_FLOAT_FIXED const float *rot_vec_ana_delay_re; const float *rot_vec_ana_delay_im; const float *rot_vec_syn_delay_re; const float *rot_vec_syn_delay_im; - -#ifdef IVAS_FLOAT_FIXED +#else const Word32 *rot_vec_ana_re_fx; const Word32 *rot_vec_ana_im_fx; @@ -774,20 +777,20 @@ typedef struct cldfb_filter_bank_struct /* memory helper states */ +#ifndef IVAS_FLOAT_FIXED float *memory_flt; +#endif Word16 *memory; #ifdef IVAS_FLOAT_FIXED Word32 *memory32; /*because cldfb_state_fx is word32 which is used to assign values*/ #endif // IVAS_FLOAT_FIXED -#if 0 - //Can be deleted -#endif - uint16_t memory_length; + + UWord16 memory_length; /* main filter state */ +#ifndef IVAS_FLOAT_FIXED float *cldfb_state; - -#ifdef IVAS_FLOAT_FIXED +#else Word32 *cldfb_state_fx; Word16 cldfb_state_length; Word16 cldfb_size; @@ -795,8 +798,8 @@ typedef struct cldfb_filter_bank_struct #endif /* other parameters */ - int16_t bandsToZero; /* bands not synthesized */ - int16_t nab; /* number of active bands */ + Word16 bandsToZero; /* bands not synthesized */ + Word16 nab; /* number of active bands */ Word16 filtermode; float scale_flt; /* scaling of frequency domain */ diff --git a/lib_dec/ivas_mc_paramupmix_dec.c b/lib_dec/ivas_mc_paramupmix_dec.c index b0f8d25fec4fb9099794d9b9df3aef6afe4253c0..1e867d4dbda9aa38b500d26e4f49f8b606adf687 100644 --- a/lib_dec/ivas_mc_paramupmix_dec.c +++ b/lib_dec/ivas_mc_paramupmix_dec.c @@ -878,8 +878,8 @@ static void ivas_mc_paramupmix_dec_sf( scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->cldfb_size, Q5 - Q11 ); // Q11 -> Q5 st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q5; move16(); - cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, &( output_fx[ch][0] ), L_mult0( maxBand, st_ivas->hTcBuffer->subframe_nbslots[subframeIdx] ), st_ivas->cldfbSynDec[ch] ); // output_fx returned in Q5 - scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->cldfb_size, Q11 - Q5 ); // Q5 -> Q11 + cldfbSynthesis_ivas_fx( RealBuffer_fx, ImagBuffer_fx, &( output_fx[ch][0] ), imult1616( maxBand, st_ivas->hTcBuffer->subframe_nbslots[subframeIdx] ), st_ivas->cldfbSynDec[ch] ); // output_fx returned in Q5 + scale_sig32( st_ivas->cldfbSynDec[ch]->cldfb_state_fx, st_ivas->cldfbSynDec[ch]->cldfb_size, Q11 - Q5 ); // Q5 -> Q11 st_ivas->cldfbSynDec[ch]->Q_cldfb_state = Q11; move16(); } diff --git a/lib_enc/ivas_core_enc.c b/lib_enc/ivas_core_enc.c index 32ea924228c5c2ec33ed518148cd58a7ea8bd62b..d1a548d1da30e1b74f11bd80e3155c3c9662672d 100644 --- a/lib_enc/ivas_core_enc.c +++ b/lib_enc/ivas_core_enc.c @@ -915,13 +915,12 @@ ivas_error ivas_core_enc( #ifdef IVAS_FLOAT_FIXED_CONVERSIONS Word32 realBuffer_fx[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; Word32 imagBuffer_fx[CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; - // Word16 new_swb_speech_16_fx[L_FRAME48k] = { 0 }; Word16 use_shb32 = 0; Word16 q_realImagBuffer = Q_factor_arrL( (float *) &realBuffer[n][0][0], CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); q_realImagBuffer = s_min( q_realImagBuffer, Q_factor_arrL( (float *) &imagBuffer[n][0][0], CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ) ); + q_realImagBuffer = s_min( q_realImagBuffer, st->cldfbSynTd->Q_cldfb_state ); floatToFixed_arrL32( (float *) &realBuffer[n][0][0], (Word32 *) &realBuffer_fx[0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); floatToFixed_arrL32( (float *) &imagBuffer[n][0][0], (Word32 *) &imagBuffer_fx[0][0], q_realImagBuffer, CLDFB_NO_COL_MAX * CLDFB_NO_CHANNELS_MAX ); - floatToFixed_arrL32( (float *) &st->cldfbSynTd->cldfb_state[0], (Word32 *) &st->cldfbSynTd->cldfb_state_fx[0], q_realImagBuffer, st->cldfbSynTd->p_filter_length ); #if 0 floatToFixed_arr( &st->hSignalBuf->input_buff_flt[0], &st->hSignalBuf->input_buff[0], 0, L_FRAME48k + L_FRAME48k + NS2SA( 48000, DELAY_FIR_RESAMPL_NS ) ); @@ -962,7 +961,15 @@ ivas_error ivas_core_enc( } #endif #endif + + /* Scaling cldfb_state_fx */ + scale_sig32( st->cldfbSynTd->cldfb_state_fx, st->cldfbSynTd->p_filter_length, sub( q_realImagBuffer, st->cldfbSynTd->Q_cldfb_state ) ); + swb_pre_proc_ivas_fx( st, new_swb_speech_fx_16, new_swb_speech_fx, shb_speech_fx, shb_speech_fx_32, &use_shb32, realBuffer_fx, imagBuffer_fx, q_realImagBuffer, hCPE ); + + /* Re-scaling cldfb_state_fx */ + scale_sig32( st->cldfbSynTd->cldfb_state_fx, st->cldfbSynTd->p_filter_length, negate( sub( q_realImagBuffer, st->cldfbSynTd->Q_cldfb_state ) ) ); + #ifdef IVAS_FLOAT_FIXED_CONVERSIONS fixedToFloat_arr( (Word16 *) &st->hBWE_TD->old_speech_shb_fx[0], (float *) &st->hBWE_TD->old_speech_shb[0], 0, L_LOOK_16k + L_SUBFR16k ); fixedToFloat_arr( (Word16 *) &st->hBWE_FD->old_fdbwe_speech_fx[0], (float *) &st->hBWE_FD->old_fdbwe_speech[0], 0, L_FRAME48k ); @@ -971,7 +978,6 @@ ivas_error ivas_core_enc( { st->hBWE_FD->old_input[ii] = (Word16) st->hBWE_FD->old_input_fx[ii]; } - fixedToFloat_arrL32( (Word32 *) &st->cldfbSynTd->cldfb_state_fx[0], (float *) &st->cldfbSynTd->cldfb_state[0], q_realImagBuffer, st->cldfbSynTd->p_filter_length ); fixedToFloat_arr( new_swb_speech_fx_16, new_swb_speech, 0, L_FRAME48k ); if ( use_shb32 == 0 ) { @@ -1302,7 +1308,6 @@ ivas_error ivas_core_enc( Copy_Scale_sig_16_32( voice_factors_fx[0], voice_factors_fx32[0], NB_SUBFR16k, 16 ); // Q31 f2me_buf_16( hCPE->hStereoICBWE->mem_shb_speech_nonref, hCPE->hStereoICBWE->mem_shb_speech_nonref_fx, &hCPE->hStereoICBWE->mem_shb_speech_nonref_e, L_LOOK_16k ); // shb_speech_ref_e f2me_buf_16( hCPE->hStereoICBWE->mem_shb_speech_ref, hCPE->hStereoICBWE->mem_shb_speech_ref_fx, &hCPE->hStereoICBWE->mem_shb_speech_ref_e, L_LOOK_16k ); // shb_speech_ref_e - f2me_buf_16( hCPE->hStereoICBWE->shbSynthRef, hCPE->hStereoICBWE->shbSynthRef_fx, &hCPE->hStereoICBWE->shbSynthRef_e, L_LOOK_16k ); // shb_speech_ref_e f2me( hCPE->hStereoICBWE->icbweRefEner, &hCPE->hStereoICBWE->icbweRefEner_fx, &hCPE->hStereoICBWE->icbweRefEner_e ); scale_factor = s_min( scale_factor, Q_factor_arrL( hCPE->hStereoICBWE->mem_lpc_shbsynth_nonref, LPC_SHB_ORDER ) ); diff --git a/lib_enc/ivas_core_pre_proc_front.c b/lib_enc/ivas_core_pre_proc_front.c index 1a6970133cab4282dc56830f07c2647e252368fe..335e8506344951a6c41b414106db99e95f63db82 100644 --- a/lib_enc/ivas_core_pre_proc_front.c +++ b/lib_enc/ivas_core_pre_proc_front.c @@ -912,10 +912,6 @@ ivas_error pre_proc_front_ivas_fx( } Word16 mem_decim_e; f2me_buf_16( st->mem_decim, st->mem_decim_fx, &mem_decim_e, 2 * L_FILT_MAX ); - IF( st->cldfbAnaEnc != NULL ) - { - floatToFixed_arrL( st->cldfbAnaEnc->cldfb_state, st->cldfbAnaEnc->cldfb_state_fx, Q11, sub( sub( st->cldfbAnaEnc->p_filter_length, st->cldfbAnaEnc->no_channels ), st->cldfbAnaEnc->zeros ) ); - } f2me_buf_16( st->old_inp_12k8, st->old_inp_12k8_fx, &st->exp_old_inp_12k8, 240 ); f2me_buf_16( old_inp_12k8, old_inp_12k8_fx, &old_inp_12k8_e, 496 ); if ( old_inp_12k8_e > st->exp_old_inp_12k8 ) @@ -1135,6 +1131,12 @@ ivas_error pre_proc_front_ivas_fx( LR_localVAD = 0; move16(); + IF( st->cldfbAnaEnc != NULL ) + { + scale_sig32( st->cldfbAnaEnc->cldfb_state_fx, sub( sub( st->cldfbAnaEnc->p_filter_length, st->cldfbAnaEnc->no_channels ), st->cldfbAnaEnc->zeros ), sub( Q11, st->cldfbAnaEnc->Q_cldfb_state ) ); + st->cldfbAnaEnc->Q_cldfb_state = Q11; + move16(); + } IF( hSCE != NULL ) { @@ -1556,10 +1558,6 @@ ivas_error pre_proc_front_ivas_fx( } cldfbScale.hb_scale = cldfbScale.lb_scale; fixedToFloat_arrL( enerBuffer_fx, enerBuffer, 31 - enerBuffer_exp, 60 ); - IF( st->cldfbAnaEnc != NULL ) - { - fixedToFloat_arrL( st->cldfbAnaEnc->cldfb_state_fx, st->cldfbAnaEnc->cldfb_state, Q11, sub( sub( st->cldfbAnaEnc->p_filter_length, st->cldfbAnaEnc->no_channels ), st->cldfbAnaEnc->zeros ) ); - } #endif #if 0 diff --git a/lib_enc/ivas_enc.c b/lib_enc/ivas_enc.c index bb6a9dc8408de3ca68b96c9a8c25a638b02a23bc..d2e4487b326fa24ff7631d34906273dd6c07fc15 100644 --- a/lib_enc/ivas_enc.c +++ b/lib_enc/ivas_enc.c @@ -869,22 +869,8 @@ ivas_error ivas_enc( test(); IF( st_ivas->hQMetaData != NULL && EQ_32( ivas_format, MASA_FORMAT ) ) { -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( i = 0; i < st_ivas->nchan_transport; i++ ) - { - floatToFixed_arrL( st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_fx, Q11, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_length ); - } -#endif - ivas_masa_estimate_energy_fx( st_ivas->hMasa, data_fx, input_frame, st_ivas->nchan_transport, st_ivas->q_data_fx ); /* energy-estimation uses TF-resolution: 4x24 */ -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( i = 0; i < st_ivas->nchan_transport; i++ ) - { - fixedToFloat_arrL( st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_fx, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state, Q11, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_length ); - } -#endif - IF( ( error = ivas_masa_enc_config_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; @@ -968,22 +954,10 @@ ivas_error ivas_enc( v_multc( data_f[hEncoderConfig->nchan_ism], 1.0f / SQRT2, data_f[hEncoderConfig->nchan_ism], input_frame ); mvr2r( data_f[hEncoderConfig->nchan_ism], data_f[hEncoderConfig->nchan_ism + 1], input_frame ); } - - for ( i = 0; i < st_ivas->nchan_transport; i++ ) - { - floatToFixed_arrL( st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_fx, Q11, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_length ); - } #endif /* Estimate TF-tile energy for the input MASA stream */ ivas_masa_estimate_energy_fx( st_ivas->hMasa, &( data_fx[hEncoderConfig->nchan_ism] ), input_frame, st_ivas->nchan_transport, st_ivas->q_data_fx ); -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( i = 0; i < st_ivas->nchan_transport; i++ ) - { - fixedToFloat_arrL( st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_fx, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state, Q11, st_ivas->hMasa->data.cldfbAnaEnc[i]->cldfb_state_length ); - } -#endif - IF( ( error = ivas_omasa_enc_config_fx( st_ivas ) ) != IVAS_ERR_OK ) { return error; @@ -1014,21 +988,10 @@ ivas_error ivas_enc( st_ivas->q_data_fx = add( st_ivas->q_data_fx, norm_data_in ); move16(); } -#ifdef IVAS_FLOAT_FIXED_CONVERSIONS - OMASA_ENC_HANDLE hOMasa = st_ivas->hOMasa; - for ( i = 0; i < hEncoderConfig->nchan_ism; i++ ) - { - floatToFixed_arrL( hOMasa->cldfbAnaEnc[i]->cldfb_state, hOMasa->cldfbAnaEnc[i]->cldfb_state_fx, st_ivas->q_data_fx, hOMasa->cldfbAnaEnc[i]->cldfb_state_length ); - } -#endif /* Estimate MASA parameters for the objects */ ivas_omasa_enc_fx( st_ivas->hOMasa, st_ivas->hMasa, st_ivas->hIsmMetaData, data_fx, st_ivas->q_data_fx, input_frame, st_ivas->nchan_transport, hEncoderConfig->nchan_ism, st_ivas->ism_mode, data_separated_object_fx, &idx_separated_object ); #ifdef IVAS_FLOAT_FIXED_CONVERSIONS - for ( i = 0; i < hEncoderConfig->nchan_ism; i++ ) - { - fixedToFloat_arrL( hOMasa->cldfbAnaEnc[i]->cldfb_state_fx, hOMasa->cldfbAnaEnc[i]->cldfb_state, st_ivas->q_data_fx, hOMasa->cldfbAnaEnc[i]->cldfb_state_length ); - } for ( i = 0; i < hEncoderConfig->nchan_ism + st_ivas->nchan_transport; i++ ) { fixedToFloat_arrL( data_fx[i], data_f[i], st_ivas->q_data_fx, input_frame ); diff --git a/lib_enc/ivas_stereo_switching_enc.c b/lib_enc/ivas_stereo_switching_enc.c index ef62186fecf0b913c29c6246f03fea8c4ca75874..96dab941ca4572b7c3f26f76ee2b69078f3d075b 100644 --- a/lib_enc/ivas_stereo_switching_enc.c +++ b/lib_enc/ivas_stereo_switching_enc.c @@ -1319,7 +1319,7 @@ void stereo_switching_enc_fx( sts[0]->cldfbAnaEnc->cldfb_state_fx[i] = L_deposit_h( old_input_signal_pri[input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ) + i] ); move32(); } - sts[0]->cldfbAnaEnc->Q_cldfb_state = Q16; + sts[0]->cldfbAnaEnc->Q_cldfb_state = add( Q16, q_inp ); move16(); } @@ -1337,6 +1337,8 @@ void stereo_switching_enc_fx( IF( hCPE->hStereoTD != NULL && EQ_16( hCPE->hStereoTD->tdm_last_ratio_idx, LRTD_STEREO_LEFT_IS_PRIM ) ) { v_multc_fixed_32_16( hCPE->hCoreCoder[1]->old_input_signal_fx + sub( input_frame, add( offset, NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ) ) ), -MAX_32, sts[1]->cldfbAnaEnc->cldfb_state_fx, offset ); + sts[1]->cldfbAnaEnc->Q_cldfb_state = add( Q16, q_inp ); + move16(); } ELSE { @@ -1345,6 +1347,8 @@ void stereo_switching_enc_fx( sts[1]->cldfbAnaEnc->cldfb_state_fx[i] = L_shr( L_deposit_h( hCPE->hCoreCoder[1]->old_input_signal_fx[input_frame - offset - NS2SA( input_frame * FRAMES_PER_SEC, L_MEM_RECALC_TBE_NS ) + i] ), 5 ); move32(); } + sts[1]->cldfbAnaEnc->Q_cldfb_state = add( Q16 - 5, q_inp ); + move16(); } IF( sts[1]->cldfbSynTd != NULL ) diff --git a/lib_enc/ivas_tcx_core_enc.c b/lib_enc/ivas_tcx_core_enc.c index 40223d1bd3c1de3e788226131393398767826b22..926a1930d8599c38c0781a395e49d0a4ebea7bad 100644 --- a/lib_enc/ivas_tcx_core_enc.c +++ b/lib_enc/ivas_tcx_core_enc.c @@ -1716,7 +1716,7 @@ Word16 ivas_acelp_tcx20_switching_fx( xn_buf_fx[L_frame + i] = mult( xn_buf_fx[L_frame + i], window_fx[overlap - 1 - i] ); move16(); } - e_x = 16; + e_x = sub( 16, q_inp ); /*exponent for xn_buf_fx*/ move16(); TCX_MDCT( xn_buf_fx, x_fx, &e_x, overlap, sub( L_frame, overlap ), overlap, st->element_mode ); scale_A = getScaleFactor32( x_fx, L_frame ); @@ -1786,9 +1786,8 @@ Word16 ivas_acelp_tcx20_switching_fx( s = shl( sub( e_x, s ), 1 ); - tmp32 = L_add( BASOP_Util_Log2( ener ), L_shl( L_deposit_l( s ), 25 ) ); /* log2, 6Q25 */ - tmp32 = L_shr( tmp32, 9 ); /* 15Q16 */ - en[i] = L_add( tmp32, 0x2FD5F ); /* 0x2FD5F -> 9.f * log2(10)/10 (15Q16) */ + tmp32 = L_add( L_shr( BASOP_Util_Log2( ener ), 9 ), L_shl( L_deposit_l( s ), 16 ) ); /* 15Q16 */ + en[i] = L_add( tmp32, 0x2FD5F ); /* 0x2FD5F -> 9.f * log2(10)/10 (15Q16) */ move32(); x_fx += 4; diff --git a/lib_enc/swb_tbe_enc_fx.c b/lib_enc/swb_tbe_enc_fx.c index 4618eaaa6e7ff855f4275e0a7460c1185e5d6f6f..e81ec96baad971546cbe8258ee727a266846a61d 100644 --- a/lib_enc/swb_tbe_enc_fx.c +++ b/lib_enc/swb_tbe_enc_fx.c @@ -3564,6 +3564,7 @@ void swb_tbe_enc_ivas_fx( IF( GE_16( st_fx->element_mode, IVAS_CPE_DFT ) && hStereoICBWE != NULL ) { Copy( shaped_shb_excitation_fx + L_SHB_LAHEAD, hStereoICBWE->shbSynthRef_fx, L_FRAME16k ); + hStereoICBWE->shbSynthRef_e = sub( 15, Q_bwe_exc ); } test();