diff --git a/ci/complexity_measurements/index_complexity.html b/ci/complexity_measurements/index_complexity.html
index 71439a4c130f3c58a75d46ce91d84216192cdc1f..78dfe6294f18e5cb99a6c464b55fa83e3cbd6cd9 100755
--- a/ci/complexity_measurements/index_complexity.html
+++ b/ci/complexity_measurements/index_complexity.html
@@ -561,18 +561,17 @@ function WMOPS_perOP() {
}
- function memTickFormatter(v, axis) {
- var decimals = axis.tickDecimals;
- var str_val = "";
- if (v > 1000000) {
- str_val = (v / 1000000).toFixed(decimals) + " MB";
- }
- else if (v > 1000) {
- str_val = (v / 1000).toFixed(decimals) + " kB";
- }
- else {
- str_val = v.toFixed(decimals) + " B";
- }
+ function memTickFormatter(val_bytes, axis) {
+ if (val_bytes == 0) return '0 B';
+
+ const decimals = 2;
+ const step = 1000;
+ const unit = ['B', 'KB', 'MB'];
+
+ var idx = Math.floor(Math.log(val_bytes) / Math.log(step));
+ var val_decimal = (val_bytes / Math.pow(step, idx)).toFixed(decimals);
+ var str_val = val_decimal + " " + unit[idx];
+
return str_val;
}
@@ -629,10 +628,7 @@ function RAM() {
var x = item.datapoint[0];
var y = item.datapoint[1];
var text = "" + item.series.id + "
"
- text += 'Score: ' + y;
-
- text += " bytes";
- text += "
";
+ text += 'Score: ' + memTickFormatter(y) + " (" + y + " B)" + "
";
if (x > 0) {
var thisValue = parseFloat(y);
@@ -769,10 +765,7 @@ function ROM() {
var x = item.datapoint[0];
var y = item.datapoint[1];
var text = "" + item.series.id + "
"
- text += 'Score: ' + y;
-
- text += " bytes";
- text += "
";
+ text += 'Score: ' + memTickFormatter(y) + " (" + y + " B)" + "
";
if (x > 0) {
var thisValue = parseFloat(y);
diff --git a/lib_com/options.h b/lib_com/options.h
index be86aa6f646b1587e9cc52be538699fa131b34c0..6dea2ea9d7bfba2b2ffc7b720c8e6266146cdb1a 100644
--- a/lib_com/options.h
+++ b/lib_com/options.h
@@ -160,6 +160,7 @@
/*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */
#define TMP_FIX_1119_SPLIT_RENDERING_VOIP /* FhG: Add error check for unsupported config: split rendering with VoIP mode */
+#define FIX_1285_RENDER_CONFIG_PTR_COMPARE /* Philips: Warning about pointer comparison in the render config reader */
/* #################### End BE switches ################################## */
@@ -172,9 +173,9 @@
#define NONBE_1273_ISM_METADATA_COUNTER /* VA: issue 1273: fix counter overflow in ISM metadata encoder */
#define NONBE_1279_COUNTER_OVERFLOW /* VA: issue 1279: Avoid possible overflow of counter st->Nb_ACELP_frames */
#define NONBE_1244_FIX_SWB_BWE_MEMORY /* VA: issue 1244: fix to SWB BWE memory in case of switching from FB coding - pending a review by Huawei */
+#define NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING /* Ericsson: issue 1180, corrected long term mute loop attnuation after 200ms in PhECU-PLC */
#define NONBE_FIX_1277_EVS_DTX_HIGH_RATE_THRESHOLD /* VA/Eri: issue 1277: Fix Mismatch in DTX high-rate threshold between EVS float and BASOP */
-
#define NONBE_1231_BASOP_819_THRESHOLD_MASA2TOTAL /* Nokia: add fix for precision limitation in comparison with masa2total energy ratio threshold to be aligned with BASOP*/
/* ##################### End NON-BE switches ########################### */
diff --git a/lib_dec/FEC_HQ_phase_ecu.c b/lib_dec/FEC_HQ_phase_ecu.c
index b908d7668d43cace9ebfc8f9f9b4f8c3f70e7a58..7e7e5d2f07b5485f17a48c28220ba3d43b28a841 100644
--- a/lib_dec/FEC_HQ_phase_ecu.c
+++ b/lib_dec/FEC_HQ_phase_ecu.c
@@ -263,10 +263,13 @@ static void trans_ana(
const int16_t time_offs, /* i : Time offset */
const float est_mus_content, /* i : 0.0=speech_like ... 1.0=Music (==st->env_stab ) */
const int16_t last_fec, /* i : signal that previous frame was concealed with fec_alg*/
- float *alpha, /* o : Magnitude modification factors for fade to average */
- float *beta, /* o : Magnitude modification factors for fade to average */
- float *beta_mute, /* o : Factor for long-term mute */
- float Xavg[LGW_MAX] /* o : Frequency group average gain to fade to */
+#ifdef NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING
+ const int16_t element_mode, /* i : element_mode req to handle EVS_MONO specific BE path */
+#endif
+ float *alpha, /* o : Magnitude modification factors for fade to average */
+ float *beta, /* o : Magnitude modification factors for fade to average */
+ float *beta_mute, /* o : Factor for long-term mute */
+ float Xavg[LGW_MAX] /* o : Frequency group average gain to fade to */
)
{
const float *w_hamm;
@@ -416,10 +419,27 @@ static void trans_ana(
{
mag_chg[k] = 0;
}
+#ifdef NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING
+ if ( element_mode != EVS_MONO )
+ {
+ if ( k == 0 && burst_len > BETA_MUTE_THR ) /* beta_mute final long term attenuation adjusted only once per frame in the first sub-band, Ref Eq(184) in 26.447 */
+ {
+ *beta_mute *= BETA_MUTE_FAC;
+ }
+ }
+ else
+ {
+ if ( burst_len > BETA_MUTE_THR ) /* legacy incorrect(too fast) EVS_MONO operation, still kept for BE. To be updated after EVS CR, ref Eq (184) in 26.447 */
+ {
+ *beta_mute *= BETA_MUTE_FAC;
+ }
+ }
+#else
if ( burst_len > BETA_MUTE_THR )
{
*beta_mute *= BETA_MUTE_FAC;
}
+#endif
alpha[k] = mag_chg[k];
beta[k] = (float) ( sqrt( 1.0f - SQR( alpha[k] ) ) * *beta_mute );
if ( k >= LGW32k - 1 )
@@ -2094,7 +2114,11 @@ static void hq_phase_ecu(
*time_offs = 0; /* IVAS reset of offset time counter, timeoffset variable later also used to calculate burst length */
}
+#ifdef NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING
+ trans_ana( prevsynth + 2 * output_frame - Lprot - *time_offs + ph_ecu_lookahead, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, *last_fec, element_mode, alpha, beta, beta_mute, Xavg );
+#else
trans_ana( prevsynth + 2 * output_frame - Lprot - *time_offs + ph_ecu_lookahead, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, *last_fec, alpha, beta, beta_mute, Xavg );
+#endif
spec_ana( prevsynth + 2 * output_frame - Lprot - *time_offs + ph_ecu_lookahead, plocs, plocsi, num_p, X_sav, output_frame, bwidth, element_mode, &noise_fac, pcorr );
if ( prev_bfi && *last_fec )
@@ -2122,7 +2146,11 @@ static void hq_phase_ecu(
*time_offs = (int16_t) INT16_MAX; /* high value --> continued muting will ensure that the now saturated seed is not creating tones */
}
+#ifdef NONBE_FIX_1180_HQMDCT_PHECU_LT_MUTING
+ trans_ana( prevsynth + 2 * output_frame - Lprot, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, 0, element_mode, alpha, beta, beta_mute, Xavg ); /* 1.0 stable-music, 0.0 speech-like */
+#else
trans_ana( prevsynth + 2 * output_frame - Lprot, mag_chg, &ph_dith, mag_chg_1st, output_frame, *time_offs, env_stab, 0, alpha, beta, beta_mute, Xavg ); /* 1.0 stable-music, 0.0 speech-like */
+#endif
}
mvr2r( X_sav, X, Lprot );
diff --git a/lib_util/render_config_reader.c b/lib_util/render_config_reader.c
index a339aa30ace617b08d70c82d281ef42ca633ca7f..377c1b22ad0e75e29d7f6147a2ec5440545c234d 100644
--- a/lib_util/render_config_reader.c
+++ b/lib_util/render_config_reader.c
@@ -2369,7 +2369,11 @@ ivas_error RenderConfigReader_read(
errorHandler( item, ERROR_VALUE_INVALID );
return IVAS_ERR_INVALID_RENDER_CONFIG;
}
+#ifdef FIX_1285_RENDER_CONFIG_PTR_COMPARE
+ if ( i >= pRenderConfigReader->nFG || pRenderConfigReader->pFG[i].pFc == NULL )
+#else
if ( i > pRenderConfigReader->nFG || &pRenderConfigReader->pFG[i] == NULL )
+#endif
{
return IVAS_ERR_INVALID_RENDER_CONFIG;
}
diff --git a/scripts/config/ivas_modes.json b/scripts/config/ivas_modes.json
index 236802a1268bcdd55fdaf95bf242eade8d3d48e6..72941df4593e4ed56c1ddb745218a483eb73df9f 100644
--- a/scripts/config/ivas_modes.json
+++ b/scripts/config/ivas_modes.json
@@ -3601,6 +3601,52 @@
]
}
},
+ "ISM+1_b{bitrate}_{bandwidth}_rs": {
+ "encmodeoption": [
+ "-ism",
+ "+1"
+ ],
+ "encoptions": [
+ "-max_band",
+ "{bandwidth}"
+ ],
+ "dec": {
+ "7_1_4": [],
+ "7_1": [],
+ "5_1_4": [],
+ "5_1_2": [],
+ "5_1": [],
+ "BINAURAL": [],
+ "BINAURAL_ROOM_IR": [],
+ "BINAURAL_ROOM_REVERB": [],
+ "HOA3": [],
+ "HOA2": [],
+ "FOA": [],
+ "mono": [],
+ "stereo": [],
+ "EXT": []
+ },
+ "in_config": "ISM1",
+ "table_name": "ISM+1@{table_bitrate} RS {bandwidth}",
+ "nummetadata": 1,
+ "metadatafilenames": [
+ "stvISM{mdi}.csv"
+ ],
+ "rs": true,
+ "amr": false,
+ "mono": false,
+ "bitrates": {
+ "wb": {
+ "all": "{sw_files_path}/sw_13k2_128k.bin"
+ },
+ "swb": {
+ "all": "{sw_files_path}/sw_13k2_128k.bin"
+ },
+ "fb": {
+ "all": "{sw_files_path}/sw_32k_128k.bin"
+ }
+ }
+ },
"ISM+1_b{bitrate}_dtx_{bandwidth}_cbr": {
"encmodeoption": [
"-ism",
@@ -3745,6 +3791,52 @@
]
}
},
+ "ISM+2_b{bitrate}_{bandwidth}_rs": {
+ "encmodeoption": [
+ "-ism",
+ "+2"
+ ],
+ "encoptions": [
+ "-max_band",
+ "{bandwidth}"
+ ],
+ "dec": {
+ "7_1_4": [],
+ "7_1": [],
+ "5_1_4": [],
+ "5_1_2": [],
+ "5_1": [],
+ "BINAURAL": [],
+ "BINAURAL_ROOM_IR": [],
+ "BINAURAL_ROOM_REVERB": [],
+ "HOA3": [],
+ "HOA2": [],
+ "FOA": [],
+ "mono": [],
+ "stereo": [],
+ "EXT": []
+ },
+ "in_config": "ISM2",
+ "table_name": "ISM+2@{table_bitrate} RS {bandwidth}",
+ "nummetadata": 2,
+ "metadatafilenames": [
+ "stvISM{mdi}.csv"
+ ],
+ "rs": true,
+ "amr": false,
+ "mono": false,
+ "bitrates": {
+ "wb": {
+ "all": "{sw_files_path}/sw_16k4_256k.bin"
+ },
+ "swb": {
+ "all": "{sw_files_path}/sw_16k4_256k.bin"
+ },
+ "fb": {
+ "all": "{sw_files_path}/sw_32k_256k.bin"
+ }
+ }
+ },
"ISM+2_b{bitrate}_dtx_{bandwidth}_cbr": {
"encmodeoption": [
"-dtx",
@@ -3897,6 +3989,52 @@
]
}
},
+ "ISM+3_b{bitrate}_{bandwidth}_rs": {
+ "encmodeoption": [
+ "-ism",
+ "+3"
+ ],
+ "encoptions": [
+ "-max_band",
+ "{bandwidth}"
+ ],
+ "dec": {
+ "7_1_4": [],
+ "7_1": [],
+ "5_1_4": [],
+ "5_1_2": [],
+ "5_1": [],
+ "BINAURAL": [],
+ "BINAURAL_ROOM_IR": [],
+ "BINAURAL_ROOM_REVERB": [],
+ "HOA3": [],
+ "HOA2": [],
+ "FOA": [],
+ "mono": [],
+ "stereo": [],
+ "EXT": []
+ },
+ "in_config": "ISM3",
+ "table_name": "ISM+3@{table_bitrate} kbps RS {bandwidth}",
+ "nummetadata": 3,
+ "metadatafilenames": [
+ "stvISM{mdi}.csv"
+ ],
+ "rs": true,
+ "amr": false,
+ "mono": false,
+ "bitrates": {
+ "wb": {
+ "all": "{sw_files_path}/sw_24k4_384k.bin"
+ },
+ "swb": {
+ "all": "{sw_files_path}/sw_24k4_384k.bin"
+ },
+ "fb": {
+ "all": "{sw_files_path}/sw_32k_384k.bin"
+ }
+ }
+ },
"ISM+3_b{bitrate}_dtx_{bandwidth}_cbr": {
"encmodeoption": [
"-dtx",
@@ -4053,6 +4191,52 @@
]
}
},
+ "ISM+4_b{bitrate}_{bandwidth}_rs": {
+ "encmodeoption": [
+ "-ism",
+ "+4"
+ ],
+ "encoptions": [
+ "-max_band",
+ "{bandwidth}"
+ ],
+ "dec": {
+ "7_1_4": [],
+ "7_1": [],
+ "5_1_4": [],
+ "5_1_2": [],
+ "5_1": [],
+ "BINAURAL": [],
+ "BINAURAL_ROOM_IR": [],
+ "BINAURAL_ROOM_REVERB": [],
+ "HOA3": [],
+ "HOA2": [],
+ "FOA": [],
+ "mono": [],
+ "stereo": [],
+ "EXT": []
+ },
+ "in_config": "ISM4",
+ "table_name": "ISM+4@{table_bitrate} kbps RS {bandwidth}",
+ "nummetadata": 4,
+ "metadatafilenames": [
+ "stvISM{mdi}.csv"
+ ],
+ "rs": true,
+ "amr": false,
+ "mono": false,
+ "bitrates": {
+ "wb": {
+ "all": "{sw_files_path}/sw_24k4_384k.bin"
+ },
+ "swb": {
+ "all": "{sw_files_path}/sw_24k4_384k.bin"
+ },
+ "fb": {
+ "all": "{sw_files_path}/sw_32k_384k.bin"
+ }
+ }
+ },
"ISM+4_b{bitrate}_dtx_{bandwidth}_cbr": {
"encmodeoption": [
"-dtx",
diff --git a/scripts/config/self_test.prm b/scripts/config/self_test.prm
index 84692916e10226eb0a7064ec92f69a98a1474c95..5b3df2cf08b1e7962b1076ee4a65a748c408e5c3 100644
--- a/scripts/config/self_test.prm
+++ b/scripts/config/self_test.prm
@@ -210,6 +210,11 @@ eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_5pct.g1
eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_5pct.g192 bit_error
../IVAS_dec MONO 16 bit_error testv/stvST48n.wav_stereo_32000_48-16_DTX_MONO_FER5.tst
+// stereo at 32 kbps, 48kHz in, 48kHz out, random FER at 18% with long bursts
+../IVAS_cod -stereo 32000 48 testv/stvST48c.wav bit
+eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_18pct_longburst.g192 bit_error
+../IVAS_dec STEREO 48 bit_error testv/stvST48c.wav_stereo_32000_48-48_STEREO_FER5_BURST.tst
+
// stereo at 48 kbps, 16kHz in, 16kHz out
../IVAS_cod -stereo 48000 16 testv/stvST16c.wav bit
../IVAS_dec STEREO 16 bit testv/stvST16c.wav_stereo_48000_16-16.tst
diff --git a/scripts/config/self_test_ltv.prm b/scripts/config/self_test_ltv.prm
index f39d56370b596004e39d1f13898ff01fe54bef93..2aad90886b5a3bc9801cf867af46dff8cb95b0b9 100644
--- a/scripts/config/self_test_ltv.prm
+++ b/scripts/config/self_test_ltv.prm
@@ -210,6 +210,11 @@ eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_5pct.g1
eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_5pct.g192 bit_error
../IVAS_dec MONO 16 bit_error testv/ltv48_STEREO.wav_stereo_32000_48-16_DTX_MONO_FER5.tst
+// stereo at 32 kbps, 48kHz in, 48kHz out, random FER at 18% with long bursts
+../IVAS_cod -stereo 32000 48 testv/ltv48_STEREO.wav bit
+eid-xor -fer -vbr -bs g192 -ep g192 bit ../scripts/dly_error_profiles/ep_18pct_longburst.g192 bit_error
+../IVAS_dec STEREO 48 bit_error testv/ltv48_STEREO.wav_stereo_32000_48-48_STEREO_FER5_BURST.tst
+
// stereo at 48 kbps, 16kHz in, 16kHz out
../IVAS_cod -stereo 48000 16 testv/ltv16_STEREO.wav bit
../IVAS_dec STEREO 16 bit testv/ltv16_STEREO.wav_stereo_48000_16-16.tst
diff --git a/scripts/dly_error_profiles/ep_18pct_longburst.g192 b/scripts/dly_error_profiles/ep_18pct_longburst.g192
new file mode 100644
index 0000000000000000000000000000000000000000..8653cbf8c31f565696245bfa66d2f1db10974757
--- /dev/null
+++ b/scripts/dly_error_profiles/ep_18pct_longburst.g192
@@ -0,0 +1 @@
+!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k!k k!k!k!k!k!k k!k!k k!k!k
\ No newline at end of file