Loading lib_com/cnst.h +2 −0 Original line number Diff line number Diff line Loading @@ -1425,6 +1425,7 @@ enum #define NB_LEADER 36 #define NB_LDQ4 27 #define FAC_LOG2 3.321928095f #define FAC_LOG2_BY10_Q16 21771 #define NSV_MAX 34 /* maximal number of sub-vectors used by the AVQ */ Loading Loading @@ -1549,6 +1550,7 @@ enum #define SHB_GAIN_QDELTA_1k75 0.08f /* SHB gain scalar quantizer stepsize */ #define SHB_GAIN_QLOW_1k75_FX 0 /* SHB gain lowest scalar quantizer value */ #define SHB_GAIN_QDELTA_1k75_FX 10486 /* SHB gain scalar quantizer stepsize Q17 */ #define SHB_GAIN_QDELTA_1k75_FX_15 2622 /* SHB gain scalar quantizer stepsize */ #define SHB_GAIN_QLOW_FX -262144 /* Q18*/ /* SHB gain lowest scalar quantizer value */ #define SHB_GAIN_QLOW_FX_16 -65536 /* SHB gain lowest scalar quantizer value */ #define SHB_GAIN_QDELTA_FX_15 4915 /* SHB gain scalar quantizer step size */ Loading lib_com/edct_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -746,7 +746,7 @@ void edxt_fx( move32(); } y[sub( Nm1, imult1616( Nm1, shl( kernelType, 1 ) ) )] = L_shr( re[0], 1 ); y[sub( Nm1, imult1616( Nm1, shr( kernelType, 1 ) ) )] = L_shr( re[0], 1 ); move32(); } ELSE /* inverse II = III */ Loading lib_com/float_to_fix_ops.c +7 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,13 @@ void floatToFixed_arr32( float *f, Word32 *i, Word16 Q, Word16 l ) } } float fixedToFloat_16( Word16 i, Word16 Q ) { if ( Q < 0 ) return ( i * (float) ( ( (unsigned) 1 ) << ( -Q ) ) ); else return (float) ( i ) / (float) ( (unsigned int) 1 << Q ); } float fixedToFloat_32( Word32 number, Word16 Q ) { float val = 0.0f; Loading lib_com/int_lsp.c +79 −0 Original line number Diff line number Diff line Loading @@ -314,3 +314,82 @@ void int_lsp4_fx( return; } void int_lsp4_ivas_fx( const Word16 L_frame, /* i : length of the frame */ const Word16 lsp_old[], /* i : LSPs from past frame Q15*/ const Word16 lsp_mid[], /* i : LSPs from mid-frame Q15*/ const Word16 lsp_new[], /* i : LSPs from present frame Q15*/ Word16 *Aq, /* o : LP coefficients in both subframes Q12*/ const Word16 m, /* i : order of LP filter */ Word16 relax_prev_lsf_interp /* i : relax prev frame lsf interp after erasure */ ) { Word16 lsp[M16k]; Word16 i, j, k; Word32 L_tmp; const Word16 *pt_int_coeffs; IF( EQ_16( L_frame, L_FRAME ) ) { IF( EQ_16( relax_prev_lsf_interp, 1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_12k8_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, 2 ) ) { pt_int_coeffs = interpol_frac_mid_FEC_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, -1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_pred_12k8_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, -2 ) ) { pt_int_coeffs = interpol_frac2_mid_fx; } ELSE { pt_int_coeffs = interpol_frac_mid_fx; } } ELSE /* L_frame == L_FRAME16k */ { IF( EQ_16( relax_prev_lsf_interp, 1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_16k_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, 2 ) ) { pt_int_coeffs = interpol_frac_mid_16k_FEC_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, -1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_pred_16k_fx; } ELSE { pt_int_coeffs = interpol_frac_mid_16k_fx; } } k = sub( shr( L_frame, 6 ), 1 ); FOR( j = 0; j < k; j++ ) { FOR( i = 0; i < m; i++ ) { L_tmp = L_mult( lsp_old[i], *pt_int_coeffs ); /*Q31 */ L_tmp = L_mac( L_tmp, lsp_mid[i], *( pt_int_coeffs + 1 ) ); /*Q31 */ lsp[i] = mac_r( L_tmp, lsp_new[i], *( pt_int_coeffs + 2 ) ); move16(); } pt_int_coeffs += 3; E_LPC_f_lsp_a_conversion( lsp, Aq, m ); Aq += add( m, 1 ); } /* Last subframe */ E_LPC_f_lsp_a_conversion( lsp_new, Aq, m ); return; } lib_com/ivas_prot.h +17 −12 Original line number Diff line number Diff line Loading @@ -317,8 +317,8 @@ ivas_error pre_proc_ivas( const int16_t loc_harm, /* i : harmonicity flag */ const float cor_map_sum, /* i : speech/music clasif. parameter */ const int16_t vad_flag_dtx, /* i : HE-SAD flag with additional DTX HO */ const float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ const float fft_buff[2 * L_FFT], /* i : FFT buffer */ /*const*/ float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ /*const*/ float fft_buff[2 * L_FFT], /* i : FFT buffer */ const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ const int16_t vad_hover_flag, /* i : VAD hangover flag */ const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ Loading Loading @@ -635,6 +635,7 @@ ivas_error ivas_core_dec( #endif #ifndef IVAS_FLOAT_FIXED void encod_gen_2sbfr( Encoder_State *st, /* i/o: state structure */ const float speech[], /* i : input speech */ Loading @@ -650,6 +651,7 @@ void encod_gen_2sbfr( const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ ); #endif void decod_gen_2sbfr( Decoder_State *st, /* i/o: decoder static memory */ Loading Loading @@ -799,6 +801,7 @@ int16_t ivas_acelp_tcx20_switching( const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ ); #ifndef IVAS_FLOAT_FIXED void ivas_decision_matrix_enc( Encoder_State *st, /* i/o: encoder state structure */ const int32_t element_brate, /* i : element bitrate */ Loading @@ -806,6 +809,16 @@ void ivas_decision_matrix_enc( const float enerBuffer[], /* i : energy buffer */ const int16_t last_element_mode /* i : last element mode */ ); #else void ivas_decision_matrix_enc_fx( Encoder_State *st, /* i : encoder state structure */ const Word32 element_brate, /* i : element bitrate */ const Word16 fft_buff[], /* i : FFT buffer */ const Word32 enerBuffer[], /* i : energy buffer */ Word16 enerBuffer_exp, const Word16 last_element_mode /* i : last element mode */ ); #endif #ifdef IVAS_FLOAT_FIXED void ivas_signaling_enc_fx( Loading Loading @@ -4122,14 +4135,6 @@ void ivas_mdct_quant_coder( const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ ); void ivas_mdct_quant_coder_fx( CPE_ENC_HANDLE hCPE, /* i/o: Encoder CPE handle */ int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* i : bits needed for TNS parameters */ int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* i : size of TNS */ int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to parameter array */ const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ ); void apply_MCT_enc( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ Loading Loading @@ -8009,8 +8014,8 @@ void ivas_omasa_dirac_rend_jbm( #ifdef IVAS_FLOAT_FIXED void ivas_omasa_preProcessStereoTransportsForMovedObjects_fx( Decoder_Struct *st_ivas, Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], Word32 inIm_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /*cldfb_buf_q*/ Word32 inIm_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /*cldfb_buf_q*/ Word16 *cldfb_buf_q, const Word16 nBins, const Word16 subframe Loading Loading
lib_com/cnst.h +2 −0 Original line number Diff line number Diff line Loading @@ -1425,6 +1425,7 @@ enum #define NB_LEADER 36 #define NB_LDQ4 27 #define FAC_LOG2 3.321928095f #define FAC_LOG2_BY10_Q16 21771 #define NSV_MAX 34 /* maximal number of sub-vectors used by the AVQ */ Loading Loading @@ -1549,6 +1550,7 @@ enum #define SHB_GAIN_QDELTA_1k75 0.08f /* SHB gain scalar quantizer stepsize */ #define SHB_GAIN_QLOW_1k75_FX 0 /* SHB gain lowest scalar quantizer value */ #define SHB_GAIN_QDELTA_1k75_FX 10486 /* SHB gain scalar quantizer stepsize Q17 */ #define SHB_GAIN_QDELTA_1k75_FX_15 2622 /* SHB gain scalar quantizer stepsize */ #define SHB_GAIN_QLOW_FX -262144 /* Q18*/ /* SHB gain lowest scalar quantizer value */ #define SHB_GAIN_QLOW_FX_16 -65536 /* SHB gain lowest scalar quantizer value */ #define SHB_GAIN_QDELTA_FX_15 4915 /* SHB gain scalar quantizer step size */ Loading
lib_com/edct_fx.c +1 −1 Original line number Diff line number Diff line Loading @@ -746,7 +746,7 @@ void edxt_fx( move32(); } y[sub( Nm1, imult1616( Nm1, shl( kernelType, 1 ) ) )] = L_shr( re[0], 1 ); y[sub( Nm1, imult1616( Nm1, shr( kernelType, 1 ) ) )] = L_shr( re[0], 1 ); move32(); } ELSE /* inverse II = III */ Loading
lib_com/float_to_fix_ops.c +7 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,13 @@ void floatToFixed_arr32( float *f, Word32 *i, Word16 Q, Word16 l ) } } float fixedToFloat_16( Word16 i, Word16 Q ) { if ( Q < 0 ) return ( i * (float) ( ( (unsigned) 1 ) << ( -Q ) ) ); else return (float) ( i ) / (float) ( (unsigned int) 1 << Q ); } float fixedToFloat_32( Word32 number, Word16 Q ) { float val = 0.0f; Loading
lib_com/int_lsp.c +79 −0 Original line number Diff line number Diff line Loading @@ -314,3 +314,82 @@ void int_lsp4_fx( return; } void int_lsp4_ivas_fx( const Word16 L_frame, /* i : length of the frame */ const Word16 lsp_old[], /* i : LSPs from past frame Q15*/ const Word16 lsp_mid[], /* i : LSPs from mid-frame Q15*/ const Word16 lsp_new[], /* i : LSPs from present frame Q15*/ Word16 *Aq, /* o : LP coefficients in both subframes Q12*/ const Word16 m, /* i : order of LP filter */ Word16 relax_prev_lsf_interp /* i : relax prev frame lsf interp after erasure */ ) { Word16 lsp[M16k]; Word16 i, j, k; Word32 L_tmp; const Word16 *pt_int_coeffs; IF( EQ_16( L_frame, L_FRAME ) ) { IF( EQ_16( relax_prev_lsf_interp, 1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_12k8_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, 2 ) ) { pt_int_coeffs = interpol_frac_mid_FEC_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, -1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_pred_12k8_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, -2 ) ) { pt_int_coeffs = interpol_frac2_mid_fx; } ELSE { pt_int_coeffs = interpol_frac_mid_fx; } } ELSE /* L_frame == L_FRAME16k */ { IF( EQ_16( relax_prev_lsf_interp, 1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_16k_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, 2 ) ) { pt_int_coeffs = interpol_frac_mid_16k_FEC_fx; } ELSE IF( EQ_16( relax_prev_lsf_interp, -1 ) ) { pt_int_coeffs = interpol_frac_mid_relaxprev_pred_16k_fx; } ELSE { pt_int_coeffs = interpol_frac_mid_16k_fx; } } k = sub( shr( L_frame, 6 ), 1 ); FOR( j = 0; j < k; j++ ) { FOR( i = 0; i < m; i++ ) { L_tmp = L_mult( lsp_old[i], *pt_int_coeffs ); /*Q31 */ L_tmp = L_mac( L_tmp, lsp_mid[i], *( pt_int_coeffs + 1 ) ); /*Q31 */ lsp[i] = mac_r( L_tmp, lsp_new[i], *( pt_int_coeffs + 2 ) ); move16(); } pt_int_coeffs += 3; E_LPC_f_lsp_a_conversion( lsp, Aq, m ); Aq += add( m, 1 ); } /* Last subframe */ E_LPC_f_lsp_a_conversion( lsp_new, Aq, m ); return; }
lib_com/ivas_prot.h +17 −12 Original line number Diff line number Diff line Loading @@ -317,8 +317,8 @@ ivas_error pre_proc_ivas( const int16_t loc_harm, /* i : harmonicity flag */ const float cor_map_sum, /* i : speech/music clasif. parameter */ const int16_t vad_flag_dtx, /* i : HE-SAD flag with additional DTX HO */ const float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ const float fft_buff[2 * L_FFT], /* i : FFT buffer */ /*const*/ float enerBuffer[CLDFB_NO_CHANNELS_MAX], /* i : energy buffer */ /*const*/ float fft_buff[2 * L_FFT], /* i : FFT buffer */ const int16_t MCT_flag, /* i : hMCT handle allocated (1) or not (0) */ const int16_t vad_hover_flag, /* i : VAD hangover flag */ const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ Loading Loading @@ -635,6 +635,7 @@ ivas_error ivas_core_dec( #endif #ifndef IVAS_FLOAT_FIXED void encod_gen_2sbfr( Encoder_State *st, /* i/o: state structure */ const float speech[], /* i : input speech */ Loading @@ -650,6 +651,7 @@ void encod_gen_2sbfr( const int16_t tdm_Pitch_reuse_flag, /* i : primary channel pitch reuse flag */ const float tdm_Pri_pitch_buf[] /* i : pitch values for primary channel */ ); #endif void decod_gen_2sbfr( Decoder_State *st, /* i/o: decoder static memory */ Loading Loading @@ -799,6 +801,7 @@ int16_t ivas_acelp_tcx20_switching( const int16_t flag_16k_smc /* i : flag to indicate if the OL SMC is run at 16 kHz */ ); #ifndef IVAS_FLOAT_FIXED void ivas_decision_matrix_enc( Encoder_State *st, /* i/o: encoder state structure */ const int32_t element_brate, /* i : element bitrate */ Loading @@ -806,6 +809,16 @@ void ivas_decision_matrix_enc( const float enerBuffer[], /* i : energy buffer */ const int16_t last_element_mode /* i : last element mode */ ); #else void ivas_decision_matrix_enc_fx( Encoder_State *st, /* i : encoder state structure */ const Word32 element_brate, /* i : element bitrate */ const Word16 fft_buff[], /* i : FFT buffer */ const Word32 enerBuffer[], /* i : energy buffer */ Word16 enerBuffer_exp, const Word16 last_element_mode /* i : last element mode */ ); #endif #ifdef IVAS_FLOAT_FIXED void ivas_signaling_enc_fx( Loading Loading @@ -4122,14 +4135,6 @@ void ivas_mdct_quant_coder( const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ ); void ivas_mdct_quant_coder_fx( CPE_ENC_HANDLE hCPE, /* i/o: Encoder CPE handle */ int16_t tnsBits[CPE_CHANNELS][NB_DIV], /* i : bits needed for TNS parameters */ int16_t tnsSize[CPE_CHANNELS][NB_DIV], /* i : size of TNS */ int16_t p_param[CPE_CHANNELS][NB_DIV], /* i : pointer to parameter array */ const int16_t MCT_flag /* i : hMCT handle allocated (1) or not (0) */ ); void apply_MCT_enc( MCT_ENC_HANDLE hMCT, /* i/o: MCT encoder structure */ Encoder_State **sts, /* i/o: encoder state structure */ Loading Loading @@ -8009,8 +8014,8 @@ void ivas_omasa_dirac_rend_jbm( #ifdef IVAS_FLOAT_FIXED void ivas_omasa_preProcessStereoTransportsForMovedObjects_fx( Decoder_Struct *st_ivas, Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], Word32 inIm_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], Word32 inRe_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /*cldfb_buf_q*/ Word32 inIm_fx[][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX], /*cldfb_buf_q*/ Word16 *cldfb_buf_q, const Word16 nBins, const Word16 subframe Loading