Loading Workspace_msvc/lib_dec.vcxproj +1 −0 Original line number Diff line number Diff line Loading @@ -313,6 +313,7 @@ <ClCompile Include="..\lib_dec\ivas_stereo_icbwe_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_mdct_core_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_mdct_stereo_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_mstd_core_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_switching_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_td_dec.c" /> <ClCompile Include="..\lib_dec\ivas_svd_dec.c" /> Loading Workspace_msvc/lib_enc.vcxproj +1 −0 Original line number Diff line number Diff line Loading @@ -327,6 +327,7 @@ <ClCompile Include="..\lib_enc\ivas_stereo_mdct_core_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_mdct_igf_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_mdct_stereo_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_mstd_core_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_switching_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_td_analysis.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_td_enc.c" /> Loading lib_com/bits_alloc.c +74 −1 Original line number Diff line number Diff line Loading @@ -631,6 +631,36 @@ ivas_error config_acelp1( i++; } #ifdef P_MSTD if ( element_mode == IVAS_CPE_MSTD ) { if ( core_brate_inp == ACELP_28k30 ) { i = 22; flag_hardcoded = 1; } if ( core_brate_inp == ACELP_28k50 ) { i = 23; flag_hardcoded = 1; } if ( core_brate_inp == ACELP_29k50 ) { i = 24; flag_hardcoded = 1; } else if ( core_brate_inp == ACELP_29k70 ) { i = 25; flag_hardcoded = 1; } else { ; } } #endif if ( element_mode == IVAS_CPE_TD && coder_type == AUDIO && core_brate_inp <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ { Loading @@ -639,12 +669,20 @@ ivas_error config_acelp1( core_brate = brate_intermed_tbl[i]; #ifdef P_MSTD if ( ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) || ( element_mode == IVAS_CPE_MSTD && core_brate <= ACELP_16k40 ) ) #else if ( element_mode > EVS_MONO ) #endif { flag_hardcoded = 0; /* use automatic and flexible ACELP bit-budget allocation */ } #ifdef P_MSTD if ( core != ACELP_CORE && ( element_mode == EVS_MONO || element_mode == IVAS_CPE_MSTD ) ) /* needed for mode1 core switching in EVS mono */ #else if ( core != ACELP_CORE && element_mode == EVS_MONO ) /* needed for mode1 core switching in EVS mono */ #endif { flag_hardcoded = 1; } Loading @@ -664,7 +702,11 @@ ivas_error config_acelp1( } /* Subtract signaling bits */ #ifdef P_MSTD if ( enc_dec == DEC && idchan == 1 && ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) ) #else if ( enc_dec == DEC && idchan == 1 && element_mode > EVS_MONO ) #endif { bits -= TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; Loading Loading @@ -745,7 +787,11 @@ ivas_error config_acelp1( /* mid-LSF Q bit-budget */ acelp_cfg->mid_lsf_bits = mid_LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; #ifdef P_MSTD if ( ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) && coder_type == AUDIO /*&& brate_intermed_tbl[i] < ACELP_9k60*/ ) #else if ( element_mode > EVS_MONO && coder_type == AUDIO /*&& brate_intermed_tbl[i] < ACELP_9k60*/ ) #endif { acelp_cfg->mid_lsf_bits = 5; /* primary channel: do nothing */ Loading Loading @@ -839,7 +885,11 @@ ivas_error config_acelp1( * LP filtering of the adaptive excitation *-----------------------------------------------------------------*/ #ifdef P_MSTD if ( idchan > 0 && ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) ) #else if ( idchan > 0 && element_mode > EVS_MONO ) #endif { acelp_cfg->ltf_mode = FULL_BAND; } Loading Loading @@ -1085,7 +1135,11 @@ ivas_error config_acelp1( } /* algebraic codebook bit-budget */ #ifdef P_MSTD if ( flag_hardcoded || ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE && total_brate != ACELP_31k30 ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #else if ( flag_hardcoded || ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #endif { for ( i = 0; i < nb_subfr; i++ ) { Loading Loading @@ -1172,7 +1226,11 @@ ivas_error config_acelp1( } /* AVQ codebook */ #ifdef P_MSTD if ( ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE && total_brate != ACELP_31k30 ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #else if ( ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #endif { for ( i = 0; i < nb_subfr; i++ ) { Loading @@ -1187,7 +1245,11 @@ ivas_error config_acelp1( bits -= G_AVQ_BITS; } #ifdef P_MSTD if ( core_brate_inp >= MIN_BRATE_AVQ_EXC && core_brate_inp <= MAX_BRATE_AVQ_EXC_TD && coder_type == GENERIC && total_brate != ACELP_31k30 ) #else if ( core_brate_inp >= MIN_BRATE_AVQ_EXC && core_brate_inp <= MAX_BRATE_AVQ_EXC_TD && coder_type == GENERIC ) #endif { /* harm. flag ACELP AVQ */ bits--; Loading Loading @@ -1304,10 +1366,15 @@ ivas_error config_acelp1( { acelp_cfg->ubits = 0; } #ifdef P_MSTD else if ( ( flag_hardcoded && core == ACELP_CORE && bits != 0 ) && ( coder_type != AUDIO ) ) #else else if ( flag_hardcoded && core == ACELP_CORE && bits != 0 ) #endif { #ifdef DEBUGGING IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d.\n", (int32_t) bits, frame ); /* IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d.\n", (int32_t) bits, frame ); */ IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d. %d-%d\n", (int32_t) bits, frame, coder_type, nb_subfr ); #endif } else if ( bits > 0 && !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) Loading Loading @@ -1393,6 +1460,12 @@ ivas_error config_acelp1( acelp_cfg->lsf_bits = 42; } } #ifdef P_MSTD else if ( element_mode == IVAS_CPE_MSTD && coder_type == AUDIO ) { acelp_cfg->ubits = 0; } #endif else { acelp_cfg->ubits = bits; Loading lib_com/bitstream.c +4 −0 Original line number Diff line number Diff line Loading @@ -2050,7 +2050,11 @@ ivas_error read_indices( } else { #ifdef P_MSTD ; #else st_ivas->element_mode_init = -1; #endif } } else /* AMRWB or EVS */ Loading lib_com/cnst.h +82 −0 Original line number Diff line number Diff line Loading @@ -119,7 +119,11 @@ enum{ #define ACTIVE_FRAME 0xFF #define SID_FRAME 0xFA #define ZERO_FRAME 0xF0 #ifdef P_MSTD #define FRAME_SIZE_NB 14 #else #define FRAME_SIZE_NB 13 #endif #define RATE_MODE_MAX 2 /* Number of rate mode */ #define BANDWIDTH_MODE_MAX 2 /* Number of different bandwidth (NB/WB-FB) */ Loading Loading @@ -202,6 +206,13 @@ enum{ #define ACELP_32k 32000 /* ACELP core layer at 32 kbps */ #define ACELP_48k 48000 /* ACELP core layer at 48 kbps */ #define ACELP_64k 64000 /* ACELP core layer at 64 kbps */ #ifdef P_MSTD #define ACELP_31k30 31300 #define ACELP_28k30 28300 #define ACELP_28k50 28500 #define ACELP_29k50 29500 #define ACELP_29k70 29700 #endif #define HQ_16k40 16400 /* HQ core at 16.4 kbps */ #define HQ_13k20 13200 /* HQ core at 13.2 kbps */ Loading Loading @@ -229,12 +240,21 @@ enum{ #define GSC_LRES_GAINQ_LIMIT 3000 /* Bitrate where the low resolution quantization starts for the GSC */ #define GSC_LRES_NB_NITS 10 /* Number of bits gained by using the low resolution quantization */ #ifdef P_MSTD #define SIZE_BRATE_TBL 12 #define SIZE_BRATE_INTERMED_TBL 26 #define BRATE2IDX( brate ) ( brate == ACELP_5k00 ? 0 : brate == ACELP_6k15 ? 1 : brate == ACELP_7k20 ? 2 : brate == ACELP_8k00 ? 3 : brate == ACELP_9k60 ? 4 : brate == ACELP_11k60 ? 5 : brate == ACELP_12k15 ? 6 : brate == ACELP_12k85 ? 7 : brate == ACELP_13k20 ? 8 : brate == ACELP_14k80 ? 9 : brate == ACELP_16k40 ? 10 : brate == ACELP_22k60 ? 11 : brate == ACELP_24k40 ? 12 : brate == ACELP_29k00 ? 13 : brate == ACELP_29k20 ? 14 : brate == ACELP_30k20 ? 15 : brate == ACELP_30k40 ? 16 : brate == ACELP_32k ? 17 : brate == ACELP_48k ? 18 : brate == ACELP_64k ? 19 : brate == HQ_96k ? 20 : brate == HQ_128k ? 21 : brate == ACELP_28k30 ? 22 : brate == ACELP_28k50 ? 23 : brate == ACELP_29k50 ? 24 : brate == ACELP_29k70 ? 25 : -1 ) #define BRATE2IDX16k( brate ) ( brate == ACELP_8k00 ? 0 : brate == ACELP_14k80 || brate == ACELP_16k40 ? 1 : brate == ACELP_22k60 ? 2 : brate == ACELP_24k40 ? 3 : brate == ACELP_29k00 ? 4 : brate == ACELP_29k20 ? 5 : brate == ACELP_30k20 ? 6 : brate == ACELP_30k40 ? 7 : brate == ACELP_32k ? 8 : brate == ACELP_48k ? 9 : brate == ACELP_64k ? 10 : brate == ACELP_28k30 ? 11 : brate == ACELP_28k50 ? 12 : brate == ACELP_29k50 ? 13 : brate == ACELP_29k70 ? 14 : -1 ) #else #define SIZE_BRATE_TBL 11 #define SIZE_BRATE_INTERMED_TBL 22 #define BRATE2IDX( brate ) ( brate == ACELP_5k00 ? 0 : brate == ACELP_6k15 ? 1 : brate == ACELP_7k20 ? 2 : brate == ACELP_8k00 ? 3 : brate == ACELP_9k60 ? 4 : brate == ACELP_11k60 ? 5 : brate == ACELP_12k15 ? 6 : brate == ACELP_12k85 ? 7 : brate == ACELP_13k20 ? 8 : brate == ACELP_14k80 ? 9 : brate == ACELP_16k40 ? 10 : brate == ACELP_22k60 ? 11 : brate == ACELP_24k40 ? 12 : brate == ACELP_29k00 ? 13 : brate == ACELP_29k20 ? 14 : brate == ACELP_30k20 ? 15 : brate == ACELP_30k40 ? 16 : brate == ACELP_32k ? 17 : brate == ACELP_48k ? 18 : brate == ACELP_64k ? 19 : brate == HQ_96k ? 20 : brate == HQ_128k ? 21 : -1 ) #define BRATE2IDX16k( brate ) ( brate == ACELP_8k00 ? 0 : brate == ACELP_14k80 || brate == ACELP_16k40 ? 1 : brate == ACELP_22k60 ? 2 : brate == ACELP_24k40 ? 3 : brate == ACELP_29k00 ? 4 : brate == ACELP_29k20 ? 5 : brate == ACELP_30k20 ? 6 : brate == ACELP_30k40 ? 7 : brate == ACELP_32k ? 8 : brate == ACELP_48k ? 9 : brate == ACELP_64k ? 10 : -1 ) #endif /* Combine parameters into a single index (used to retrieve number of bits from bit allocation tables) */ #define LSF_BIT_ALLOC_IDX( brate, ctype ) ( 6 * BRATE2IDX( brate ) + ( ctype ) ) Loading @@ -252,7 +272,11 @@ enum{ /* Combine coder_type, bandwidth, formant sharpening flag, and channel-aware flag into one indice */ #define SIG2IND( ctype, bw, sf, ca_rf ) ( ctype | ( bw << 3 ) | ( sf << 6 ) | ( ca_rf << 7 ) ) #ifdef P_MSTD #define MAX_ACELP_SIG 112 #else #define MAX_ACELP_SIG 100 #endif /*----------------------------------------------------------------------------------* * Bitstream indices Loading Loading @@ -913,8 +937,13 @@ enum #define N_LTP_GAIN_MEMS 4 #ifdef P_MSTD #define N_TCX_STARTLINE_NOISE_WB 12 #define N_TCX_STARTLINE_NOISE_SWB 10 #else #define N_TCX_STARTLINE_NOISE_WB 11 #define N_TCX_STARTLINE_NOISE_SWB 9 #endif /*----------------------------------------------------------------------------------* * TNS constants Loading Loading @@ -2221,5 +2250,58 @@ enum VOIP_RTPDUMP }; #ifdef P_MSTD #define MSTD_PRI_BPS (ACELP_31k30) #define MSTD_SEC_BPS (ACELP_16k40) #define MSTD_TCX_PRI_BPS (24000) #define MSTD_TCX_SEC_BPS (23700) /*----------------------------------------------------------------------------------*/ #define IVAS_MSTD_SIGNALING_NBITS_SWITCH (2) #define IVAS_MSTD_SIGNALING_NBITS_MODE (2) #define IVAS_MSTD_SIGNALING_NBITS_ADD (IVAS_MSTD_SIGNALING_NBITS_MODE+IVAS_MSTD_SIGNALING_NBITS_SWITCH) #define SWITCH_MSTD (0) #define SWITCH_MDCT (1) #define SWITCH_TO_MDCT (2) #define SWITCH_TO_MSTD (3) #define SWITCH_ENC_MSTD (0) #define SWITCH_ENC_MDCT (1) #define SWITCH_ENC_TO_MDCT (2) #define SWITCH_ENC_TO_MSTD1 (3) #define SWITCH_ENC_TO_MSTD0 (4) /* #define MSTD_NOVA_NS ( 5000000L ) */ /* mixing overlap length */ #define MSTD_TRANS_NUM ( 640 ) #define MSTD_NOVA_NS ( 5000000L ) /* mixing overlap length */ #define MSTD_MSOVA_NS ( 1000000L ) /* gain, itd mixing overlap length */ #define MSTD_UPMIX_DELAY (ACELP_LOOK_NS + DELAY_FIR_RESAMPL_NS + DELAY_BWE_TOTAL_NS) #define MSTD_ITD_FITDELTA (4) #define MSTD_ITD_FITMAX (3) #define MSTD_ITD_FILTLENG (13) #define MSTD_ITD_FILTHLENG (7) #define MSTD_ITD_FILTDNUM (23) #define MSTD_ITD_ETHRE ( 40.0f ) #define MSTD_LRG_ETHRE ( 40.0f ) #define MSTD_LRG_MAX ( 1.1f ) #define MSTD_LRG_MIN ( 0.9f ) #define MSTD_HOLD_CNT ( 10 ) #define MSTD_HOLD_MAXCNT ( 20 ) /* #define MSTD_MODE_DET_THRE_HI ( 0.812368973f ) */ #define MSTD_MODE_DET_THRE_HI ( 0.90f ) #define MSTD_MODE_DET_THRE_LO ( 0.50f ) #define MSTD_MODE_DET_THRE_MSTDBOOST ( 0.80f ) #define MSTD_MODE_DET_BETHRE ( 0.20f ) #endif /* clang-format on */ #endif /* CNST_H */ Loading
Workspace_msvc/lib_dec.vcxproj +1 −0 Original line number Diff line number Diff line Loading @@ -313,6 +313,7 @@ <ClCompile Include="..\lib_dec\ivas_stereo_icbwe_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_mdct_core_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_mdct_stereo_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_mstd_core_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_switching_dec.c" /> <ClCompile Include="..\lib_dec\ivas_stereo_td_dec.c" /> <ClCompile Include="..\lib_dec\ivas_svd_dec.c" /> Loading
Workspace_msvc/lib_enc.vcxproj +1 −0 Original line number Diff line number Diff line Loading @@ -327,6 +327,7 @@ <ClCompile Include="..\lib_enc\ivas_stereo_mdct_core_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_mdct_igf_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_mdct_stereo_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_mstd_core_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_switching_enc.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_td_analysis.c" /> <ClCompile Include="..\lib_enc\ivas_stereo_td_enc.c" /> Loading
lib_com/bits_alloc.c +74 −1 Original line number Diff line number Diff line Loading @@ -631,6 +631,36 @@ ivas_error config_acelp1( i++; } #ifdef P_MSTD if ( element_mode == IVAS_CPE_MSTD ) { if ( core_brate_inp == ACELP_28k30 ) { i = 22; flag_hardcoded = 1; } if ( core_brate_inp == ACELP_28k50 ) { i = 23; flag_hardcoded = 1; } if ( core_brate_inp == ACELP_29k50 ) { i = 24; flag_hardcoded = 1; } else if ( core_brate_inp == ACELP_29k70 ) { i = 25; flag_hardcoded = 1; } else { ; } } #endif if ( element_mode == IVAS_CPE_TD && coder_type == AUDIO && core_brate_inp <= STEREO_GSC_BIT_RATE_ALLOC && brate_intermed_tbl[i] == ACELP_9k60 ) /* Bit allocation should be mapped to 8 kb/s instead of 9.6 kb/s in this case */ { Loading @@ -639,12 +669,20 @@ ivas_error config_acelp1( core_brate = brate_intermed_tbl[i]; #ifdef P_MSTD if ( ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) || ( element_mode == IVAS_CPE_MSTD && core_brate <= ACELP_16k40 ) ) #else if ( element_mode > EVS_MONO ) #endif { flag_hardcoded = 0; /* use automatic and flexible ACELP bit-budget allocation */ } #ifdef P_MSTD if ( core != ACELP_CORE && ( element_mode == EVS_MONO || element_mode == IVAS_CPE_MSTD ) ) /* needed for mode1 core switching in EVS mono */ #else if ( core != ACELP_CORE && element_mode == EVS_MONO ) /* needed for mode1 core switching in EVS mono */ #endif { flag_hardcoded = 1; } Loading @@ -664,7 +702,11 @@ ivas_error config_acelp1( } /* Subtract signaling bits */ #ifdef P_MSTD if ( enc_dec == DEC && idchan == 1 && ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) ) #else if ( enc_dec == DEC && idchan == 1 && element_mode > EVS_MONO ) #endif { bits -= TDM_SIGNAL_BITS_READ_FROM_THE_END_OF_BS; Loading Loading @@ -745,7 +787,11 @@ ivas_error config_acelp1( /* mid-LSF Q bit-budget */ acelp_cfg->mid_lsf_bits = mid_LSF_bits_tbl[LSF_BIT_ALLOC_IDX( core_brate, coder_type )]; #ifdef P_MSTD if ( ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) && coder_type == AUDIO /*&& brate_intermed_tbl[i] < ACELP_9k60*/ ) #else if ( element_mode > EVS_MONO && coder_type == AUDIO /*&& brate_intermed_tbl[i] < ACELP_9k60*/ ) #endif { acelp_cfg->mid_lsf_bits = 5; /* primary channel: do nothing */ Loading Loading @@ -839,7 +885,11 @@ ivas_error config_acelp1( * LP filtering of the adaptive excitation *-----------------------------------------------------------------*/ #ifdef P_MSTD if ( idchan > 0 && ( element_mode > EVS_MONO && element_mode != IVAS_CPE_MSTD ) ) #else if ( idchan > 0 && element_mode > EVS_MONO ) #endif { acelp_cfg->ltf_mode = FULL_BAND; } Loading Loading @@ -1085,7 +1135,11 @@ ivas_error config_acelp1( } /* algebraic codebook bit-budget */ #ifdef P_MSTD if ( flag_hardcoded || ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE && total_brate != ACELP_31k30 ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #else if ( flag_hardcoded || ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #endif { for ( i = 0; i < nb_subfr; i++ ) { Loading Loading @@ -1172,7 +1226,11 @@ ivas_error config_acelp1( } /* AVQ codebook */ #ifdef P_MSTD if ( ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE && total_brate != ACELP_31k30 ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #else if ( ( core_brate_inp >= MIN_BRATE_AVQ_EXC && coder_type != INACTIVE ) || ( total_brate > MAX_GSC_INACTIVE_BRATE && coder_type == INACTIVE ) ) #endif { for ( i = 0; i < nb_subfr; i++ ) { Loading @@ -1187,7 +1245,11 @@ ivas_error config_acelp1( bits -= G_AVQ_BITS; } #ifdef P_MSTD if ( core_brate_inp >= MIN_BRATE_AVQ_EXC && core_brate_inp <= MAX_BRATE_AVQ_EXC_TD && coder_type == GENERIC && total_brate != ACELP_31k30 ) #else if ( core_brate_inp >= MIN_BRATE_AVQ_EXC && core_brate_inp <= MAX_BRATE_AVQ_EXC_TD && coder_type == GENERIC ) #endif { /* harm. flag ACELP AVQ */ bits--; Loading Loading @@ -1304,10 +1366,15 @@ ivas_error config_acelp1( { acelp_cfg->ubits = 0; } #ifdef P_MSTD else if ( ( flag_hardcoded && core == ACELP_CORE && bits != 0 ) && ( coder_type != AUDIO ) ) #else else if ( flag_hardcoded && core == ACELP_CORE && bits != 0 ) #endif { #ifdef DEBUGGING IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d.\n", (int32_t) bits, frame ); /* IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d.\n", (int32_t) bits, frame ); */ IVAS_ERROR( IVAS_ERR_INTERNAL, "ERROR: bit-budget incorrect (%d bits) in frame %d. %d-%d\n", (int32_t) bits, frame, coder_type, nb_subfr ); #endif } else if ( bits > 0 && !( coder_type == UNVOICED && tdm_low_rate_mode == 1 && element_mode == IVAS_CPE_TD ) ) Loading Loading @@ -1393,6 +1460,12 @@ ivas_error config_acelp1( acelp_cfg->lsf_bits = 42; } } #ifdef P_MSTD else if ( element_mode == IVAS_CPE_MSTD && coder_type == AUDIO ) { acelp_cfg->ubits = 0; } #endif else { acelp_cfg->ubits = bits; Loading
lib_com/bitstream.c +4 −0 Original line number Diff line number Diff line Loading @@ -2050,7 +2050,11 @@ ivas_error read_indices( } else { #ifdef P_MSTD ; #else st_ivas->element_mode_init = -1; #endif } } else /* AMRWB or EVS */ Loading
lib_com/cnst.h +82 −0 Original line number Diff line number Diff line Loading @@ -119,7 +119,11 @@ enum{ #define ACTIVE_FRAME 0xFF #define SID_FRAME 0xFA #define ZERO_FRAME 0xF0 #ifdef P_MSTD #define FRAME_SIZE_NB 14 #else #define FRAME_SIZE_NB 13 #endif #define RATE_MODE_MAX 2 /* Number of rate mode */ #define BANDWIDTH_MODE_MAX 2 /* Number of different bandwidth (NB/WB-FB) */ Loading Loading @@ -202,6 +206,13 @@ enum{ #define ACELP_32k 32000 /* ACELP core layer at 32 kbps */ #define ACELP_48k 48000 /* ACELP core layer at 48 kbps */ #define ACELP_64k 64000 /* ACELP core layer at 64 kbps */ #ifdef P_MSTD #define ACELP_31k30 31300 #define ACELP_28k30 28300 #define ACELP_28k50 28500 #define ACELP_29k50 29500 #define ACELP_29k70 29700 #endif #define HQ_16k40 16400 /* HQ core at 16.4 kbps */ #define HQ_13k20 13200 /* HQ core at 13.2 kbps */ Loading Loading @@ -229,12 +240,21 @@ enum{ #define GSC_LRES_GAINQ_LIMIT 3000 /* Bitrate where the low resolution quantization starts for the GSC */ #define GSC_LRES_NB_NITS 10 /* Number of bits gained by using the low resolution quantization */ #ifdef P_MSTD #define SIZE_BRATE_TBL 12 #define SIZE_BRATE_INTERMED_TBL 26 #define BRATE2IDX( brate ) ( brate == ACELP_5k00 ? 0 : brate == ACELP_6k15 ? 1 : brate == ACELP_7k20 ? 2 : brate == ACELP_8k00 ? 3 : brate == ACELP_9k60 ? 4 : brate == ACELP_11k60 ? 5 : brate == ACELP_12k15 ? 6 : brate == ACELP_12k85 ? 7 : brate == ACELP_13k20 ? 8 : brate == ACELP_14k80 ? 9 : brate == ACELP_16k40 ? 10 : brate == ACELP_22k60 ? 11 : brate == ACELP_24k40 ? 12 : brate == ACELP_29k00 ? 13 : brate == ACELP_29k20 ? 14 : brate == ACELP_30k20 ? 15 : brate == ACELP_30k40 ? 16 : brate == ACELP_32k ? 17 : brate == ACELP_48k ? 18 : brate == ACELP_64k ? 19 : brate == HQ_96k ? 20 : brate == HQ_128k ? 21 : brate == ACELP_28k30 ? 22 : brate == ACELP_28k50 ? 23 : brate == ACELP_29k50 ? 24 : brate == ACELP_29k70 ? 25 : -1 ) #define BRATE2IDX16k( brate ) ( brate == ACELP_8k00 ? 0 : brate == ACELP_14k80 || brate == ACELP_16k40 ? 1 : brate == ACELP_22k60 ? 2 : brate == ACELP_24k40 ? 3 : brate == ACELP_29k00 ? 4 : brate == ACELP_29k20 ? 5 : brate == ACELP_30k20 ? 6 : brate == ACELP_30k40 ? 7 : brate == ACELP_32k ? 8 : brate == ACELP_48k ? 9 : brate == ACELP_64k ? 10 : brate == ACELP_28k30 ? 11 : brate == ACELP_28k50 ? 12 : brate == ACELP_29k50 ? 13 : brate == ACELP_29k70 ? 14 : -1 ) #else #define SIZE_BRATE_TBL 11 #define SIZE_BRATE_INTERMED_TBL 22 #define BRATE2IDX( brate ) ( brate == ACELP_5k00 ? 0 : brate == ACELP_6k15 ? 1 : brate == ACELP_7k20 ? 2 : brate == ACELP_8k00 ? 3 : brate == ACELP_9k60 ? 4 : brate == ACELP_11k60 ? 5 : brate == ACELP_12k15 ? 6 : brate == ACELP_12k85 ? 7 : brate == ACELP_13k20 ? 8 : brate == ACELP_14k80 ? 9 : brate == ACELP_16k40 ? 10 : brate == ACELP_22k60 ? 11 : brate == ACELP_24k40 ? 12 : brate == ACELP_29k00 ? 13 : brate == ACELP_29k20 ? 14 : brate == ACELP_30k20 ? 15 : brate == ACELP_30k40 ? 16 : brate == ACELP_32k ? 17 : brate == ACELP_48k ? 18 : brate == ACELP_64k ? 19 : brate == HQ_96k ? 20 : brate == HQ_128k ? 21 : -1 ) #define BRATE2IDX16k( brate ) ( brate == ACELP_8k00 ? 0 : brate == ACELP_14k80 || brate == ACELP_16k40 ? 1 : brate == ACELP_22k60 ? 2 : brate == ACELP_24k40 ? 3 : brate == ACELP_29k00 ? 4 : brate == ACELP_29k20 ? 5 : brate == ACELP_30k20 ? 6 : brate == ACELP_30k40 ? 7 : brate == ACELP_32k ? 8 : brate == ACELP_48k ? 9 : brate == ACELP_64k ? 10 : -1 ) #endif /* Combine parameters into a single index (used to retrieve number of bits from bit allocation tables) */ #define LSF_BIT_ALLOC_IDX( brate, ctype ) ( 6 * BRATE2IDX( brate ) + ( ctype ) ) Loading @@ -252,7 +272,11 @@ enum{ /* Combine coder_type, bandwidth, formant sharpening flag, and channel-aware flag into one indice */ #define SIG2IND( ctype, bw, sf, ca_rf ) ( ctype | ( bw << 3 ) | ( sf << 6 ) | ( ca_rf << 7 ) ) #ifdef P_MSTD #define MAX_ACELP_SIG 112 #else #define MAX_ACELP_SIG 100 #endif /*----------------------------------------------------------------------------------* * Bitstream indices Loading Loading @@ -913,8 +937,13 @@ enum #define N_LTP_GAIN_MEMS 4 #ifdef P_MSTD #define N_TCX_STARTLINE_NOISE_WB 12 #define N_TCX_STARTLINE_NOISE_SWB 10 #else #define N_TCX_STARTLINE_NOISE_WB 11 #define N_TCX_STARTLINE_NOISE_SWB 9 #endif /*----------------------------------------------------------------------------------* * TNS constants Loading Loading @@ -2221,5 +2250,58 @@ enum VOIP_RTPDUMP }; #ifdef P_MSTD #define MSTD_PRI_BPS (ACELP_31k30) #define MSTD_SEC_BPS (ACELP_16k40) #define MSTD_TCX_PRI_BPS (24000) #define MSTD_TCX_SEC_BPS (23700) /*----------------------------------------------------------------------------------*/ #define IVAS_MSTD_SIGNALING_NBITS_SWITCH (2) #define IVAS_MSTD_SIGNALING_NBITS_MODE (2) #define IVAS_MSTD_SIGNALING_NBITS_ADD (IVAS_MSTD_SIGNALING_NBITS_MODE+IVAS_MSTD_SIGNALING_NBITS_SWITCH) #define SWITCH_MSTD (0) #define SWITCH_MDCT (1) #define SWITCH_TO_MDCT (2) #define SWITCH_TO_MSTD (3) #define SWITCH_ENC_MSTD (0) #define SWITCH_ENC_MDCT (1) #define SWITCH_ENC_TO_MDCT (2) #define SWITCH_ENC_TO_MSTD1 (3) #define SWITCH_ENC_TO_MSTD0 (4) /* #define MSTD_NOVA_NS ( 5000000L ) */ /* mixing overlap length */ #define MSTD_TRANS_NUM ( 640 ) #define MSTD_NOVA_NS ( 5000000L ) /* mixing overlap length */ #define MSTD_MSOVA_NS ( 1000000L ) /* gain, itd mixing overlap length */ #define MSTD_UPMIX_DELAY (ACELP_LOOK_NS + DELAY_FIR_RESAMPL_NS + DELAY_BWE_TOTAL_NS) #define MSTD_ITD_FITDELTA (4) #define MSTD_ITD_FITMAX (3) #define MSTD_ITD_FILTLENG (13) #define MSTD_ITD_FILTHLENG (7) #define MSTD_ITD_FILTDNUM (23) #define MSTD_ITD_ETHRE ( 40.0f ) #define MSTD_LRG_ETHRE ( 40.0f ) #define MSTD_LRG_MAX ( 1.1f ) #define MSTD_LRG_MIN ( 0.9f ) #define MSTD_HOLD_CNT ( 10 ) #define MSTD_HOLD_MAXCNT ( 20 ) /* #define MSTD_MODE_DET_THRE_HI ( 0.812368973f ) */ #define MSTD_MODE_DET_THRE_HI ( 0.90f ) #define MSTD_MODE_DET_THRE_LO ( 0.50f ) #define MSTD_MODE_DET_THRE_MSTDBOOST ( 0.80f ) #define MSTD_MODE_DET_BETHRE ( 0.20f ) #endif /* clang-format on */ #endif /* CNST_H */