From d2bf3142fc8a7eca35cb51fe92eec475c508a338 Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 16 Jun 2026 11:56:35 +0200 Subject: [PATCH] LSF_LVQ_RESTRUCTURE --- lib_com/options.h | 1 + lib_com/stat_com.h | 13 +++++++++++++ lib_dec/init_dec_fx.c | 14 +++++++++++++- lib_dec/ivas_init_dec_fx.c | 8 ++++++++ lib_dec/lsf_dec_fx.c | 17 +++++++++++++++++ lib_dec/stat_dec.h | 4 ++++ lib_enc/init_enc_fx.c | 16 ++++++++++++++-- lib_enc/ivas_init_enc_fx.c | 8 ++++++++ lib_enc/lsf_enc_fx.c | 36 ++++++++++++++++++++++++++++++++++++ lib_enc/stat_enc.h | 33 +++++++++++++++++++-------------- 10 files changed, 133 insertions(+), 17 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index fca9b4b0f..9ced7751a 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -88,6 +88,7 @@ #define NONBE_1122_KEEP_EVS_MODE_UNCHANGED /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR. */ #define FIX_BASOP_2620_ICBWE_GSMAPPING_DEAD_CLAMP /* FhG: remove dead (always-overwritten) gsMapping clamp in ic_bwe_enc_gsMapping_fx; float ref has no clamp */ #define FIX_BASOP_2626_RC_UNI_DEC_READ_BITS_HANG /* FhG: BASOP #2626: rc_uni_dec_read_bits: replace loop counter tmp with UWord64; with UWord32 the division-substitute loop (tmp <= low) never terminates after the bit-error sentinel sets rc_low=0xFFFFFFFF -> decoder hang on corrupted bitstreams */ +#define LSF_LVQ_RESTRUCTURE /* VA: restructure LSF LVQ to save memory */ /* #################### End BE switches ################################## */ diff --git a/lib_com/stat_com.h b/lib_com/stat_com.h index b9f0119ce..121bfc3a3 100644 --- a/lib_com/stat_com.h +++ b/lib_com/stat_com.h @@ -110,6 +110,19 @@ struct dispMem_fx Word16 prev_gain_pit[6]; /*Q14 */ }; +#ifdef LSF_LVQ_RESTRUCTURE +/* LSF LVQ handle - used only in EVS */ +typedef struct +{ + 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*/ + Word32 offset_scale1_p_fx[MAX_NO_MODES_p + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure, pred. case, 1st 8-dim subvector*/ + Word32 offset_scale2_p_fx[MAX_NO_MODES_p + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure, pred. case, 2nd 8-dim subvector*/ + Word16 no_scales_fx[MAX_NO_MODES][2]; /* LSF LVQ structure Q0*/ + Word16 no_scales_p_fx[MAX_NO_MODES_p][2]; /* LSF LVQ structure Q0*/ +} LSF_LVQ_DATA, *LSF_LVQ_HANDLE; +#endif + /*---------------------------------------------------------------* * ACELP Encoder/Decoder Static RAM * *---------------------------------------------------------------*/ diff --git a/lib_dec/init_dec_fx.c b/lib_dec/init_dec_fx.c index 9ab72547b..9e054b0c3 100644 --- a/lib_dec/init_dec_fx.c +++ b/lib_dec/init_dec_fx.c @@ -39,7 +39,6 @@ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ #include "stl.h" /* required for wmc_tool */ -#include "basop_util.h" #include "ivas_prot_fx.h" @@ -133,7 +132,20 @@ ivas_error init_decoder_fx( /* LSF initilaizations */ Copy( GEWB_Ave_fx, st_fx->mem_AR_fx, M ); +#ifdef LSF_LVQ_RESTRUCTURE + /* LSF LVQ handle */ + st_fx->hLsfLvq = NULL; + IF( st_fx->element_mode == EVS_MONO ) + { + IF( ( st_fx->hLsfLvq = (LSF_LVQ_HANDLE) malloc( sizeof( LSF_LVQ_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LSF LVQ\n" ); + } + init_lvq_fx( st_fx->hLsfLvq->offset_scale1_fx, st_fx->hLsfLvq->offset_scale2_fx, st_fx->hLsfLvq->offset_scale1_p_fx, st_fx->hLsfLvq->offset_scale2_p_fx, st_fx->hLsfLvq->no_scales_fx, st_fx->hLsfLvq->no_scales_p_fx ); + } +#else init_lvq_fx( st_fx->offset_scale1_fx, st_fx->offset_scale2_fx, st_fx->offset_scale1_p_fx, st_fx->offset_scale2_p_fx, st_fx->no_scales_fx, st_fx->no_scales_p_fx ); +#endif set16_fx( st_fx->mem_MA_fx, 0, M ); diff --git a/lib_dec/ivas_init_dec_fx.c b/lib_dec/ivas_init_dec_fx.c index 5f9856c4e..74947b587 100644 --- a/lib_dec/ivas_init_dec_fx.c +++ b/lib_dec/ivas_init_dec_fx.c @@ -3022,6 +3022,14 @@ void destroy_core_dec_fx( { destroy_cldfb_decoder_fx( hCoreCoder ); +#ifdef LSF_LVQ_RESTRUCTURE + IF( hCoreCoder->hLsfLvq != NULL ) + { + free( hCoreCoder->hLsfLvq ); + hCoreCoder->hLsfLvq = NULL; + } + +#endif IF( hCoreCoder->hGSCDec != NULL ) { free( hCoreCoder->hGSCDec ); diff --git a/lib_dec/lsf_dec_fx.c b/lib_dec/lsf_dec_fx.c index 896b83a9b..2a8c5efdb 100644 --- a/lib_dec/lsf_dec_fx.c +++ b/lib_dec/lsf_dec_fx.c @@ -45,8 +45,13 @@ static void dqlsf_CNG_fx( /* deindex_lvq_cng decoder does not need to know the sampling rate, the sampling rate data is embedded inside the LSF coefficients */ IF( st_fx->element_mode == EVS_MONO ) { +#ifdef LSF_LVQ_RESTRUCTURE + ber_flag = + deindex_lvq_cng_fx( &indice[1], lsf_q, indice[0], LSF_BITS_CNG - 4, &st_fx->hLsfLvq->offset_scale1_fx[0][0], &st_fx->hLsfLvq->offset_scale2_fx[0][0], &st_fx->hLsfLvq->no_scales_fx[0][0] ); /* Q0 */ +#else ber_flag = deindex_lvq_cng_fx( &indice[1], lsf_q, indice[0], LSF_BITS_CNG - 4, &st_fx->offset_scale1_fx[0][0], &st_fx->offset_scale2_fx[0][0], &st_fx->no_scales_fx[0][0] ); /* Q0 */ +#endif } ELSE { @@ -712,9 +717,15 @@ void lsf_end_dec_fx( } ELSE { +#ifdef LSF_LVQ_RESTRUCTURE + ber_flag = vq_dec_lvq_fx( 1, qlsf, &lindice[1], stages0, M, mode_lvq, levels0[stages0 - 1], + &st->hLsfLvq->offset_scale1_fx[0][0], &st->hLsfLvq->offset_scale2_fx[0][0], &st->hLsfLvq->offset_scale1_p_fx[0][0], &st->hLsfLvq->offset_scale2_p_fx[0][0], + &st->hLsfLvq->no_scales_fx[0][0], &st->hLsfLvq->no_scales_p_fx[0][0] ); /* Q0 */ +#else ber_flag = vq_dec_lvq_fx( 1, qlsf, &lindice[1], stages0, M, mode_lvq, levels0[stages0 - 1], &st->offset_scale1_fx[0][0], &st->offset_scale2_fx[0][0], &st->offset_scale1_p_fx[0][0], &st->offset_scale2_p_fx[0][0], &st->no_scales_fx[0][0], &st->no_scales_p_fx[0][0] ); /* Q0 */ +#endif } st->BER_detect = s_or( st->BER_detect, ber_flag ); /* Q0 */ move16(); @@ -737,9 +748,15 @@ void lsf_end_dec_fx( } ELSE { +#ifdef LSF_LVQ_RESTRUCTURE + ber_flag = vq_dec_lvq_fx( 0, qlsf, &lindice[1], stages1, M, mode_lvq_p, levels1[stages1 - 1], + &st->hLsfLvq->offset_scale1_fx[0][0], &st->hLsfLvq->offset_scale2_fx[0][0], &st->hLsfLvq->offset_scale1_p_fx[0][0], &st->hLsfLvq->offset_scale2_p_fx[0][0], + &st->hLsfLvq->no_scales_fx[0][0], &st->hLsfLvq->no_scales_p_fx[0][0] ); /* Q0 */ +#else ber_flag = vq_dec_lvq_fx( 0, qlsf, &lindice[1], stages1, M, mode_lvq_p, levels1[stages1 - 1], &st->offset_scale1_fx[0][0], &st->offset_scale2_fx[0][0], &st->offset_scale1_p_fx[0][0], &st->offset_scale2_p_fx[0][0], &st->no_scales_fx[0][0], &st->no_scales_p_fx[0][0] ); /* Q0 */ +#endif } st->BER_detect = s_or( st->BER_detect, ber_flag ); /* Q0 */ move16(); diff --git a/lib_dec/stat_dec.h b/lib_dec/stat_dec.h index 885af0c03..f7cd22814 100644 --- a/lib_dec/stat_dec.h +++ b/lib_dec/stat_dec.h @@ -1090,12 +1090,16 @@ typedef struct Decoder_State Word16 stab_fac_smooth_lt_fx; /*In range of word16*/ /*Q-15*/ Word32 log_energy_old_fx; +#ifdef LSF_LVQ_RESTRUCTURE + LSF_LVQ_HANDLE hLsfLvq; /* LSF LVQ handle */ +#else 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*/ Word32 offset_scale1_p_fx[MAX_NO_MODES_p + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure, pred. case, 1st 8-dim subvector*/ Word32 offset_scale2_p_fx[MAX_NO_MODES_p + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure, pred. case, 2nd 8-dim subvector*/ Word16 no_scales_fx[MAX_NO_MODES][2]; /* LSF LVQ structure Q0*/ Word16 no_scales_p_fx[MAX_NO_MODES_p][2]; /* LSF LVQ structure Q0*/ +#endif Word16 GSC_noisy_speech; /* AC mode (GSC) - flag to indicate GSC on SWB noisy speech */ Word16 GSC_IVAS_mode; /* AC mode (GSC) - GSC IVAS mode */ diff --git a/lib_enc/init_enc_fx.c b/lib_enc/init_enc_fx.c index ac865493e..125303a5a 100644 --- a/lib_enc/init_enc_fx.c +++ b/lib_enc/init_enc_fx.c @@ -37,9 +37,7 @@ #include "options.h" /* Compilation switches */ #include "cnst.h" /* Common constants */ #include "rom_com.h" /* Static table prototypes */ -#include "stl.h" #include "ivas_cnst.h" -#include "ivas_error.h" #include "prot_fx.h" /* Function prototypes */ #include "prot_fx_enc.h" /* Function prototypes */ #include "ivas_prot_fx.h" @@ -170,7 +168,21 @@ ivas_error init_encoder_fx( 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 ); + +#ifdef LSF_LVQ_RESTRUCTURE + /* LSF LVQ handle */ + st->hLsfLvq = NULL; + IF( st->element_mode == EVS_MONO ) + { + IF( ( st->hLsfLvq = (LSF_LVQ_HANDLE) malloc( sizeof( LSF_LVQ_DATA ) ) ) == NULL ) + { + return IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for LSF LVQ\n" ); + } + init_lvq_fx( st->hLsfLvq->offset_scale1_fx, st->hLsfLvq->offset_scale2_fx, st->hLsfLvq->offset_scale1_p_fx, st->hLsfLvq->offset_scale2_p_fx, st->hLsfLvq->no_scales_fx, st->hLsfLvq->no_scales_p_fx ); + } +#else init_lvq_fx( st->offset_scale1_fx, st->offset_scale2_fx, st->offset_scale1_p_fx, st->offset_scale2_p_fx, st->no_scales_fx, st->no_scales_p_fx ); +#endif st->next_force_safety_net = 0; move16(); diff --git a/lib_enc/ivas_init_enc_fx.c b/lib_enc/ivas_init_enc_fx.c index 06df36fe5..afab2a7f6 100644 --- a/lib_enc/ivas_init_enc_fx.c +++ b/lib_enc/ivas_init_enc_fx.c @@ -1049,6 +1049,14 @@ void destroy_core_enc_fx( { destroy_cldfb_encoder_fx( hCoreCoder ); +#ifdef LSF_LVQ_RESTRUCTURE + IF( hCoreCoder->hLsfLvq != NULL ) + { + free( hCoreCoder->hLsfLvq ); + hCoreCoder->hLsfLvq = NULL; + } + +#endif IF( hCoreCoder->hSignalBuf != NULL ) { free( hCoreCoder->hSignalBuf ); diff --git a/lib_enc/lsf_enc_fx.c b/lib_enc/lsf_enc_fx.c index bc1f4cb3a..ca2788cf2 100644 --- a/lib_enc/lsf_enc_fx.c +++ b/lib_enc/lsf_enc_fx.c @@ -669,7 +669,11 @@ void lsf_end_enc_fx( IF( EQ_32( st->core_brate, SID_2k40 ) ) { +#ifdef LSF_LVQ_RESTRUCTURE + lsfq_CNG_fx( st->element_mode, hBstr, lsf, wghts, qlsf, &st->hLsfLvq->offset_scale1_fx[0][0], &st->hLsfLvq->offset_scale2_fx[0][0], &st->hLsfLvq->no_scales_fx[0][0] ); +#else lsfq_CNG_fx( st->element_mode, hBstr, lsf, wghts, qlsf, &st->offset_scale1_fx[0][0], &st->offset_scale2_fx[0][0], &st->no_scales_fx[0][0] ); +#endif sort_fx( qlsf, 0, M - 1 ); reorder_lsf_fx( qlsf, MODE1_LSF_GAP_FX, M, st->sr_core ); @@ -722,8 +726,14 @@ void lsf_end_enc_fx( /* LVQ quantization (safety-net only) */ IF( flag_1bit_gran == 0 ) { +#ifdef LSF_LVQ_RESTRUCTURE + Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, + st->hLsfLvq->offset_scale1_fx, st->hLsfLvq->offset_scale2_fx, st->hLsfLvq->no_scales_fx, resq, lsfq ); + +#else Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, st->offset_scale1_fx, st->offset_scale2_fx, st->no_scales_fx, resq, lsfq ); +#endif } ELSE { @@ -741,8 +751,13 @@ void lsf_end_enc_fx( IF( flag_1bit_gran == 0 ) { +#ifdef LSF_LVQ_RESTRUCTURE + Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp1, levels1, stages1, wghts, Idx1, lsf, pred1, + st->hLsfLvq->offset_scale1_p_fx, st->hLsfLvq->offset_scale2_p_fx, st->hLsfLvq->no_scales_p_fx, resq, lsfq ); +#else Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp1, levels1, stages1, wghts, Idx1, lsf, pred1, st->offset_scale1_p_fx, st->offset_scale2_p_fx, st->no_scales_p_fx, resq, lsfq ); +#endif } ELSE { @@ -821,7 +836,11 @@ void lsf_end_enc_fx( /* Switched Safety-Net/AR prediction */ IF( flag_1bit_gran == 0 ) { +#ifdef LSF_LVQ_RESTRUCTURE + Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, st->hLsfLvq->offset_scale1_fx, st->hLsfLvq->offset_scale2_fx, st->hLsfLvq->no_scales_fx, resq, lsfq ); +#else Err[0] = vq_lvq_lsf_enc( 0, mode_lvq, Tmp, levels0, stages0, wghts, Idx0, lsf, pred0, st->offset_scale1_fx, st->offset_scale2_fx, st->no_scales_fx, resq, lsfq ); +#endif } ELSE { @@ -834,8 +853,13 @@ void lsf_end_enc_fx( { IF( flag_1bit_gran == 0 ) { +#ifdef LSF_LVQ_RESTRUCTURE + Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp2, levels1, stages1, wghts, Idx1, lsf, pred2, + st->hLsfLvq->offset_scale1_p_fx, st->hLsfLvq->offset_scale2_p_fx, st->hLsfLvq->no_scales_p_fx, &resq[M], &lsfq[M] ); +#else Err[1] = vq_lvq_lsf_enc( 2, mode_lvq_p, Tmp2, levels1, stages1, wghts, Idx1, lsf, pred2, st->offset_scale1_p_fx, st->offset_scale2_p_fx, st->no_scales_p_fx, &resq[M], &lsfq[M] ); +#endif } ELSE { @@ -1145,9 +1169,15 @@ void lsf_end_enc_fx( { IF( flag_1bit_gran == 0 ) { +#ifdef LSF_LVQ_RESTRUCTURE + vq_dec_lvq_fx( 1, qlsf, &indice[0], stages0, M, mode_lvq, levels0[stages0 - 1], + &st->hLsfLvq->offset_scale1_fx[0][0], &st->hLsfLvq->offset_scale2_fx[0][0], &st->hLsfLvq->offset_scale1_p_fx[0][0], &st->hLsfLvq->offset_scale2_p_fx[0][0], + &st->hLsfLvq->no_scales_fx[0][0], &st->hLsfLvq->no_scales_p_fx[0][0] ); +#else vq_dec_lvq_fx( 1, qlsf, &indice[0], stages0, M, mode_lvq, levels0[stages0 - 1], &st->offset_scale1_fx[0][0], &st->offset_scale2_fx[0][0], &st->offset_scale1_p_fx[0][0], &st->offset_scale2_p_fx[0][0], &st->no_scales_fx[0][0], &st->no_scales_p_fx[0][0] ); +#endif } ELSE { @@ -1173,9 +1203,15 @@ void lsf_end_enc_fx( /* LVQ */ IF( flag_1bit_gran == 0 ) { +#ifdef LSF_LVQ_RESTRUCTURE + vq_dec_lvq_fx( 0, qlsf, &indice[0], stages1, M, mode_lvq_p, levels1[stages1 - 1], + &st->hLsfLvq->offset_scale1_fx[0][0], &st->hLsfLvq->offset_scale2_fx[0][0], &st->hLsfLvq->offset_scale1_p_fx[0][0], + &st->hLsfLvq->offset_scale2_p_fx[0][0], &st->hLsfLvq->no_scales_fx[0][0], &st->hLsfLvq->no_scales_p_fx[0][0] ); +#else vq_dec_lvq_fx( 0, qlsf, &indice[0], stages1, M, mode_lvq_p, levels1[stages1 - 1], &st->offset_scale1_fx[0][0], &st->offset_scale2_fx[0][0], &st->offset_scale1_p_fx[0][0], &st->offset_scale2_p_fx[0][0], &st->no_scales_fx[0][0], &st->no_scales_p_fx[0][0] ); +#endif } ELSE { diff --git a/lib_enc/stat_enc.h b/lib_enc/stat_enc.h index 34f3c56bc..147f984d6 100644 --- a/lib_enc/stat_enc.h +++ b/lib_enc/stat_enc.h @@ -1306,26 +1306,31 @@ typedef struct enc_core_structure LPD_state_HANDLE hLPDmem; /* ACELP LPDmem memories */ - Word32 Bin_E_fx[L_FFT]; /* Q_new + Q_SCALE -2 per bin energy of two frames */ - Word16 q_Bin_E; /* Q_new + Q_SCALE -2 per bin energy of two frames */ - Word16 lsp_old1_fx[M]; /* old unquantized LSP vector at the end of the frame Q15 */ - Word16 lsf_old1_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ - Word16 lsp_old_fx[M]; /* old LSP vector at the end of the frame Q15 */ - Word16 lsf_old_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ - Word16 lsp_old16k_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ - Word16 lspold_enc_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ - Word16 pstreaklen; /* LSF quantizer */ - Word16 streaklimit_fx; /* LSF quantizer Q15 */ - Word16 stab_fac_fx; /* LSF stability factor Q15 */ - Word16 clip_var_fx[6]; /* pitch gain clipping memory [2.56x,Q14,Q8,Q0,Q14,Q14] */ - 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) */ + Word32 Bin_E_fx[L_FFT]; /* Q_new + Q_SCALE -2 per bin energy of two frames */ + Word16 q_Bin_E; /* Q_new + Q_SCALE -2 per bin energy of two frames */ + Word16 lsp_old1_fx[M]; /* old unquantized LSP vector at the end of the frame Q15 */ + Word16 lsf_old1_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ + Word16 lsp_old_fx[M]; /* old LSP vector at the end of the frame Q15 */ + Word16 lsf_old_fx[M]; /* old LSF vector at the end of the frame Qlog2(2.56) */ + Word16 lsp_old16k_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ + Word16 lspold_enc_fx[M]; /* old LSP vector at the end of the frame @16kHz Q15 */ + Word16 pstreaklen; /* LSF quantizer */ + Word16 streaklimit_fx; /* LSF quantizer Q15 */ + Word16 stab_fac_fx; /* LSF stability factor Q15 */ + Word16 clip_var_fx[6]; /* pitch gain clipping memory [2.56x,Q14,Q8,Q0,Q14,Q14] */ + 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) */ + +#ifdef LSF_LVQ_RESTRUCTURE + LSF_LVQ_HANDLE hLsfLvq; /* LSF LVQ handle */ +#else 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*/ Word32 offset_scale1_p_fx[MAX_NO_MODES_p + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure, pred. case, 1st 8-dim subvector*/ Word32 offset_scale2_p_fx[MAX_NO_MODES_p + 1][MAX_NO_SCALES + 1]; /* offsets for LSF LVQ structure, pred. case, 2nd 8-dim subvector*/ Word16 no_scales_fx[MAX_NO_MODES][2]; /* LSF LVQ structure Q0*/ Word16 no_scales_p_fx[MAX_NO_MODES_p][2]; /* LSF LVQ structure Q0*/ +#endif Word16 mem_preemph_fx; /* preemphasis filter memory Q(-1) */ Word16 mem_q; /* preemphasis filter memory Q(-1) */ -- GitLab