Commit 5c797638 authored by Stephane Ragot's avatar Stephane Ragot
Browse files

Merge branch '947-issues_with_stereo_dmx_evs' into 'main'

[Non-BE] Resolve "Issues with EVS compatible stereo to mono downmix (quality on specific items + use of double)" - follow-up

See merge request !1386
parents c7622916 e5723c2e
Loading
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -177,7 +177,13 @@
#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 */
#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 */  
#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 */
#define NONBE_FIX_982_OMASA_DELAY_COMP_5MS                    /* FhG : issue #982 : 5ms and 20ms output different for OMASA */
+6 −54
Original line number Diff line number Diff line
@@ -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, 
@@ -572,25 +564,9 @@ const float Stereo_dmx_s_wnd_coef_32k[L_FRAME32k >> 1] = {
    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] = {
};

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
+3 −3
Original line number Diff line number Diff line
@@ -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];
+127 −2
Original line number Diff line number Diff line
@@ -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
@@ -1275,6 +1275,32 @@ 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;

    len = input_frame >> 1;
    len2 = input_frame >> 2;
    gain_sub = gain - old_gain;

    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;

@@ -1291,7 +1317,10 @@ static void weighted_ave(
        dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp );
    }

#endif

#else

    int16_t i, len;
    float gain_tmp = 0.f, gain_sub;

@@ -1307,7 +1336,9 @@ static void weighted_ave(
    {
        dst[i] = src1[i] * gain + src2[i] * ( 1.0f - gain_tmp );
    }

#endif

    return;
}

@@ -1426,6 +1457,28 @@ 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 = input_frame >> 2;
    gain_sub = gain - old_gain;

    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;
    }

#else

    int16_t i, len;
    float gain_tmp, gain_sub;

@@ -1437,11 +1490,16 @@ static void adapt_gain(
        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;
    }

#else

    int16_t i, len;
    float gain_tmp, gain_sub;

@@ -1457,7 +1515,9 @@ static void adapt_gain(
    {
        dst[i] = src[i] * gain;
    }

#endif

    return;
}

@@ -1577,7 +1637,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 +1887,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 +1908,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 +1973,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 +2529,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;