diff --git a/lib_com/options.h b/lib_com/options.h index fca9b4b0f646c849ef65c960f065f9722b2511ae..9ced7751ab6af34733947dfedf5a87a9f326e061 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 b9f0119ceacc38de2fdfbeb954105b694bf83e2b..121bfc3a3f81224eb82b4cc11b4aac063fcca7d2 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 9ab72547bb6918c76b1b55aceb2e1dfca2260996..9e054b0c3f0b8946f300272c9d85d6d13cb440fc 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 5f9856c4ecc3decf5d7180af120f092d3cddcad1..74947b587190f27bf142f7bfe293df46a82f960f 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 896b83a9b3e856cfe5a647ce00c3847cb2835cf3..2a8c5efdb1f1cc04e20ea6634ae224895a9d5e37 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 885af0c03e38e9a50071b09a25547f90152f27d2..f7cd228145b01304b3ba54d6b38465109ccaf437 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 ac865493ee486a293b2c6c901494599e4049ab7b..125303a5af8890b5d2a6d30bccd8611bfa3bc5a5 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 06df36fe5b260a211c6ed3829042b8a9f7ad2669..afab2a7f6de3e262405b5e6318fd5bcda10c0323 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 bc1f4cb3a979d6ec7b864bbe8a8505f500d48877..ca2788cf26ecc3eeaab65e1283bec5b5a7fcae7c 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 34f3c56bc60c4213bad7dff4acbf9554d4420b3b..147f984d65550de6ad61a82176eded40cd3678a3 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) */