From b248081a88827437ec1e60b00f2cd2a8a79172f4 Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Thu, 8 Feb 2024 14:49:01 +0100 Subject: [PATCH 1/5] Fading optimisation in terms of complexity. --- lib_com/options.h | 5 ++- lib_enc/ivas_stereo_dmx_evs.c | 69 ++++++++++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index e28f394469..aa98bf6944 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -168,7 +168,10 @@ #define BE_FIX_567_DOUBLE_STEREO_DMX /* NTT: Fix formal issues */ #define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ #define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */ -#define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */ +#define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */ +#ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA +#define NONBE_FIX_947_STEREO_DMX_FADOPT /* Orange: Fading optimisation */ +#endif /* ##################### End NON-BE switches ########################### */ diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index 813d10e1cf..29893d17ea 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -120,10 +120,10 @@ #define STEREO_DMX_EVS_SGC_LEGY_THRES_48 5.E8 #define STEREO_DMX_EVS_SGC_GMAX 1.4142f #define STEREO_DMX_EVS_SGC_GMIN 0.7071f -#endif #define STEREO_DMX_EVS_IPD_ILD_THRES 3.16f // 5dB #define STEREO_DMX_EVS_IPD_SF_THRES 0.05f +#endif /*-----------------------------------------------------------------------* * Local function prototypes @@ -1577,7 +1577,11 @@ void stereo_dmx_evs_enc( #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA float dmx_weight, corr; +#ifdef NONBE_FIX_947_STEREO_DMX_FADOPT + int16_t k, m, n, pha_len, fad_len, input_subframe, input_frame, n_fad_r, n_fad_g, m_fad_g, n_fad_cnt, sbfad_len; +#else int16_t k, m, n, pha_len, fad_len, input_subframe, input_frame, n_fad_r, n_fad_g, m_fad_g, n_fad_cnt; +#endif float data_f[CPE_CHANNELS][L_FRAME48k]; float mem_prev[STEREO_DMX_EVS_FAD_LEN_MAX], data_mem[STEREO_DMX_EVS_DATA_LEN_MAX]; float dmx_poc_data[L_FRAME48k], dmx_pha_data[L_FRAME48k], subframe_energy[STEREO_DMX_EVS_NB_SBFRM]; @@ -1823,7 +1827,11 @@ void stereo_dmx_evs_enc( else { hPHA->n_fad_g = input_frame - hPHA->n_fad_g - 1; +#ifdef NONBE_FIX_947_STEREO_DMX_FADOPT + hPHA->n_fad_cnt = 0; +#else hPHA->n_fad_cnt = is_transient ? 0 : n_fad_r - hPHA->n_fad_cnt; +#endif } } else if ( is_transient ) @@ -1840,6 +1848,59 @@ void stereo_dmx_evs_enc( n_fad_cnt = hPHA->n_fad_cnt; m_fad_g = input_frame - n_fad_g - 1; +#ifdef NONBE_FIX_947_STEREO_DMX_FADOPT + if ( n_fad_r == 1 ) + { + n_fad_cnt = 0; + for ( n = 0; n < fad_len; n++ ) + { + p_dmx_data[n] *= fad_g[n_fad_g++]; + p_dmx_data[n] += fad_g[m_fad_g--] * p_dmx_data_fo[n]; + } + } + else + { + n = 0; + sbfad_len = 0; + if ( n_fad_cnt != 0 ) + { + sbfad_len = min( fad_len, n_fad_r - n_fad_cnt ); + for ( ; n < sbfad_len; n++ ) + { + p_dmx_data[n] *= fad_g[n_fad_g]; + p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; + } + n_fad_cnt = 0; + n_fad_g++; + m_fad_g--; + } + + sbfad_len = (int16_t) ( ( fad_len - sbfad_len ) / n_fad_r ); + for ( k = 0; k < sbfad_len; k++ ) + { + for ( m = 0; m < n_fad_r; m++ ) + { + p_dmx_data[n] *= fad_g[n_fad_g]; + p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; + n++; + } + n_fad_g++; + m_fad_g--; + } + + for ( ; n < fad_len; n++ ) + { + p_dmx_data[n] *= fad_g[n_fad_g]; + p_dmx_data[n] += fad_g[m_fad_g] * p_dmx_data_fo[n]; + if ( ++n_fad_cnt >= n_fad_r ) + { + n_fad_cnt = 0; + n_fad_g++; + m_fad_g--; + } + } + } +#else for ( n = 0; n < fad_len; n++ ) { p_dmx_data[n] *= fad_g[n_fad_g]; @@ -1852,6 +1913,7 @@ void stereo_dmx_evs_enc( m_fad_g--; } } +#endif hPHA->n_fad_g = n_fad_g; hPHA->n_fad_cnt = n_fad_cnt; @@ -2407,8 +2469,11 @@ ivas_error stereo_dmx_evs_init_encoder( #ifndef NONBE_FIX_947_STEREO_DMX_EVS_PHA hStereoDmxEVS->hPHA->fad_len_prc = (int16_t) ( STEREO_DMX_EVS_FADE_LEN_PRC * (float) input_Fs / 1000.0f ); -#endif + fad_len = hStereoDmxEVS->hPHA->fad_len_prc; +#else fad_len = input_frame; +#endif + fad_g = hStereoDmxEVS->hPHA->fad_g_prc; fad_r = 1.0f / (float) ( fad_len + 1 ); fad_len2 = fad_len / 2; -- GitLab From cefa2a68453e44ae9356e46fdc45b5b814479ebf Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Mon, 12 Feb 2024 13:56:18 +0100 Subject: [PATCH 2/5] ROM optimisation. --- lib_enc/ivas_rom_enc.c | 60 ++++------------------------------- lib_enc/ivas_rom_enc.h | 6 ++-- lib_enc/ivas_stereo_dmx_evs.c | 28 +++++++++++++--- 3 files changed, 33 insertions(+), 61 deletions(-) diff --git a/lib_enc/ivas_rom_enc.c b/lib_enc/ivas_rom_enc.c index 3f1d7c17c1..8273e0e444 100644 --- a/lib_enc/ivas_rom_enc.c +++ b/lib_enc/ivas_rom_enc.c @@ -536,7 +536,7 @@ const float ari_bit_estimate_s17_LC[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC -const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 1] = { +const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 2] = { 0.00009518625f, 0.00038070876f, 0.00085645882f, 0.00152225529f, 0.00237784467f, 0.00342290120f, 0.00465702698f, 0.00607975212f, 0.00769053493f, 0.00948876211f, 0.01147374899f, 0.01364473980f, 0.01600090794f, 0.01854135633f, 0.02126511768f, 0.02417115495f, 0.02725836167f, 0.03052556242f, 0.03397151320f, 0.03759490201f, 0.04139434925f, 0.04536840829f, 0.04951556605f, 0.05383424350f, 0.05832279634f, 0.06297951556f, 0.06780262815f, 0.07279029773f, 0.07794062527f, 0.08325164980f, @@ -545,17 +545,9 @@ const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 1] = { 0.22781687170f, 0.23605238471f, 0.24438839446f, 0.25282172706f, 0.26134917154f, 0.26996748113f, 0.27867337446f, 0.28746353680f, 0.29633462133f, 0.30528325043f, 0.31430601697f, 0.32339948556f, 0.33256019391f, 0.34178465414f, 0.35106935407f, 0.36041075859f, 0.36980531103f, 0.37924943444f, 0.38873953302f, 0.39827199347f, 0.40784318636f, 0.41744946748f, 0.42708717932f, 0.43675265234f, 0.44644220647f, 0.45615215247f, 0.46587879332f, 0.47561842564f, 0.48536734113f, 0.49512182793f, - 0.50487817207f, 0.51463265887f, 0.52438157436f, 0.53412120668f, 0.54384784753f, 0.55355779353f, 0.56324734766f, 0.57291282068f, 0.58255053252f, 0.59215681364f, - 0.60172800653f, 0.61126046698f, 0.62075056556f, 0.63019468897f, 0.63958924141f, 0.64893064593f, 0.65821534586f, 0.66743980609f, 0.67660051444f, 0.68569398303f, - 0.69471674957f, 0.70366537867f, 0.71253646320f, 0.72132662554f, 0.73003251887f, 0.73865082846f, 0.74717827294f, 0.75561160554f, 0.76394761529f, 0.77218312830f, - 0.78031500895f, 0.78834016106f, 0.79625552909f, 0.80405809931f, 0.81174490093f, 0.81931300723f, 0.82675953671f, 0.83408165412f, 0.84127657161f, 0.84834154975f, - 0.85527389859f, 0.86207097866f, 0.86873020202f, 0.87524903320f, 0.88162499018f, 0.88785564535f, 0.89393862643f, 0.89987161734f, 0.90565235913f, 0.91127865081f, - 0.91674835020f, 0.92205937473f, 0.92720970227f, 0.93219737185f, 0.93702048444f, 0.94167720366f, 0.94616575650f, 0.95048443395f, 0.95463159171f, 0.95860565075f, - 0.96240509799f, 0.96602848680f, 0.96947443758f, 0.97274163833f, 0.97582884505f, 0.97873488232f, 0.98145864367f, 0.98399909206f, 0.98635526020f, 0.98852625101f, - 0.99051123789f, 0.99230946507f, 0.99392024788f, 0.99534297302f, 0.99657709880f, 0.99762215533f, 0.99847774471f, 0.99914354118f, 0.99961929124f, 0.99990481375f, }; -const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 1] = { +const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 2] = { 0.00002394563f, 0.00009578022f, 0.00021549689f, 0.00038308417f, 0.00059852602f, 0.00086180179f, 0.00117288627f, 0.00153174967f, 0.00193835760f, 0.00239267114f, 0.00289464674f, 0.00344423635f, 0.00404138732f, 0.00468604244f, 0.00537813998f, 0.00611761365f, 0.00690439261f, 0.00773840150f, 0.00861956044f, 0.00954778504f, 0.01052298638f, 0.01154507106f, 0.01261394118f, 0.01372949435f, 0.01489162374f, 0.01610021802f, 0.01735516144f, 0.01865633380f, 0.02000361046f, 0.02139686238f, @@ -571,26 +563,10 @@ const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 1] = { 0.31148744266f, 0.31602872341f, 0.32058762540f, 0.32516371195f, 0.32975654476f, 0.33436568391f, 0.33899068794f, 0.34363111384f, 0.34828651715f, 0.35295645195f, 0.35764047095f, 0.36233812551f, 0.36704896567f, 0.37177254021f, 0.37650839670f, 0.38125608152f, 0.38601513994f, 0.39078511611f, 0.39556555316f, 0.40035599320f, 0.40515597739f, 0.40996504598f, 0.41478273835f, 0.41960859304f, 0.42444214782f, 0.42928293972f, 0.43413050508f, 0.43898437958f, 0.44384409832f, 0.44870919580f, - 0.45357920605f, 0.45845366260f, 0.46333209856f, 0.46821404667f, 0.47309903931f, 0.47798660859f, 0.48287628638f, 0.48776760431f, 0.49266009390f, 0.49755328651f, - 0.50244671349f, 0.50733990610f, 0.51223239569f, 0.51712371362f, 0.52201339141f, 0.52690096069f, 0.53178595333f, 0.53666790144f, 0.54154633740f, 0.54642079395f, - 0.55129080420f, 0.55615590168f, 0.56101562042f, 0.56586949492f, 0.57071706028f, 0.57555785218f, 0.58039140696f, 0.58521726165f, 0.59003495402f, 0.59484402261f, - 0.59964400680f, 0.60443444684f, 0.60921488389f, 0.61398486006f, 0.61874391848f, 0.62349160330f, 0.62822745979f, 0.63295103433f, 0.63766187449f, 0.64235952905f, - 0.64704354805f, 0.65171348285f, 0.65636888616f, 0.66100931206f, 0.66563431609f, 0.67024345524f, 0.67483628805f, 0.67941237460f, 0.68397127659f, 0.68851255734f, - 0.69303578189f, 0.69754051698f, 0.70202633115f, 0.70649279473f, 0.71093947991f, 0.71536596078f, 0.71977181336f, 0.72415661564f, 0.72851994763f, 0.73286139142f, - 0.73718053115f, 0.74147695314f, 0.74575024586f, 0.75000000000f, 0.75422580852f, 0.75842726665f, 0.76260397196f, 0.76675552441f, 0.77088152635f, 0.77498158257f, - 0.77905530037f, 0.78310228955f, 0.78712216248f, 0.79111453413f, 0.79507902210f, 0.79901524667f, 0.80292283080f, 0.80680140022f, 0.81065058343f, 0.81447001175f, - 0.81825931934f, 0.82201814326f, 0.82574612347f, 0.82944290290f, 0.83310812746f, 0.83674144609f, 0.84034251077f, 0.84391097660f, 0.84744650177f, 0.85094874765f, - 0.85441737877f, 0.85785206290f, 0.86125247107f, 0.86461827756f, 0.86794916001f, 0.87124479936f, 0.87450487995f, 0.87772908952f, 0.88091711925f, 0.88406866379f, - 0.88718342126f, 0.89026109334f, 0.89330138522f, 0.89630400572f, 0.89926866722f, 0.90219508576f, 0.90508298105f, 0.90793207648f, 0.91074209915f, 0.91351277991f, - 0.91624385337f, 0.91893505796f, 0.92158613589f, 0.92419683325f, 0.92676689997f, 0.92929608988f, 0.93178416074f, 0.93423087422f, 0.93663599599f, 0.93899929566f, - 0.94132054687f, 0.94359952730f, 0.94583601865f, 0.94802980671f, 0.95018068135f, 0.95228843655f, 0.95435287043f, 0.95637378525f, 0.95835098745f, 0.96028428763f, - 0.96217350064f, 0.96401844550f, 0.96581894552f, 0.96757482822f, 0.96928592544f, 0.97095207327f, 0.97257311213f, 0.97414888675f, 0.97567924620f, 0.97716404390f, - 0.97860313762f, 0.97999638954f, 0.98134366620f, 0.98264483856f, 0.98389978198f, 0.98510837626f, 0.98627050565f, 0.98738605882f, 0.98845492894f, 0.98947701362f, - 0.99045221496f, 0.99138043956f, 0.99226159850f, 0.99309560739f, 0.99388238635f, 0.99462186002f, 0.99531395756f, 0.99595861268f, 0.99655576365f, 0.99710535326f, - 0.99760732886f, 0.99806164240f, 0.99846825033f, 0.99882711373f, 0.99913819821f, 0.99940147398f, 0.99961691583f, 0.99978450311f, 0.99990421978f, 0.99997605437f, -}; - -const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 1] = { + 0.45357920605f, 0.45845366260f, 0.46333209856f, 0.46821404667f, 0.47309903931f, 0.47798660859f, 0.48287628638f, 0.48776760431f, 0.49266009390f, 0.49755328651f, +}; + +const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 2] = { 0.00001066469f, 0.00004265829f, 0.00009597944f, 0.00017062587f, 0.00026659439f, 0.00038388092f, 0.00052248043f, 0.00068238703f, 0.00086359389f, 0.00106609329f, 0.00128987657f, 0.00153493420f, 0.00180125573f, 0.00208882979f, 0.00239764411f, 0.00272768552f, 0.00307893994f, 0.00345139239f, 0.00384502699f, 0.00425982692f, 0.00469577451f, 0.00515285116f, 0.00563103736f, 0.00613031272f, 0.00665065594f, 0.00719204483f, 0.00775445628f, 0.00833786630f, 0.00894225002f, 0.00956758164f, @@ -615,30 +591,6 @@ const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 1] = { 0.40425714674f, 0.40746442465f, 0.41067565002f, 0.41389068585f, 0.41710939500f, 0.42033164016f, 0.42355728386f, 0.42678618852f, 0.43001821639f, 0.43325322959f, 0.43649109013f, 0.43973165987f, 0.44297480059f, 0.44622037393f, 0.44946824144f, 0.45271826458f, 0.45597030469f, 0.45922422305f, 0.46247988086f, 0.46573713923f, 0.46899585921f, 0.47225590178f, 0.47551712789f, 0.47877939840f, 0.48204257416f, 0.48530651596f, 0.48857108456f, 0.49183614071f, 0.49510154512f, 0.49836715849f, - 0.50163284151f, 0.50489845488f, 0.50816385929f, 0.51142891544f, 0.51469348404f, 0.51795742584f, 0.52122060160f, 0.52448287211f, 0.52774409822f, 0.53100414079f, - 0.53426286077f, 0.53752011914f, 0.54077577695f, 0.54402969531f, 0.54728173542f, 0.55053175856f, 0.55377962607f, 0.55702519941f, 0.56026834013f, 0.56350890987f, - 0.56674677041f, 0.56998178361f, 0.57321381148f, 0.57644271614f, 0.57966835984f, 0.58289060500f, 0.58610931415f, 0.58932434998f, 0.59253557535f, 0.59574285326f, - 0.59894604691f, 0.60214501964f, 0.60533963500f, 0.60852975670f, 0.61171524865f, 0.61489597497f, 0.61807179998f, 0.62124258819f, 0.62440820435f, 0.62756851340f, - 0.63072338055f, 0.63387267120f, 0.63701625101f, 0.64015398588f, 0.64328574195f, 0.64641138564f, 0.64953078360f, 0.65264380276f, 0.65575031034f, 0.65885017380f, - 0.66194326091f, 0.66502943973f, 0.66810857859f, 0.67118054616f, 0.67424521138f, 0.67730244352f, 0.68035211216f, 0.68339408721f, 0.68642823889f, 0.68945443778f, - 0.69247255478f, 0.69548246115f, 0.69848402848f, 0.70147712872f, 0.70446163421f, 0.70743741763f, 0.71040435202f, 0.71336231083f, 0.71631116787f, 0.71925079735f, - 0.72218107386f, 0.72510187241f, 0.72801306840f, 0.73091453763f, 0.73380615634f, 0.73668780118f, 0.73955934921f, 0.74242067794f, 0.74527166531f, 0.74811218970f, - 0.75094212993f, 0.75376136529f, 0.75656977551f, 0.75936724078f, 0.76215364178f, 0.76492885963f, 0.76769277595f, 0.77044527283f, 0.77318623285f, 0.77591553909f, - 0.77863307513f, 0.78133872502f, 0.78403237337f, 0.78671390524f, 0.78938320627f, 0.79204016256f, 0.79468466080f, 0.79731658815f, 0.79993583236f, 0.80254228167f, - 0.80513582492f, 0.80771635145f, 0.81028375120f, 0.81283791462f, 0.81537873278f, 0.81790609727f, 0.82041990029f, 0.82292003461f, 0.82540639355f, 0.82787887107f, - 0.83033736170f, 0.83278176054f, 0.83521196333f, 0.83762786640f, 0.84002936669f, 0.84241636176f, 0.84478874978f, 0.84714642954f, 0.84948930047f, 0.85181726262f, - 0.85413021670f, 0.85642806402f, 0.85871070657f, 0.86097804698f, 0.86322998851f, 0.86546643511f, 0.86768729137f, 0.86989246256f, 0.87208185459f, 0.87425537409f, - 0.87641292831f, 0.87855442524f, 0.88067977351f, 0.88278888246f, 0.88488166212f, 0.88695802321f, 0.88901787716f, 0.89106113609f, 0.89308771285f, 0.89509752098f, - 0.89709047475f, 0.89906648914f, 0.90102547985f, 0.90296736332f, 0.90489205671f, 0.90679947791f, 0.90868954556f, 0.91056217902f, 0.91241729843f, 0.91425482462f, - 0.91607467923f, 0.91787678461f, 0.91966106390f, 0.92142744097f, 0.92317584048f, 0.92490618784f, 0.92661840924f, 0.92831243163f, 0.92998818275f, 0.93164559111f, - 0.93328458602f, 0.93490509755f, 0.93650705658f, 0.93809039477f, 0.93965504457f, 0.94120093924f, 0.94272801283f, 0.94423620020f, 0.94572543701f, 0.94719565974f, - 0.94864680566f, 0.95007881288f, 0.95149162029f, 0.95288516765f, 0.95425939549f, 0.95561424519f, 0.95694965897f, 0.95826557985f, 0.95956195169f, 0.96083871920f, - 0.96209582791f, 0.96333322420f, 0.96455085527f, 0.96574866918f, 0.96692661484f, 0.96808464200f, 0.96922270126f, 0.97034074407f, 0.97143872273f, 0.97251659041f, - 0.97357430113f, 0.97461180976f, 0.97562907205f, 0.97662604460f, 0.97760268488f, 0.97855895124f, 0.97949480287f, 0.98041019985f, 0.98130510314f, 0.98217947456f, - 0.98303327681f, 0.98386647347f, 0.98467902899f, 0.98547090871f, 0.98624207886f, 0.98699250653f, 0.98772215971f, 0.98843100728f, 0.98911901899f, 0.98978616551f, - 0.99043241836f, 0.99105774998f, 0.99166213370f, 0.99224554372f, 0.99280795517f, 0.99334934406f, 0.99386968728f, 0.99436896264f, 0.99484714884f, 0.99530422549f, - 0.99574017308f, 0.99615497301f, 0.99654860761f, 0.99692106006f, 0.99727231448f, 0.99760235589f, 0.99791117021f, 0.99819874427f, 0.99846506580f, 0.99871012343f, - 0.99893390671f, 0.99913640611f, 0.99931761297f, 0.99947751957f, 0.99961611908f, 0.99973340561f, 0.99982937413f, 0.99990402056f, 0.99995734171f, 0.99998933531f, }; #else diff --git a/lib_enc/ivas_rom_enc.h b/lib_enc/ivas_rom_enc.h index 1af7fb93d4..3dae881bc8 100644 --- a/lib_enc/ivas_rom_enc.h +++ b/lib_enc/ivas_rom_enc.h @@ -121,9 +121,9 @@ extern const uint16_t ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE *----------------------------------------------------------------------------------*/ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC -extern const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 1]; -extern const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 1]; -extern const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 1]; +extern const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 2]; +extern const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 2]; +extern const float Stereo_dmx_s_wnd_coef_48k[L_FRAME48k >> 2]; #else extern const float Stereo_dmx_s_wnd_coef_16k[L_FRAME16k >> 4]; extern const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 4]; diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index 9c6919f22e..c5c7eba3ec 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -1275,23 +1275,30 @@ static void weighted_ave( { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC - int16_t i, len; + int16_t i, len, len2; float gain_tmp = 0.f, gain_sub; len = input_frame >> 1; + len2 = input_frame >> 2; gain_sub = gain - old_gain; - for ( i = 0; i < len; i++ ) + for ( i = 0; i < len2; i++ ) { gain_tmp = old_gain + gain_sub * wnd[i]; dst[i] = src1[i] * gain_tmp + src2[i] * ( 1.0f - gain_tmp ); } + for ( ; i < len; i++ ) + { + gain_tmp = old_gain + gain_sub * ( 1.0f - wnd[len - i - 1] ); + dst[i] = src1[i] * gain_tmp + src2[i] * ( 1.0f - gain_tmp ); + } for ( ; i < input_frame; i++ ) { dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp ); } #else + int16_t i, len; float gain_tmp = 0.f, gain_sub; @@ -1307,7 +1314,9 @@ static void weighted_ave( { dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp ); } + #endif + return; } @@ -1426,22 +1435,31 @@ static void adapt_gain( { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC - int16_t i, len; + int16_t i, len, len2; float gain_tmp, gain_sub; len = input_frame >> 1; + len2 = len / 2; gain_sub = gain - old_gain; - for ( i = 0; i < len; i++ ) + for ( i = 0; i < len2; i++ ) { gain_tmp = old_gain + gain_sub * wnd[i]; dst[i] = src[i] * gain_tmp; } + for ( ; i < len; i++ ) + { + gain_tmp = old_gain + gain_sub * ( 1.0f - wnd[len - i - 1] ); + dst[i] = src[i] * gain_tmp; + } + for ( ; i < input_frame; i++ ) { dst[i] = src[i] * gain; } + #else + int16_t i, len; float gain_tmp, gain_sub; @@ -1457,7 +1475,9 @@ static void adapt_gain( { dst[i] = src[i] * gain; } + #endif + return; } -- GitLab From f5d9e358215d1bea78bc530ccc2be38df7ad1858 Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Mon, 12 Feb 2024 13:59:23 +0100 Subject: [PATCH 3/5] NONBE_FIX_567_DOUBLE_STEREO_DMX not defined by default. --- lib_com/options.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 6112030907..61ad676840 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -171,9 +171,9 @@ #define NONBE_FIX_922_PRECOMPUTED_HRTF_PROPERTIES /* Philips: Use pre-computed HRTF average L/R energies and IAC in all renderers */ #define NONBE_FIX_973_HODIRAC_BAND_GROUPING /* FhG: issue 973: empty parameter band in DirAC */ #define NONBE_FIX_951_MCMASA_5MS_RENDERING /* Nokia: issue #951: Differences for 5ms and 20ms rendering for McMASA at 13.2 kbps to BINAURAL */ -#define NONBE_FIX_979_OSBA_STEREO_5MS /* FhG : issue #979 : 5ms and 20ms output different for OSBA and stereo */ +#define NONBE_FIX_979_OSBA_STEREO_5MS /* FhG : issue #979 : 5ms and 20ms output different for OSBA and stereo */ #define BE_FIX_567_DOUBLE_STEREO_DMX /* NTT: Fix formal issues */ -#define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ +//#define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ #define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */ #define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA -- GitLab From 9d7458f4414e708741897ebf57f947ebf6da0709 Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Mon, 12 Feb 2024 16:32:13 +0100 Subject: [PATCH 4/5] Define NONBE_FIX_947_STEREO_DMX_ROMOPT added. --- lib_com/options.h | 7 ++++-- lib_enc/ivas_stereo_dmx_evs.c | 42 ++++++++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/lib_com/options.h b/lib_com/options.h index 61ad676840..241a2f6936 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -174,10 +174,13 @@ #define NONBE_FIX_979_OSBA_STEREO_5MS /* FhG : issue #979 : 5ms and 20ms output different for OSBA and stereo */ #define BE_FIX_567_DOUBLE_STEREO_DMX /* NTT: Fix formal issues */ //#define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ -#define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */ +#define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */ +#ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC +#define NONBE_FIX_947_STEREO_DMX_ROMOPT /* Orange: ROM optimisation for POC*/ +#endif #define NONBE_FIX_947_STEREO_DMX_EVS_PHA /* Orange: Fix issues on PHA */ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA -#define NONBE_FIX_947_STEREO_DMX_FADOPT /* Orange: Fading optimisation */ +#define NONBE_FIX_947_STEREO_DMX_FADOPT /* Orange: Fading optimisation */ #endif #define NONBE_FIX_986_MC_BW_SWITCHING /* FhG: fix crash in bw and br switching with MC */ #define NONBE_FIX_975_JBM_USAN /* FhG: Fix issue #975, USAN in JBM decoding ad 13.2kbps */ diff --git a/lib_enc/ivas_stereo_dmx_evs.c b/lib_enc/ivas_stereo_dmx_evs.c index c5c7eba3ec..11cc506c9c 100644 --- a/lib_enc/ivas_stereo_dmx_evs.c +++ b/lib_enc/ivas_stereo_dmx_evs.c @@ -1275,6 +1275,8 @@ static void weighted_ave( { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC +#ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT + int16_t i, len, len2; float gain_tmp = 0.f, gain_sub; @@ -1297,6 +1299,26 @@ static void weighted_ave( dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp ); } +#else + + int16_t i, len; + float gain_tmp = 0.f, gain_sub; + + len = input_frame >> 1; + gain_sub = gain - old_gain; + + for ( i = 0; i < len; i++ ) + { + gain_tmp = old_gain + gain_sub * wnd[i]; + dst[i] = src1[i] * gain_tmp + src2[i] * ( 1.0f - gain_tmp ); + } + for ( ; i < input_frame; i++ ) + { + dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp ); + } + +#endif + #else int16_t i, len; @@ -1435,11 +1457,13 @@ static void adapt_gain( { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC +#ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT + int16_t i, len, len2; float gain_tmp, gain_sub; len = input_frame >> 1; - len2 = len / 2; + len2 = input_frame >> 2; gain_sub = gain - old_gain; for ( i = 0; i < len2; i++ ) @@ -1453,6 +1477,22 @@ static void adapt_gain( dst[i] = src[i] * gain_tmp; } +#else + + int16_t i, len; + float gain_tmp, gain_sub; + + len = input_frame >> 1; + gain_sub = gain - old_gain; + + for ( i = 0; i < len; i++ ) + { + gain_tmp = old_gain + gain_sub * wnd[i]; + dst[i] = src[i] * gain_tmp; + } + +#endif + for ( ; i < input_frame; i++ ) { dst[i] = src[i] * gain; -- GitLab From e5723c2e59cd9e850ec68fc0744c88838f7c7563 Mon Sep 17 00:00:00 2001 From: Arnaud Lefort Date: Tue, 13 Feb 2024 18:19:25 +0100 Subject: [PATCH 5/5] NONBE_FIX_567_DOUBLE_STEREO_DMX defined by default. --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index e333514d8a..c3acf1c352 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -175,7 +175,7 @@ #define NONBE_FIX_951_MCMASA_5MS_RENDERING /* Nokia: issue #951: Differences for 5ms and 20ms rendering for McMASA at 13.2 kbps to BINAURAL */ #define NONBE_FIX_979_OSBA_STEREO_5MS /* FhG : issue #979 : 5ms and 20ms output different for OSBA and stereo */ #define BE_FIX_567_DOUBLE_STEREO_DMX /* NTT: Fix formal issues */ -//#define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ +#define NONBE_FIX_567_DOUBLE_STEREO_DMX /* Orange: Double-precision replaced by single-precision */ #define NONBE_FIX_947_STEREO_DMX_EVS_POC /* Orange: Fix clicks on POC */ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #define NONBE_FIX_947_STEREO_DMX_ROMOPT /* Orange: ROM optimisation for POC*/ -- GitLab