From cf1893bda178e2ce83b084b595f2a373081d625c Mon Sep 17 00:00:00 2001 From: knj Date: Wed, 26 Jul 2023 12:50:12 +0200 Subject: [PATCH 1/5] fix infinite CNG in ISM decoder when going to silence --- lib_com/ivas_prot.h | 7 ++++++ lib_com/options.h | 2 +- lib_dec/ivas_dec.c | 21 ++++++++++++++++ lib_dec/ivas_ism_dtx_dec.c | 51 ++++++++++++++++++++++++++++++++++++++ lib_enc/ivas_ism_dtx_enc.c | 1 - 5 files changed, 80 insertions(+), 2 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index 885de08281..ec2bf34a87 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -1163,6 +1163,13 @@ void ivas_get_ism_sid_quan_bitbudget( int16_t *nBits_sce_id /* o : number of Q bits for sce_id_dtx */ ); +#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE +void ivas_ism_dtx_limit_noise_energy_for_near_silence( + SCE_DEC_HANDLE hSCE[], + const int16_t sce_id_dtx, + const int16_t nchan_transport +); +#endif /*----------------------------------------------------------------------------------* * DFT Stereo prototypes diff --git a/lib_com/options.h b/lib_com/options.h index c2bc0b866b..4bfa04362e 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -209,6 +209,7 @@ #define FIX_615_UBSAN_SPAR_TO_DIRAC /*Dlb : Fix for UBSAN issue 615*/ #define FIX_626_VARIABLE_TYPE_MDCT_CONC /* FhG: trivial fix to fix USAN error */ #define FIX_616_DIV_ZERO_MCT /*FhG : Fix UBSAN division by zero error of issue 616*/ +#define FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* FhG: fix for cng in ISM DTX on sudden silence periods */ /* ################## End BE DEVELOPMENT switches ######################### */ @@ -220,7 +221,6 @@ /* ##################### End NON-BE CR switches ########################### */ - /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 5ca878a00e..2ab37bb42b 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -180,6 +180,16 @@ ivas_error ivas_dec( { return error; } +#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE + + /* decode dominant object first so we can limit the noise energy of the other objects */ + if ( ( error = ivas_sce_dec( st_ivas, st_ivas->hISMDTX.sce_id_dtx, &output[st_ivas->hISMDTX.sce_id_dtx], output_frame, nb_bits_metadata[st_ivas->hISMDTX.sce_id_dtx] ) ) ) + { + return error; + } + + ivas_ism_dtx_limit_noise_energy_for_near_silence( st_ivas->hSCE, st_ivas->hISMDTX.sce_id_dtx, st_ivas->nchan_transport ); +#endif } else if ( st_ivas->ism_mode == ISM_MODE_PARAM ) { @@ -198,10 +208,21 @@ ivas_error ivas_dec( for ( n = 0; n < st_ivas->nchan_transport; n++ ) { +#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE + /* for DTX frames, dominant object has already been decoded before */ + if ( !( ( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) && n == st_ivas->hISMDTX.sce_id_dtx ) ) + { + if ( ( error = ivas_sce_dec( st_ivas, n, &output[n], output_frame, nb_bits_metadata[n] ) ) != IVAS_ERR_OK ) + { + return error; + } + } +#else if ( ( error = ivas_sce_dec( st_ivas, n, &output[n], output_frame, nb_bits_metadata[n] ) ) != IVAS_ERR_OK ) { return error; } +#endif /* HP filtering */ hp20( output[n], output_frame, st_ivas->mem_hp20_out[n], output_Fs ); diff --git a/lib_dec/ivas_ism_dtx_dec.c b/lib_dec/ivas_ism_dtx_dec.c index 1c48050bee..bb473f0522 100644 --- a/lib_dec/ivas_ism_dtx_dec.c +++ b/lib_dec/ivas_ism_dtx_dec.c @@ -31,6 +31,7 @@ *******************************************************************************************************/ #include +#include #include "options.h" #include "ivas_prot.h" #include "prot.h" @@ -156,3 +157,53 @@ ivas_error ivas_ism_dtx_dec( return IVAS_ERR_OK; } + +#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE +/*-------------------------------------------------------------------* + * ivs_ism_dtx_limit_noise_energy_for_near_silence + * + * for DTX frames where the energy of the sent noise estimate of the dominant object + * is near silence, limit the other objects CNG energies to the same level + * + *-------------------------------------------------------------------*/ +void ivas_ism_dtx_limit_noise_energy_for_near_silence( + SCE_DEC_HANDLE hSCE[], + const int16_t sce_id_dtx, + const int16_t nchan_transport ) +{ + float cng_noise_nrg_dominant; + int16_t cng_noise_level_len; + HANDLE_FD_CNG_COM hFdCngCom; + + hFdCngCom = hSCE[sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom; + cng_noise_level_len = hFdCngCom->stopFFTbin - hFdCngCom->startBand; + cng_noise_nrg_dominant = dotp( hFdCngCom->cngNoiseLevel, hFdCngCom->cngNoiseLevel, cng_noise_level_len ); + + if ( cng_noise_nrg_dominant < 1.f ) + { + for ( int16_t n = 0; n < nchan_transport; n++ ) + { + float cng_noise_nrg_obj; + + if ( n == sce_id_dtx ) + { + continue; + } + + hFdCngCom = hSCE[n]->hCoreCoder[0]->hFdCngDec->hFdCngCom; + cng_noise_level_len = hFdCngCom->stopFFTbin - hFdCngCom->startBand; + cng_noise_nrg_obj = dotp( hFdCngCom->cngNoiseLevel, hFdCngCom->cngNoiseLevel, cng_noise_level_len ); + + if ( cng_noise_nrg_obj > cng_noise_nrg_dominant ) + { + float fac; + + fac = sqrtf( cng_noise_nrg_dominant / cng_noise_nrg_obj ); + v_multc( hFdCngCom->cngNoiseLevel, fac, hFdCngCom->cngNoiseLevel, cng_noise_level_len ); + } + } + } + + return; +} +#endif diff --git a/lib_enc/ivas_ism_dtx_enc.c b/lib_enc/ivas_ism_dtx_enc.c index b9272ad245..c502bedf6c 100644 --- a/lib_enc/ivas_ism_dtx_enc.c +++ b/lib_enc/ivas_ism_dtx_enc.c @@ -312,7 +312,6 @@ void ivas_ism_get_sce_id_dtx( SCE_ENC_HANDLE hSCE[MAX_SCE], /* i/o: SCE encoder structure */ const int16_t nchan_transport, /* i : number of transport channels */ const int16_t input_frame /* i : input frame length per channel */ - ) { float tmp_energy[MAX_NUM_OBJECTS]; -- GitLab From e465b3d0d7a17803d4ff7bce40ca4f462c625e85 Mon Sep 17 00:00:00 2001 From: knj Date: Wed, 26 Jul 2023 14:10:46 +0200 Subject: [PATCH 2/5] add missing comparison in error assignment --- lib_dec/ivas_dec.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 2ab37bb42b..81736d92bd 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -183,7 +183,7 @@ ivas_error ivas_dec( #ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* decode dominant object first so we can limit the noise energy of the other objects */ - if ( ( error = ivas_sce_dec( st_ivas, st_ivas->hISMDTX.sce_id_dtx, &output[st_ivas->hISMDTX.sce_id_dtx], output_frame, nb_bits_metadata[st_ivas->hISMDTX.sce_id_dtx] ) ) ) + if ( ( error = ivas_sce_dec( st_ivas, st_ivas->hISMDTX.sce_id_dtx, &output[st_ivas->hISMDTX.sce_id_dtx], output_frame, nb_bits_metadata[st_ivas->hISMDTX.sce_id_dtx] ) ) != IVAS_ERR_OK ) { return error; } -- GitLab From 9cbf52298dc9de672c6ef452b572463f525ecf5b Mon Sep 17 00:00:00 2001 From: knj Date: Wed, 26 Jul 2023 14:38:08 +0200 Subject: [PATCH 3/5] rename switch and move to correct section --- lib_com/ivas_prot.h | 2 +- lib_com/options.h | 2 +- lib_com/options.h.unchanged | 190 ++++++++++++++++++++++++++++++++++++ lib_dec/ivas_dec.c | 4 +- lib_dec/ivas_ism_dtx_dec.c | 2 +- 5 files changed, 195 insertions(+), 5 deletions(-) create mode 100644 lib_com/options.h.unchanged diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index ec2bf34a87..cf560fb1e2 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -1163,7 +1163,7 @@ void ivas_get_ism_sid_quan_bitbudget( int16_t *nBits_sce_id /* o : number of Q bits for sce_id_dtx */ ); -#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE +#ifdef CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE void ivas_ism_dtx_limit_noise_energy_for_near_silence( SCE_DEC_HANDLE hSCE[], const int16_t sce_id_dtx, diff --git a/lib_com/options.h b/lib_com/options.h index 4bfa04362e..692f2025de 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -209,7 +209,6 @@ #define FIX_615_UBSAN_SPAR_TO_DIRAC /*Dlb : Fix for UBSAN issue 615*/ #define FIX_626_VARIABLE_TYPE_MDCT_CONC /* FhG: trivial fix to fix USAN error */ #define FIX_616_DIV_ZERO_MCT /*FhG : Fix UBSAN division by zero error of issue 616*/ -#define FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* FhG: fix for cng in ISM DTX on sudden silence periods */ /* ################## End BE DEVELOPMENT switches ######################### */ @@ -218,6 +217,7 @@ /* any switch which is non-be wrt operation points tested in selection */ /* all switches in this category should start with "CR_" */ #define CR_FIX_585_MASA_2TC_DTX_EXT /* Nokia: issue 585: fixes transition artifacts in MASA 2TC DTX by applying correct condition */ +#define CR_CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* FhG: fix for cng in ISM DTX on sudden silence periods */ /* ##################### End NON-BE CR switches ########################### */ diff --git a/lib_com/options.h.unchanged b/lib_com/options.h.unchanged new file mode 100644 index 0000000000..57154a5247 --- /dev/null +++ b/lib_com/options.h.unchanged @@ -0,0 +1,190 @@ +/****************************************************************************************************** + + (C) 2022-2023 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository. All Rights Reserved. + + This software is protected by copyright law and by international treaties. + The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, + Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., + Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, + Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other + contributors to this repository retain full ownership rights in their respective contributions in + the software. This notice grants no license of any kind, including but not limited to patent + license, nor is any license granted by implication, estoppel or otherwise. + + Contributors are required to enter into the IVAS codec Public Collaboration agreement before making + contributions. + + This software is provided "AS IS", without any express or implied warranties. The software is in the + development stage. It is intended exclusively for experts who have experience with such software and + solely for the purpose of inspection. All implied warranties of non-infringement, merchantability + and fitness for a particular purpose are hereby disclaimed and excluded. + + Any dispute, controversy or claim arising under or in relation to providing this software shall be + submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in + accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and + the United Nations Convention on Contracts on the International Sales of Goods. + +*******************************************************************************************************/ + +/*==================================================================================== + EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 + ====================================================================================*/ + +#ifndef OPTIONS_H +#define OPTIONS_H + +/* clang-format off */ + /* ################### Start compiler switches ######################## */ + +#define SUPPORT_JBM_TRACEFILE /* support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */ + +/* #################### End compiler switches ######################### */ + + +/* ################### Start DEBUGGING switches ########################### */ + +#ifndef RELEASE +#define DEBUGGING /* Activate debugging part of the code */ +#endif +/*#define WMOPS*/ /* Activate complexity and memory counters */ +/*#define WMOPS_PER_FRAME*/ /* Output per-frame complexity (writes one float value per frame to the file "wmops_analysis") */ +/*#define WMOPS_DETAIL*/ /* Output detailed complexity printout for every function. Increases runtime overhead */ +/*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output detailed complexity analysis for the worst-case frame */ +/*#define MEM_COUNT_DETAILS*/ /* Output detailed memory analysis for the worst-case frame (writes to the file "mem_analysis.csv") */ + +#ifdef DEBUGGING + +/*#define DEBUG_MODE_INFO*/ /* output most important parameters to the subdirectory "res/" */ +#ifdef DEBUG_MODE_INFO +/*#define DEBUG_MODE_ACELP*/ /* output most important ACELP core parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_TCX*/ /* output most important TCX core parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_DFT*/ /* output most important DFT stereo parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_TD*/ /* output most important TD stereo parameters to the subdirectory "res/ */ +/*#define DEBUG_MODE_DIRAC*/ /* output most important DIRAC parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_MDCT*/ /* output most important MDCT parameters to the subdirectory "res/" */ +/*#define DEBUG_MODE_PARAM_MC*/ /* output Parametric MC paramters to the subdirectory "res/" */ +/*#define DEBUG_MODE_PARAM_ISM*/ /* output Parametric ISM paramters to the subdirectory "res/" */ +/*#define DEBUG_MODE_INFO_TWEAK*/ /* enable command line switch to specify subdirectory for debug info output inside "./res/" */ +/*#define DEBUG_MODE_INFO_PLC */ /* define to output PLC related parameters */ +/*#define DEBUG_MODE_INFO_ALLRAD*/ /* define to output generated HOA decoding mtx */ +/*#define DEBUG_MODE_LFE */ /* define to output LFE relevant parameters */ +#endif + +#ifdef DEBUG_MODE_MDCT +#define DEBUG_PLOT_BITS +#endif + +#define ENABLE_BITRATE_VERIFICATION /* Enable bitrate verification - use when playing with bit budget */ +/*#define DEBUG_PLOT*/ +/*#define ALLOW_BYTE_EP*/ /* allow byte fer pattern files and check fer pattern file validity */ +#define WRAP_AS_EIDXOR /* wraps FER file (as in STL_eid-xor.c/softbit.c) */ + +#define DEBUG_FORCE_MDCT_STEREO_MODE /* Force stereo mode decision for MDCT stereo: -stereo 3 1 forces L/R coding and -stereo 3 2 forces full M/S coding */ +/*#define DEBUG_STEREO_DFT_NOCORE*/ /* DFT stereo: by-pass core coder at decoder side*/ +/*#define DEBUG_STEREO_DFT_NOSTEREO*/ /* DFT stereo: by-pass stereo processing at encoder and decoder side*/ +/*#define DEBUG_STEREO_DFT_NOQRES*/ +/*#define DEBUG_STEREO_DFT_OUTRESPRED*/ /* output residual prediction signal instead of L/R*/ +/*#define DBG_STEREO_ICBWE2_TBE2K8*/ /* Enables TBE_2K8 for higher bitrates with ICBWE in operation for TD/DFT Stereo. Needs quality eval and currently only used for debugging purposes */ + +/*DirAC Debug switches*/ +/*#define DEBUG_DISABLE_DIRAC_DELAY_COMP */ /* temporarily disable delay compensation on DirAC encoder */ +/*#define DEBUG_BS_READ_WRITE*/ +/*#define DEBUG_MODE_DIRAC_NOCORE*/ +/*#define DEBUG_MODE_QMETADATA*/ /* output q_metadata parameters */ + +/*MCT Debug switches*/ +/*#define DEBUG_FORCE_MCT_CP*/ /* force MCT Stereo pairs for verification with SPAR */ +#ifdef DEBUG_FORCE_MCT_CP +/*#define DEBUG_SINGLE_CODE_OMNI*/ /* force 3 TC SBA always code W channel separately */ +#endif + +/*PLC Debug switches*/ +/*#define DEBUG_NO_TONAL_PLC*/ +/*#define DEBUG_NO_TD_TCX_PLC */ +/*#define DEBUG_FORCE_TD_TCX_CONCEALMENT*/ +/*#define DEBUG_PLC_INFO*/ + +/*#define DEBUG_EFAP_POLY_TOFILE*/ /* Write poly_select values to file in EFAP, used for generating ROM LUTs */ +/*#define TDREND_HRTF_TABLE_METHODS*/ /* Enable HRTF lookup from tables, for testing & evaluation. Supply file in table format to use. Note that a suitable HR filter lookup method should be written if the filters sample point grids are not in the formats. */ +/*#define TDREND_STANDALONE*/ /* Used when renderer is built in standalone form, without IVAS encoding/decoding (see scripts/object_renderer_standalone). This is just here to ensure this is cleaned out by prepare_instrumentation.sh */ + +/*#define DEBUG_SBA*/ /* debug DIRAC/SPAR in-out */ +#ifdef DEBUG_SBA +/*#define DEBUG_LBR_SBA*/ /* debug low bitrate SBA (SPAR+DirAC) */ +/*#define DEBUG_SBA_AUDIO_DUMP*/ /* SBA intermediate audio wav file dumping */ +/*#define DEBUG_SBA_MD_DUMP*/ /* SBA metadata and variable file dumping */ +/*#define DEBUG_SPAR_MD_TARGET_TUNING*/ /* SPAR MD target bitrate tuning debug code */ +/*#define DEBUG_SPAR_BYPASS_EVS_CODEC*/ /* bypass EVS coding in float precision, emulating EVS encoder/decoder delay */ +/*#define DEBUG_SPAR_WRITE_OUT_COV*/ /* write covariance per frame into a text file for verification */ +/*#define DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS*/ +/*#define DEBUG_AGC*/ /* debug SPAR AGC in-out */ +#endif +/*#define SPAR_HOA_DBG*/ /* SPAR HOA debug statements */ +/*#define DEBUG_BINAURAL_FILTER_DESIGN*/ /* debugging of Crend binaural filter design */ +/*#define DEBUG_AGC_ENCODER_CMD_OPTION*/ /* Ability to force enable or disable AGC behaviour in DIRAC/SPAR via command line option */ +#define DEBUG_JBM_CMD_OPTION /* ability for telling the decoder the frontend fetch size and to not delay compensate for bad frames at the beginning */ +#define VARIABLE_SPEED_DECODING /* variable speed decoding employing the JBM functioniality; move to DEBUGGING after build for disabled is fixed */ +#define DEBUG_IND_LIST_MEMORY /* raise assert() when ind_list[] runs out of memory */ +#endif + +/* #################### End DEBUGGING switches ############################ */ + + +/* keep as part of options.h */ +#define BASOP_NOGLOB /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */ + + +/* ################# Start BE DEVELOPMENT switches ######################## */ +/* only BE switches wrt operation points tested in selection */ + +/*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ + + +#define FIX_563_PARAMMC_LIMITER /* FhG: issue 563: fix ILD limiter when coming from silence w/o transient set */ +#define FIX_560_VAD_FLAG /* Eri: Issue 560 - VAD flag issue for unified stereo */ +#define FIX_549_DMX_GAIN /* FhG: issue 549: ParamISM output too quiet */ +#define FIX_470_MASA_JBM_EXT /* Nokia: Issue 470, fix MASA EXT output with JBM */ +#define ISM_FB /* issue 556: change SWB to FB coding in 1ISM at 24.4 kbps */ +#define FIX_558_PLC_DISCONT /* FhG: issue 558: fix discontinuities in DFT Stereo when switching from TCX concealment to ACELP */ +#define FIX_564 /* Nokia: Issue 564: Fix gains in JBM path for SBA with parametric binaural renderer */ +#define FIX_566_2DIR_MASA_384K /* Nokia: Issued 566: Bugfix in 384k MASA metadata encoding of second direction */ +#define FIX_568_ISM_BITRATE_SWITCHING /* Philips: Issue 568: Bugfix for renderer re-initialization by ISM and bitrate switching */ +#define FIX_565_SBA_BURST_IN_FEC /* VA: Issue 565: Fix noise burst during FEC, due to wrong total_brate initialization */ +#define FIX_562_ISM2_64KBPS /* VA: issue 562: fix ISM2 at 64kbps issue */ +#define FIX_559_EXTL_IGF_MISMATCH /* VA: issue 559: fix mismatch between st->extl and st->igf observed as crash in PlanarSBA bitrate switching */ +#define FIX_571_REVERB_NOT_ACTIVATED_ISM /* Philips: Issue 571: Reverb not activated for discrete and parametric ISM */ +#define FIX_572_LFE_LPF_ENC /* FhG: issue 572: always apply the low pass filter to the LFE channel */ +#define FIX_QMETA_SID_5k2 /* Nokia: Issue 137: enable using full 5.2k bitrate in MASA SID */ +#define FIX_578_PARAMMC_ILD_BS /* FhG: Issue 578: transmitt also center ILD in band 0 when LFE is active in 3TC ParamMC */ +#define FIX_UNCLR_ISSUE /* VoiceAge: issue 574: Fix UNCLR mis-classifications in noisy speech stereo */ +#define FIX_TCX_LOWRATE_LIMITATION /* VA: issue 577: TCX bitrate limitation only when DEBUGGING is active */ +#define FIX_575_LOW_OVERLAP_PLC_RECOVERY /* FhG: Issue 575 fix for PLC and transistion to TCX5*/ +#define FIX_569_TD_FILTER_LENGTH /* Eri: Issue 569: If an HRTF binary file exceeds the SFX_SPAT_BIN_MAX_FILTER_LENGTH the decoder crashes. This truncates the filter when generated from the model. */ +#define ISM_FB_16k4 /* VA: Issue: 579: change BW from SWB to FB in NxISM conditions to match the EVS codec */ +#define FIX_580_PARAMMC_ENER_BURSTS /* FhG: issue 580: energy bursts due to ILD holding when energy relations change too much */ +#define UPDATE_FASTCONV_SBA_FILTER /* Dlb: Issue 584: Update SBA CLDFB-Domain HRTFs */ +#define FIX_570_SF_EXT_ORIENTATION +#define FIX_593_STL_INCLUDE /* FhG: Issue 593: correct include of stl.h in lib_enc/ivas_stereo_eclvq_enc.c */ +#define FIX_583_CLANG_TRANS_DET /* FhG: Issue 583: clang left shift on ramp_up_flag in transient detector */ +#define NONBE_FIX_589_JBM_TC_OFFSETS /* FhG: issue 589: wrong offset into the TC buffers is used in some rendering paths in the JBM main rendering function */ +#define FIX_MEM_REALLOC_IND_LIST /* VA: issue 601: failure of the automatic memory re-allocation mechanism when ind_list[] buffer is depleted in MASA mode with 2 TC*/ +#define FIX_581_CLANG_OFFSET_TO_NULL /* FhG: issue 581: fix CLANG error about applying an offset to a NULL pointer */ +#define JBM_PARAMUPMIX /* Dlb: Issue 471: Integrate the Multichannel Parametric Upmix into the JBM path */ + +/* ################## End BE DEVELOPMENT switches ######################### */ + + +/* #################### Start NON-BE CR switches ########################## */ +/* any switch which is non-be wrt operation points tested in selection */ +/* all switches in this category should start with "CR_" */ + + +/* ##################### End NON-BE CR switches ########################### */ + +/* clang-format on */ + +#endif diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 81736d92bd..64fc759fb6 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -180,7 +180,7 @@ ivas_error ivas_dec( { return error; } -#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE +#ifdef CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* decode dominant object first so we can limit the noise energy of the other objects */ if ( ( error = ivas_sce_dec( st_ivas, st_ivas->hISMDTX.sce_id_dtx, &output[st_ivas->hISMDTX.sce_id_dtx], output_frame, nb_bits_metadata[st_ivas->hISMDTX.sce_id_dtx] ) ) != IVAS_ERR_OK ) @@ -208,7 +208,7 @@ ivas_error ivas_dec( for ( n = 0; n < st_ivas->nchan_transport; n++ ) { -#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE +#ifdef CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* for DTX frames, dominant object has already been decoded before */ if ( !( ( ivas_total_brate == IVAS_SID_5k2 || ivas_total_brate == FRAME_NO_DATA ) && n == st_ivas->hISMDTX.sce_id_dtx ) ) { diff --git a/lib_dec/ivas_ism_dtx_dec.c b/lib_dec/ivas_ism_dtx_dec.c index bb473f0522..5c6002983d 100644 --- a/lib_dec/ivas_ism_dtx_dec.c +++ b/lib_dec/ivas_ism_dtx_dec.c @@ -158,7 +158,7 @@ ivas_error ivas_ism_dtx_dec( return IVAS_ERR_OK; } -#ifdef FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE +#ifdef CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /*-------------------------------------------------------------------* * ivs_ism_dtx_limit_noise_energy_for_near_silence * -- GitLab From 8808300f1a29bf8a2d80d9366e8dfbcca0846435 Mon Sep 17 00:00:00 2001 From: knj Date: Wed, 26 Jul 2023 15:33:34 +0200 Subject: [PATCH 4/5] fix double renaming + remove unintentional file --- lib_com/options.h | 2 +- lib_com/options.h.unchanged | 190 ------------------------------------ 2 files changed, 1 insertion(+), 191 deletions(-) delete mode 100644 lib_com/options.h.unchanged diff --git a/lib_com/options.h b/lib_com/options.h index 692f2025de..0b61d820d8 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -217,7 +217,7 @@ /* any switch which is non-be wrt operation points tested in selection */ /* all switches in this category should start with "CR_" */ #define CR_FIX_585_MASA_2TC_DTX_EXT /* Nokia: issue 585: fixes transition artifacts in MASA 2TC DTX by applying correct condition */ -#define CR_CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* FhG: fix for cng in ISM DTX on sudden silence periods */ +#define CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /* FhG: fix for cng in ISM DTX on sudden silence periods */ /* ##################### End NON-BE CR switches ########################### */ diff --git a/lib_com/options.h.unchanged b/lib_com/options.h.unchanged deleted file mode 100644 index 57154a5247..0000000000 --- a/lib_com/options.h.unchanged +++ /dev/null @@ -1,190 +0,0 @@ -/****************************************************************************************************** - - (C) 2022-2023 IVAS codec Public Collaboration with portions copyright Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository. All Rights Reserved. - - This software is protected by copyright law and by international treaties. - The IVAS codec Public Collaboration consisting of Dolby International AB, Ericsson AB, - Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V., Huawei Technologies Co. LTD., - Koninklijke Philips N.V., Nippon Telegraph and Telephone Corporation, Nokia Technologies Oy, Orange, - Panasonic Holdings Corporation, Qualcomm Technologies, Inc., VoiceAge Corporation, and other - contributors to this repository retain full ownership rights in their respective contributions in - the software. This notice grants no license of any kind, including but not limited to patent - license, nor is any license granted by implication, estoppel or otherwise. - - Contributors are required to enter into the IVAS codec Public Collaboration agreement before making - contributions. - - This software is provided "AS IS", without any express or implied warranties. The software is in the - development stage. It is intended exclusively for experts who have experience with such software and - solely for the purpose of inspection. All implied warranties of non-infringement, merchantability - and fitness for a particular purpose are hereby disclaimed and excluded. - - Any dispute, controversy or claim arising under or in relation to providing this software shall be - submitted to and settled by the final, binding jurisdiction of the courts of Munich, Germany in - accordance with the laws of the Federal Republic of Germany excluding its conflict of law rules and - the United Nations Convention on Contracts on the International Sales of Goods. - -*******************************************************************************************************/ - -/*==================================================================================== - EVS Codec 3GPP TS26.443 Nov 04, 2021. Version 12.14.0 / 13.10.0 / 14.6.0 / 15.4.0 / 16.3.0 - ====================================================================================*/ - -#ifndef OPTIONS_H -#define OPTIONS_H - -/* clang-format off */ - /* ################### Start compiler switches ######################## */ - -#define SUPPORT_JBM_TRACEFILE /* support for JBM tracefile, which is needed for 3GPP objective/subjective testing, but not relevant for real-world implementations */ - -/* #################### End compiler switches ######################### */ - - -/* ################### Start DEBUGGING switches ########################### */ - -#ifndef RELEASE -#define DEBUGGING /* Activate debugging part of the code */ -#endif -/*#define WMOPS*/ /* Activate complexity and memory counters */ -/*#define WMOPS_PER_FRAME*/ /* Output per-frame complexity (writes one float value per frame to the file "wmops_analysis") */ -/*#define WMOPS_DETAIL*/ /* Output detailed complexity printout for every function. Increases runtime overhead */ -/*#define WMOPS_WC_FRAME_ANALYSIS*/ /* Output detailed complexity analysis for the worst-case frame */ -/*#define MEM_COUNT_DETAILS*/ /* Output detailed memory analysis for the worst-case frame (writes to the file "mem_analysis.csv") */ - -#ifdef DEBUGGING - -/*#define DEBUG_MODE_INFO*/ /* output most important parameters to the subdirectory "res/" */ -#ifdef DEBUG_MODE_INFO -/*#define DEBUG_MODE_ACELP*/ /* output most important ACELP core parameters to the subdirectory "res/" */ -/*#define DEBUG_MODE_TCX*/ /* output most important TCX core parameters to the subdirectory "res/" */ -/*#define DEBUG_MODE_DFT*/ /* output most important DFT stereo parameters to the subdirectory "res/" */ -/*#define DEBUG_MODE_TD*/ /* output most important TD stereo parameters to the subdirectory "res/ */ -/*#define DEBUG_MODE_DIRAC*/ /* output most important DIRAC parameters to the subdirectory "res/" */ -/*#define DEBUG_MODE_MDCT*/ /* output most important MDCT parameters to the subdirectory "res/" */ -/*#define DEBUG_MODE_PARAM_MC*/ /* output Parametric MC paramters to the subdirectory "res/" */ -/*#define DEBUG_MODE_PARAM_ISM*/ /* output Parametric ISM paramters to the subdirectory "res/" */ -/*#define DEBUG_MODE_INFO_TWEAK*/ /* enable command line switch to specify subdirectory for debug info output inside "./res/" */ -/*#define DEBUG_MODE_INFO_PLC */ /* define to output PLC related parameters */ -/*#define DEBUG_MODE_INFO_ALLRAD*/ /* define to output generated HOA decoding mtx */ -/*#define DEBUG_MODE_LFE */ /* define to output LFE relevant parameters */ -#endif - -#ifdef DEBUG_MODE_MDCT -#define DEBUG_PLOT_BITS -#endif - -#define ENABLE_BITRATE_VERIFICATION /* Enable bitrate verification - use when playing with bit budget */ -/*#define DEBUG_PLOT*/ -/*#define ALLOW_BYTE_EP*/ /* allow byte fer pattern files and check fer pattern file validity */ -#define WRAP_AS_EIDXOR /* wraps FER file (as in STL_eid-xor.c/softbit.c) */ - -#define DEBUG_FORCE_MDCT_STEREO_MODE /* Force stereo mode decision for MDCT stereo: -stereo 3 1 forces L/R coding and -stereo 3 2 forces full M/S coding */ -/*#define DEBUG_STEREO_DFT_NOCORE*/ /* DFT stereo: by-pass core coder at decoder side*/ -/*#define DEBUG_STEREO_DFT_NOSTEREO*/ /* DFT stereo: by-pass stereo processing at encoder and decoder side*/ -/*#define DEBUG_STEREO_DFT_NOQRES*/ -/*#define DEBUG_STEREO_DFT_OUTRESPRED*/ /* output residual prediction signal instead of L/R*/ -/*#define DBG_STEREO_ICBWE2_TBE2K8*/ /* Enables TBE_2K8 for higher bitrates with ICBWE in operation for TD/DFT Stereo. Needs quality eval and currently only used for debugging purposes */ - -/*DirAC Debug switches*/ -/*#define DEBUG_DISABLE_DIRAC_DELAY_COMP */ /* temporarily disable delay compensation on DirAC encoder */ -/*#define DEBUG_BS_READ_WRITE*/ -/*#define DEBUG_MODE_DIRAC_NOCORE*/ -/*#define DEBUG_MODE_QMETADATA*/ /* output q_metadata parameters */ - -/*MCT Debug switches*/ -/*#define DEBUG_FORCE_MCT_CP*/ /* force MCT Stereo pairs for verification with SPAR */ -#ifdef DEBUG_FORCE_MCT_CP -/*#define DEBUG_SINGLE_CODE_OMNI*/ /* force 3 TC SBA always code W channel separately */ -#endif - -/*PLC Debug switches*/ -/*#define DEBUG_NO_TONAL_PLC*/ -/*#define DEBUG_NO_TD_TCX_PLC */ -/*#define DEBUG_FORCE_TD_TCX_CONCEALMENT*/ -/*#define DEBUG_PLC_INFO*/ - -/*#define DEBUG_EFAP_POLY_TOFILE*/ /* Write poly_select values to file in EFAP, used for generating ROM LUTs */ -/*#define TDREND_HRTF_TABLE_METHODS*/ /* Enable HRTF lookup from tables, for testing & evaluation. Supply file in table format to use. Note that a suitable HR filter lookup method should be written if the filters sample point grids are not in the formats. */ -/*#define TDREND_STANDALONE*/ /* Used when renderer is built in standalone form, without IVAS encoding/decoding (see scripts/object_renderer_standalone). This is just here to ensure this is cleaned out by prepare_instrumentation.sh */ - -/*#define DEBUG_SBA*/ /* debug DIRAC/SPAR in-out */ -#ifdef DEBUG_SBA -/*#define DEBUG_LBR_SBA*/ /* debug low bitrate SBA (SPAR+DirAC) */ -/*#define DEBUG_SBA_AUDIO_DUMP*/ /* SBA intermediate audio wav file dumping */ -/*#define DEBUG_SBA_MD_DUMP*/ /* SBA metadata and variable file dumping */ -/*#define DEBUG_SPAR_MD_TARGET_TUNING*/ /* SPAR MD target bitrate tuning debug code */ -/*#define DEBUG_SPAR_BYPASS_EVS_CODEC*/ /* bypass EVS coding in float precision, emulating EVS encoder/decoder delay */ -/*#define DEBUG_SPAR_WRITE_OUT_COV*/ /* write covariance per frame into a text file for verification */ -/*#define DEBUG_SPAR_DIRAC_WRITE_OUT_PRED_PARS*/ -/*#define DEBUG_AGC*/ /* debug SPAR AGC in-out */ -#endif -/*#define SPAR_HOA_DBG*/ /* SPAR HOA debug statements */ -/*#define DEBUG_BINAURAL_FILTER_DESIGN*/ /* debugging of Crend binaural filter design */ -/*#define DEBUG_AGC_ENCODER_CMD_OPTION*/ /* Ability to force enable or disable AGC behaviour in DIRAC/SPAR via command line option */ -#define DEBUG_JBM_CMD_OPTION /* ability for telling the decoder the frontend fetch size and to not delay compensate for bad frames at the beginning */ -#define VARIABLE_SPEED_DECODING /* variable speed decoding employing the JBM functioniality; move to DEBUGGING after build for disabled is fixed */ -#define DEBUG_IND_LIST_MEMORY /* raise assert() when ind_list[] runs out of memory */ -#endif - -/* #################### End DEBUGGING switches ############################ */ - - -/* keep as part of options.h */ -#define BASOP_NOGLOB /* Disable global symbols in BASOPs, Overflow/Carry in BASOPs disabled, additional BASOPs in case of Overflow */ - - -/* ################# Start BE DEVELOPMENT switches ######################## */ -/* only BE switches wrt operation points tested in selection */ - -/*#define FIX_I4_OL_PITCH*/ /* fix open-loop pitch used for EVS core switching */ - - -#define FIX_563_PARAMMC_LIMITER /* FhG: issue 563: fix ILD limiter when coming from silence w/o transient set */ -#define FIX_560_VAD_FLAG /* Eri: Issue 560 - VAD flag issue for unified stereo */ -#define FIX_549_DMX_GAIN /* FhG: issue 549: ParamISM output too quiet */ -#define FIX_470_MASA_JBM_EXT /* Nokia: Issue 470, fix MASA EXT output with JBM */ -#define ISM_FB /* issue 556: change SWB to FB coding in 1ISM at 24.4 kbps */ -#define FIX_558_PLC_DISCONT /* FhG: issue 558: fix discontinuities in DFT Stereo when switching from TCX concealment to ACELP */ -#define FIX_564 /* Nokia: Issue 564: Fix gains in JBM path for SBA with parametric binaural renderer */ -#define FIX_566_2DIR_MASA_384K /* Nokia: Issued 566: Bugfix in 384k MASA metadata encoding of second direction */ -#define FIX_568_ISM_BITRATE_SWITCHING /* Philips: Issue 568: Bugfix for renderer re-initialization by ISM and bitrate switching */ -#define FIX_565_SBA_BURST_IN_FEC /* VA: Issue 565: Fix noise burst during FEC, due to wrong total_brate initialization */ -#define FIX_562_ISM2_64KBPS /* VA: issue 562: fix ISM2 at 64kbps issue */ -#define FIX_559_EXTL_IGF_MISMATCH /* VA: issue 559: fix mismatch between st->extl and st->igf observed as crash in PlanarSBA bitrate switching */ -#define FIX_571_REVERB_NOT_ACTIVATED_ISM /* Philips: Issue 571: Reverb not activated for discrete and parametric ISM */ -#define FIX_572_LFE_LPF_ENC /* FhG: issue 572: always apply the low pass filter to the LFE channel */ -#define FIX_QMETA_SID_5k2 /* Nokia: Issue 137: enable using full 5.2k bitrate in MASA SID */ -#define FIX_578_PARAMMC_ILD_BS /* FhG: Issue 578: transmitt also center ILD in band 0 when LFE is active in 3TC ParamMC */ -#define FIX_UNCLR_ISSUE /* VoiceAge: issue 574: Fix UNCLR mis-classifications in noisy speech stereo */ -#define FIX_TCX_LOWRATE_LIMITATION /* VA: issue 577: TCX bitrate limitation only when DEBUGGING is active */ -#define FIX_575_LOW_OVERLAP_PLC_RECOVERY /* FhG: Issue 575 fix for PLC and transistion to TCX5*/ -#define FIX_569_TD_FILTER_LENGTH /* Eri: Issue 569: If an HRTF binary file exceeds the SFX_SPAT_BIN_MAX_FILTER_LENGTH the decoder crashes. This truncates the filter when generated from the model. */ -#define ISM_FB_16k4 /* VA: Issue: 579: change BW from SWB to FB in NxISM conditions to match the EVS codec */ -#define FIX_580_PARAMMC_ENER_BURSTS /* FhG: issue 580: energy bursts due to ILD holding when energy relations change too much */ -#define UPDATE_FASTCONV_SBA_FILTER /* Dlb: Issue 584: Update SBA CLDFB-Domain HRTFs */ -#define FIX_570_SF_EXT_ORIENTATION -#define FIX_593_STL_INCLUDE /* FhG: Issue 593: correct include of stl.h in lib_enc/ivas_stereo_eclvq_enc.c */ -#define FIX_583_CLANG_TRANS_DET /* FhG: Issue 583: clang left shift on ramp_up_flag in transient detector */ -#define NONBE_FIX_589_JBM_TC_OFFSETS /* FhG: issue 589: wrong offset into the TC buffers is used in some rendering paths in the JBM main rendering function */ -#define FIX_MEM_REALLOC_IND_LIST /* VA: issue 601: failure of the automatic memory re-allocation mechanism when ind_list[] buffer is depleted in MASA mode with 2 TC*/ -#define FIX_581_CLANG_OFFSET_TO_NULL /* FhG: issue 581: fix CLANG error about applying an offset to a NULL pointer */ -#define JBM_PARAMUPMIX /* Dlb: Issue 471: Integrate the Multichannel Parametric Upmix into the JBM path */ - -/* ################## End BE DEVELOPMENT switches ######################### */ - - -/* #################### Start NON-BE CR switches ########################## */ -/* any switch which is non-be wrt operation points tested in selection */ -/* all switches in this category should start with "CR_" */ - - -/* ##################### End NON-BE CR switches ########################### */ - -/* clang-format on */ - -#endif -- GitLab From 3555947370182a8943420453fddd868f850738c7 Mon Sep 17 00:00:00 2001 From: vaclav Date: Tue, 1 Aug 2023 10:20:44 +0200 Subject: [PATCH 5/5] formal improvements --- lib_com/ivas_prot.h | 6 +++--- lib_dec/ivas_dec.c | 2 +- lib_dec/ivas_ism_dtx_dec.c | 26 ++++++++++++-------------- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/lib_com/ivas_prot.h b/lib_com/ivas_prot.h index cf560fb1e2..c70395a668 100644 --- a/lib_com/ivas_prot.h +++ b/lib_com/ivas_prot.h @@ -1165,9 +1165,9 @@ void ivas_get_ism_sid_quan_bitbudget( #ifdef CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE void ivas_ism_dtx_limit_noise_energy_for_near_silence( - SCE_DEC_HANDLE hSCE[], - const int16_t sce_id_dtx, - const int16_t nchan_transport + SCE_DEC_HANDLE hSCE[], /* i/o: SCE encoder structures */ + const int16_t sce_id_dtx, /* i : SCE DTX ID */ + const int16_t nchan_transport /* i : number of transport channels */ ); #endif diff --git a/lib_dec/ivas_dec.c b/lib_dec/ivas_dec.c index 64fc759fb6..e10e054009 100644 --- a/lib_dec/ivas_dec.c +++ b/lib_dec/ivas_dec.c @@ -182,7 +182,7 @@ ivas_error ivas_dec( } #ifdef CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE - /* decode dominant object first so we can limit the noise energy of the other objects */ + /* decode dominant object first so the noise energy of the other objects can be limited */ if ( ( error = ivas_sce_dec( st_ivas, st_ivas->hISMDTX.sce_id_dtx, &output[st_ivas->hISMDTX.sce_id_dtx], output_frame, nb_bits_metadata[st_ivas->hISMDTX.sce_id_dtx] ) ) != IVAS_ERR_OK ) { return error; diff --git a/lib_dec/ivas_ism_dtx_dec.c b/lib_dec/ivas_ism_dtx_dec.c index 5c6002983d..fada7caaec 100644 --- a/lib_dec/ivas_ism_dtx_dec.c +++ b/lib_dec/ivas_ism_dtx_dec.c @@ -158,21 +158,23 @@ ivas_error ivas_ism_dtx_dec( return IVAS_ERR_OK; } + #ifdef CR_FIX_ISM_DTX_INFINITE_CNG_ON_TRAILING_SILENCE /*-------------------------------------------------------------------* - * ivs_ism_dtx_limit_noise_energy_for_near_silence + * ivs_ism_dtx_limit_noise_energy_for_near_silence() * * for DTX frames where the energy of the sent noise estimate of the dominant object * is near silence, limit the other objects CNG energies to the same level - * *-------------------------------------------------------------------*/ + void ivas_ism_dtx_limit_noise_energy_for_near_silence( - SCE_DEC_HANDLE hSCE[], - const int16_t sce_id_dtx, - const int16_t nchan_transport ) + SCE_DEC_HANDLE hSCE[], /* i/o: SCE encoder structures */ + const int16_t sce_id_dtx, /* i : SCE DTX ID */ + const int16_t nchan_transport /* i : number of transport channels */ +) { - float cng_noise_nrg_dominant; - int16_t cng_noise_level_len; + float fac, cng_noise_nrg_obj, cng_noise_nrg_dominant; + int16_t ch, cng_noise_level_len; HANDLE_FD_CNG_COM hFdCngCom; hFdCngCom = hSCE[sce_id_dtx]->hCoreCoder[0]->hFdCngDec->hFdCngCom; @@ -181,23 +183,19 @@ void ivas_ism_dtx_limit_noise_energy_for_near_silence( if ( cng_noise_nrg_dominant < 1.f ) { - for ( int16_t n = 0; n < nchan_transport; n++ ) + for ( ch = 0; ch < nchan_transport; ch++ ) { - float cng_noise_nrg_obj; - - if ( n == sce_id_dtx ) + if ( ch == sce_id_dtx ) { continue; } - hFdCngCom = hSCE[n]->hCoreCoder[0]->hFdCngDec->hFdCngCom; + hFdCngCom = hSCE[ch]->hCoreCoder[0]->hFdCngDec->hFdCngCom; cng_noise_level_len = hFdCngCom->stopFFTbin - hFdCngCom->startBand; cng_noise_nrg_obj = dotp( hFdCngCom->cngNoiseLevel, hFdCngCom->cngNoiseLevel, cng_noise_level_len ); if ( cng_noise_nrg_obj > cng_noise_nrg_dominant ) { - float fac; - fac = sqrtf( cng_noise_nrg_dominant / cng_noise_nrg_obj ); v_multc( hFdCngCom->cngNoiseLevel, fac, hFdCngCom->cngNoiseLevel, cng_noise_level_len ); } -- GitLab