Loading lib_com/options.h +10 −2 Original line number Diff line number Diff line Loading @@ -119,8 +119,16 @@ #endif #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 /* #################### End BASOP porting switches ############################ */ Loading lib_enc/ivas_rom_enc.h +6 −0 Original line number Diff line number Diff line Loading @@ -112,9 +112,15 @@ extern const UWord16 ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE] * Stereo downmix to EVS ROM tables *----------------------------------------------------------------------------------*/ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT extern const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 2]; extern const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 2]; extern const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 2]; #else extern const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 1]; extern const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 1]; extern const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 1]; #endif #else extern const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 4]; extern const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 4]; Loading lib_enc/ivas_rom_enc_fx.c +64 −2 Original line number Diff line number Diff line Loading @@ -510,6 +510,66 @@ const Word32 ari_bit_estimate_s17_LC_fx[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = // Q *----------------------------------------------------------------------------------*/ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT // Q31 const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 2] = { 204411, 817566, 1839231, 3269018, 5106382, 7350624, 10000889, 13056168, 16515298, 20376962, 24639688, 29301856, 34361688, 39817260, 45666492, 51907160, 58536884, 65553148, 72953272, 80734440, 88893688, 97427912, 106333872, 115608160, 125247248, 135247472, 145605040, 156315968, 167376224, 178781552, 190527648, 202610016, 215024064, 227765072, 240828160, 254208400, 267900656, 281899744, 296200320, 310796928, 325684032, 340855968, 356306944, 372031072, 388022368, 404274752, 420782016, 437537920, 454536032, 471769920, 489232992, 506918624, 524820096, 542930496, 561243072, 579750720, 598446528, 617323264, 636373760, 655590784, 674967040, 694495104, 714167552, 733976960, 753915712, 773976192, 794150848, 814431936, 834811776, 855282624, 875836544, 896465920, 917162752, 937919168, 958727360, 979579264, 1000467072, 1021382784, 1042318400, 1063266048 }; // Q31 const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 2] = { 51423, 205686, 462776, 822667, 1285325, 1850705, 2518754, 3289407, 4162591, 5138222, 6216206, 7396441, 8678813, 10063200, 11549468, 13137475, 14827070, 16618091, 18510366, 20503712, 22597942, 24792852, 27088232, 29483864, 31979518, 34574956, 37269924, 40064172, 42957428, 45949412, 49039844, 52228420, 55514844, 58898792, 62379948, 65957972, 69632528, 73403256, 77269800, 81231792, 85288840, 89440576, 93686584, 98026464, 102459800, 106986176, 111605144, 116316264, 121119096, 126013168, 130998016, 136073168, 141238128, 146492400, 151835488, 157266880, 162786064, 168392496, 174085632, 179864960, 185729888, 191679888, 197714368, 203832752, 210034448, 216318896, 222685456, 229133536, 235662512, 242271760, 248960656, 255728544, 262574784, 269498720, 276499680, 283577024, 290730048, 297958048, 305260384, 312636288, 320085120, 327606144, 335198624, 342861856, 350595072, 358397568, 366268576, 374207360, 382213120, 390285152, 398422624, 406624768, 414890848, 423220000, 431611456, 440064448, 448578112, 457151680, 465784288, 474475136, 483223360, 492028160, 500888704, 509804096, 518773504, 527796064, 536870912, 545997184, 555174016, 564400512, 573675776, 582998976, 592369152, 601785472, 611246976, 620752768, 630301952, 639893568, 649526784, 659200640, 668914176, 678666496, 688456704, 698283776, 708146816, 718044864, 727976960, 737942208, 747939584, 757968192, 768027072, 778115200, 788231680, 798375424, 808545600, 818741184, 828961216, 839204672, 849470528, 859757952, 870065856, 880393216, 890739136, 901102592, 911482560, 921878080, 932288192, 942711808, 953147968, 963595648, 974053952, 984521728, 994998080, 1005481984, 1015972480, 1026468416, 1036968960, 1047472960, 1057979520, 1068487552 }; // Q31 const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 2] = { 22902, 91608, 206114, 366416, 572507, 824378, 1122018, 1465415, 1854554, 2289418, 2769989, 3296246, 3868167, 4485728, 5148901, 5857660, 6611973, 7411808, 8257132, 9147909, 10084099, 11065664, 12092561, 13164746, 14282175, 15444799, 16652568, 17905432, 19203336, 20546226, 21934042, 23366728, 24844222, 26366462, 27933380, 29544910, 31200986, 32901534, 34646484, 36435760, 38269288, 40146984, 42068776, 44034576, 46044300, 48097868, 50195188, 52336168, 54520724, 56748756, 59020172, 61334876, 63692768, 66093744, 68537712, 71024552, 73554176, 76126456, 78741304, 81398592, 84098208, 86840048, 89623984, 92449904, 95317680, 98227200, 101178336, 104170952, 107204936, 110280144, 113396456, 116553736, 119751848, 122990656, 126270024, 129589808, 132949864, 136350064, 139790240, 143270256, 146789968, 150349232, 153947888, 157585760, 161262736, 164978624, 168733280, 172526544, 176358256, 180228256, 184136368, 188082416, 192066256, 196087712, 200146592, 204242752, 208376000, 212546160, 216753072, 220996528, 225276352, 229592384, 233944432, 238332288, 242755792, 247214752, 251708960, 256238240, 260802384, 265401216, 270034528, 274702112, 279403808, 284139392, 288908640, 293711360, 298547360, 303416448, 308318400, 313252960, 318220000, 323219264, 328250528, 333313632, 338408288, 343534304, 348691488, 353879616, 359098432, 364347744, 369627296, 374936928, 380276320, 385645312, 391043680, 396471168, 401927520, 407412544, 412925984, 418467616, 424037216, 429634528, 435259328, 440911328, 446590336, 452296128, 458028416, 463786944, 469571520, 475381856, 481217728, 487078848, 492965024, 498875968, 504811424, 510771168, 516754912, 522762432, 528793440, 534847712, 540924928, 547024960, 553147392, 559292032, 565458624, 571646912, 577856640, 584087488, 590339264, 596611584, 602904320, 609217152, 615549760, 621901888, 628273344, 634663808, 641072960, 647500608, 653946432, 660410176, 666891520, 673390208, 679906048, 686438592, 692987712, 699553088, 706134400, 712731392, 719343808, 725971328, 732613696, 739270592, 745941760, 752626880, 759325760, 766038016, 772763456, 779501696, 786252480, 793015488, 799790528, 806577216, 813375360, 820184576, 827004608, 833835136, 840675968, 847526656, 854387072, 861256832, 868135616, 875023168, 881919232, 888823488, 895735616, 902655296, 909582336, 916516352, 923457088, 930404224, 937357504, 944316544, 951281152, 958250944, 965225728, 972205056, 979188800, 986176512, 993168000, 1000162880, 1007160960, 1014161856, 1021165248, 1028170944, 1035178560, 1042187776, 1049198400, 1056210048, 1063222464, 1070235328 }; #else // Q31 const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 1] = { 204411, 817566, 1839231, 3269018, 5106382, 7350624, 10000889, 13056168, 16515298, 20376962, Loading Loading @@ -615,6 +675,8 @@ const Word32 ari_bit_estimate_s17_LC_fx[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = // Q 2138335743, 2139226495, 2140071807, 2140871679, 2141625983, 2142334719, 2142997887, 2143615487, 2144187391, 2144713599, 2145194239, 2145629055, 2146018175, 2146361599, 2146659327, 2146911103, 2147117183, 2147277567, 2147391999, 2147460735 }; #endif #else // Q31 const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 4] = { Loading lib_enc/ivas_stereo_dmx_evs_fx.c +192 −8 Original line number Diff line number Diff line Loading @@ -102,6 +102,9 @@ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA #define STEREO_DMX_EVS_FAD_R 3 #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT #define STEREO_DMX_EVS_FAD_IR 10923 /* 1/3 in Q15 */ #endif #define STEREO_DMX_EVS_SGC_EGY_FORGETTING_Q15 29491 // 0.9f #define STEREO_DMX_EVS_SGC_GR_S 32919 // 1.00461543f #define STEREO_DMX_EVS_SGC_GIR_S 32617 // 1/1.00461543f Loading Loading @@ -1933,14 +1936,60 @@ static void weighted_ave_fx( const Word32 wnd_fx[] /* i : window coef Q31 */ ) { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT Word16 i, j, len, len2; Word32 gain_tmp_fx = 0, gain_sub_fx; move32(); len = shr( input_frame, 1 ); len2 = shr( input_frame, 2 ); gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len2; i++ ) { gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_tmp_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } FOR( ; i < len; i++ ) { j = add( i, 1 ); gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, L_sub( MAX_32, wnd_fx[sub( len, j )] ) ) ); // Q31 dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_tmp_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } #else Word16 i, len; Word32 gain_tmp_fx = 0, gain_sub_fx; move32(); #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC len = shr( input_frame, 1 ); gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len; i++ ) { gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_tmp_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } #endif #else Word16 i, len; Word32 gain_tmp_fx = 0, gain_sub_fx; move32(); len = shr( input_frame, 4 ); #endif gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len; i++ ) { Loading @@ -1954,6 +2003,8 @@ static void weighted_ave_fx( move32(); } #endif return; } Loading Loading @@ -2144,14 +2195,64 @@ static void adapt_gain_fx( const Word32 wnd_fx[] /* i : window coef Q31 */ ) { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT Word16 i, j, len, len2; Word32 gain_tmp_fx, gain_sub_fx; len = shr( input_frame, 1 ); len2 = shr( input_frame, 2 ); gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len2; i++ ) { gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 dst_fx[i] = Mpy_32_32( src_fx[i], gain_tmp_fx ); // Q16 move32(); } FOR( ; i < len; i++ ) { j = add( i, 1 ); gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, L_sub( MAX_32, wnd_fx[sub( len, j )] ) ) ); // Q31 dst_fx[i] = Mpy_32_32( src_fx[i], gain_tmp_fx ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { dst_fx[i] = Mpy_32_32( src_fx[i], gain_fx ); // Q16 move32(); } #else Word16 i, len; Word32 gain_tmp_fx, gain_sub_fx; #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC len = shr( input_frame, 1 ); // gain_sub = gain - old_gain; gain_sub_fx = L_sub( gain_fx, old_gain_fx ); // Q31 FOR( i = 0; i < len; i++ ) { // gain_tmp = old_gain + gain_sub * wnd[i]; gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 // dst[i] = src[i] * gain_tmp; dst_fx[i] = Mpy_32_32( src_fx[i], gain_tmp_fx ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { // dst[i] = src[i] * gain; dst_fx[i] = Mpy_32_32( src_fx[i], gain_fx ); // Q16 move32(); } #endif #else Word16 i, len; Word32 gain_tmp_fx, gain_sub_fx; len = shr( input_frame, 4 ); #endif // gain_sub = gain - old_gain; gain_sub_fx = L_sub( gain_fx, old_gain_fx ); // Q31 Loading @@ -2169,6 +2270,7 @@ static void adapt_gain_fx( dst_fx[i] = Mpy_32_32( src_fx[i], gain_fx ); // Q16 move32(); } #endif return; } Loading Loading @@ -2328,9 +2430,15 @@ void stereo_dmx_evs_enc_fx( #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA Word16 n; Word16 dmx_weight, corr; // Q15 Word32 data_fx[CPE_CHANNELS][L_FRAME48k]; // Q16/Q11 #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT Word16 k, m, pha_len, fad_len, sbfad_len; #else Word16 k, m, pha_len, fad_len; #endif Word32 data_fx[CPE_CHANNELS][L_FRAME48k]; // Q16/Q11 Word32 mem_prev[STEREO_DMX_EVS_FAD_LEN_MAX], data_mem[STEREO_DMX_EVS_DATA_LEN_MAX]; // Q11 Word32 *p_data_mem, *p_prev_taps, *p_curr_taps, *fad_g, *p_data; Loading Loading @@ -2725,6 +2833,9 @@ void stereo_dmx_evs_enc_fx( ELSE { hStereoDmxEVS->hPHA->n_fad_g = sub( input_frame, add( hStereoDmxEVS->hPHA->n_fad_g, 1 ) ); #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT hStereoDmxEVS->hPHA->n_fad_cnt = 0; #else IF( EQ_16( is_transient, 1 ) ) { hStereoDmxEVS->hPHA->n_fad_cnt = 0; Loading @@ -2734,6 +2845,7 @@ void stereo_dmx_evs_enc_fx( { hStereoDmxEVS->hPHA->n_fad_cnt = sub( n_fad_r, hStereoDmxEVS->hPHA->n_fad_cnt ); } #endif } } ELSE IF( is_transient ) Loading @@ -2754,6 +2866,73 @@ void stereo_dmx_evs_enc_fx( move16(); m_fad_g = sub( input_frame, add( n_fad_g, 1 ) ); #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT IF( EQ_16( n_fad_r, 1 ) ) { n_fad_cnt = 0; move16(); FOR( n = 0; n < fad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; n_fad_g = add( n_fad_g, 1 ); p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 m_fad_g = sub( m_fad_g, 1 ); } } ELSE { n = 0; sbfad_len = 0; move16(); move16(); IF( NE_16( n_fad_cnt, 0 ) ) { sbfad_len = s_min( fad_len, sub( n_fad_r, n_fad_cnt ) ); FOR( ; n < sbfad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 } n_fad_cnt = 0; move16(); n_fad_g = add( n_fad_g, 1 ); m_fad_g = sub( m_fad_g, 1 ); } sbfad_len = sub( fad_len, sbfad_len ); IF( EQ_16( n_fad_r, STEREO_DMX_EVS_FAD_R ) ) { sbfad_len = L_mult( sbfad_len, STEREO_DMX_EVS_FAD_IR ) >> 16; } FOR( k = 0; k < sbfad_len; k++ ) { FOR( m = 0; m < n_fad_r; m++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 n = add( n, 1 ); } n_fad_g = add( n_fad_g, 1 ); m_fad_g = sub( m_fad_g, 1 ); } FOR( ; n < fad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 n_fad_cnt = add( n_fad_cnt, 1 ); IF( GE_16( n_fad_cnt, n_fad_r ) ) { n_fad_cnt = 0; move16(); n_fad_g = add( n_fad_g, 1 ); m_fad_g = sub( m_fad_g, 1 ); } } } #else FOR( n = 0; n < fad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; Loading @@ -2768,6 +2947,7 @@ void stereo_dmx_evs_enc_fx( m_fad_g = sub( m_fad_g, 1 ); } } #endif hStereoDmxEVS->hPHA->n_fad_g = n_fad_g; hStereoDmxEVS->hPHA->n_fad_cnt = n_fad_cnt; Loading Loading @@ -3558,9 +3738,13 @@ ivas_error stereo_dmx_evs_init_encoder_fx( IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid sample rate\n" ); BREAK; } #endif fad_len = hStereoDmxEVS->hPHA->fad_len_prc; move16(); #else fad_len = input_frame; move16(); #endif fad_g = hStereoDmxEVS->hPHA->fad_g_prc_fx; move32(); // fad_r = 1.0f / (float) ( fad_len + 1 ); Loading Loading
lib_com/options.h +10 −2 Original line number Diff line number Diff line Loading @@ -119,8 +119,16 @@ #endif #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 /* #################### End BASOP porting switches ############################ */ Loading
lib_enc/ivas_rom_enc.h +6 −0 Original line number Diff line number Diff line Loading @@ -112,9 +112,15 @@ extern const UWord16 ECSQ_tab_vals[ECSQ_PARAM_COUNT - 1][1 + ECSQ_TAB_VALS_SIZE] * Stereo downmix to EVS ROM tables *----------------------------------------------------------------------------------*/ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT extern const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 2]; extern const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 2]; extern const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 2]; #else extern const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 1]; extern const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 1]; extern const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 1]; #endif #else extern const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 4]; extern const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 4]; Loading
lib_enc/ivas_rom_enc_fx.c +64 −2 Original line number Diff line number Diff line Loading @@ -510,6 +510,66 @@ const Word32 ari_bit_estimate_s17_LC_fx[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = // Q *----------------------------------------------------------------------------------*/ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT // Q31 const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 2] = { 204411, 817566, 1839231, 3269018, 5106382, 7350624, 10000889, 13056168, 16515298, 20376962, 24639688, 29301856, 34361688, 39817260, 45666492, 51907160, 58536884, 65553148, 72953272, 80734440, 88893688, 97427912, 106333872, 115608160, 125247248, 135247472, 145605040, 156315968, 167376224, 178781552, 190527648, 202610016, 215024064, 227765072, 240828160, 254208400, 267900656, 281899744, 296200320, 310796928, 325684032, 340855968, 356306944, 372031072, 388022368, 404274752, 420782016, 437537920, 454536032, 471769920, 489232992, 506918624, 524820096, 542930496, 561243072, 579750720, 598446528, 617323264, 636373760, 655590784, 674967040, 694495104, 714167552, 733976960, 753915712, 773976192, 794150848, 814431936, 834811776, 855282624, 875836544, 896465920, 917162752, 937919168, 958727360, 979579264, 1000467072, 1021382784, 1042318400, 1063266048 }; // Q31 const Word32 Stereo_dmx_s_wnd_coef_32k_fx[L_FRAME32k >> 2] = { 51423, 205686, 462776, 822667, 1285325, 1850705, 2518754, 3289407, 4162591, 5138222, 6216206, 7396441, 8678813, 10063200, 11549468, 13137475, 14827070, 16618091, 18510366, 20503712, 22597942, 24792852, 27088232, 29483864, 31979518, 34574956, 37269924, 40064172, 42957428, 45949412, 49039844, 52228420, 55514844, 58898792, 62379948, 65957972, 69632528, 73403256, 77269800, 81231792, 85288840, 89440576, 93686584, 98026464, 102459800, 106986176, 111605144, 116316264, 121119096, 126013168, 130998016, 136073168, 141238128, 146492400, 151835488, 157266880, 162786064, 168392496, 174085632, 179864960, 185729888, 191679888, 197714368, 203832752, 210034448, 216318896, 222685456, 229133536, 235662512, 242271760, 248960656, 255728544, 262574784, 269498720, 276499680, 283577024, 290730048, 297958048, 305260384, 312636288, 320085120, 327606144, 335198624, 342861856, 350595072, 358397568, 366268576, 374207360, 382213120, 390285152, 398422624, 406624768, 414890848, 423220000, 431611456, 440064448, 448578112, 457151680, 465784288, 474475136, 483223360, 492028160, 500888704, 509804096, 518773504, 527796064, 536870912, 545997184, 555174016, 564400512, 573675776, 582998976, 592369152, 601785472, 611246976, 620752768, 630301952, 639893568, 649526784, 659200640, 668914176, 678666496, 688456704, 698283776, 708146816, 718044864, 727976960, 737942208, 747939584, 757968192, 768027072, 778115200, 788231680, 798375424, 808545600, 818741184, 828961216, 839204672, 849470528, 859757952, 870065856, 880393216, 890739136, 901102592, 911482560, 921878080, 932288192, 942711808, 953147968, 963595648, 974053952, 984521728, 994998080, 1005481984, 1015972480, 1026468416, 1036968960, 1047472960, 1057979520, 1068487552 }; // Q31 const Word32 Stereo_dmx_s_wnd_coef_48k_fx[L_FRAME48k >> 2] = { 22902, 91608, 206114, 366416, 572507, 824378, 1122018, 1465415, 1854554, 2289418, 2769989, 3296246, 3868167, 4485728, 5148901, 5857660, 6611973, 7411808, 8257132, 9147909, 10084099, 11065664, 12092561, 13164746, 14282175, 15444799, 16652568, 17905432, 19203336, 20546226, 21934042, 23366728, 24844222, 26366462, 27933380, 29544910, 31200986, 32901534, 34646484, 36435760, 38269288, 40146984, 42068776, 44034576, 46044300, 48097868, 50195188, 52336168, 54520724, 56748756, 59020172, 61334876, 63692768, 66093744, 68537712, 71024552, 73554176, 76126456, 78741304, 81398592, 84098208, 86840048, 89623984, 92449904, 95317680, 98227200, 101178336, 104170952, 107204936, 110280144, 113396456, 116553736, 119751848, 122990656, 126270024, 129589808, 132949864, 136350064, 139790240, 143270256, 146789968, 150349232, 153947888, 157585760, 161262736, 164978624, 168733280, 172526544, 176358256, 180228256, 184136368, 188082416, 192066256, 196087712, 200146592, 204242752, 208376000, 212546160, 216753072, 220996528, 225276352, 229592384, 233944432, 238332288, 242755792, 247214752, 251708960, 256238240, 260802384, 265401216, 270034528, 274702112, 279403808, 284139392, 288908640, 293711360, 298547360, 303416448, 308318400, 313252960, 318220000, 323219264, 328250528, 333313632, 338408288, 343534304, 348691488, 353879616, 359098432, 364347744, 369627296, 374936928, 380276320, 385645312, 391043680, 396471168, 401927520, 407412544, 412925984, 418467616, 424037216, 429634528, 435259328, 440911328, 446590336, 452296128, 458028416, 463786944, 469571520, 475381856, 481217728, 487078848, 492965024, 498875968, 504811424, 510771168, 516754912, 522762432, 528793440, 534847712, 540924928, 547024960, 553147392, 559292032, 565458624, 571646912, 577856640, 584087488, 590339264, 596611584, 602904320, 609217152, 615549760, 621901888, 628273344, 634663808, 641072960, 647500608, 653946432, 660410176, 666891520, 673390208, 679906048, 686438592, 692987712, 699553088, 706134400, 712731392, 719343808, 725971328, 732613696, 739270592, 745941760, 752626880, 759325760, 766038016, 772763456, 779501696, 786252480, 793015488, 799790528, 806577216, 813375360, 820184576, 827004608, 833835136, 840675968, 847526656, 854387072, 861256832, 868135616, 875023168, 881919232, 888823488, 895735616, 902655296, 909582336, 916516352, 923457088, 930404224, 937357504, 944316544, 951281152, 958250944, 965225728, 972205056, 979188800, 986176512, 993168000, 1000162880, 1007160960, 1014161856, 1021165248, 1028170944, 1035178560, 1042187776, 1049198400, 1056210048, 1063222464, 1070235328 }; #else // Q31 const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 1] = { 204411, 817566, 1839231, 3269018, 5106382, 7350624, 10000889, 13056168, 16515298, 20376962, Loading Loading @@ -615,6 +675,8 @@ const Word32 ari_bit_estimate_s17_LC_fx[RANGE_N_CONTEXT][RANGE_N_SYMBOLS] = // Q 2138335743, 2139226495, 2140071807, 2140871679, 2141625983, 2142334719, 2142997887, 2143615487, 2144187391, 2144713599, 2145194239, 2145629055, 2146018175, 2146361599, 2146659327, 2146911103, 2147117183, 2147277567, 2147391999, 2147460735 }; #endif #else // Q31 const Word32 Stereo_dmx_s_wnd_coef_16k_fx[L_FRAME16k >> 4] = { Loading
lib_enc/ivas_stereo_dmx_evs_fx.c +192 −8 Original line number Diff line number Diff line Loading @@ -102,6 +102,9 @@ #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA #define STEREO_DMX_EVS_FAD_R 3 #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT #define STEREO_DMX_EVS_FAD_IR 10923 /* 1/3 in Q15 */ #endif #define STEREO_DMX_EVS_SGC_EGY_FORGETTING_Q15 29491 // 0.9f #define STEREO_DMX_EVS_SGC_GR_S 32919 // 1.00461543f #define STEREO_DMX_EVS_SGC_GIR_S 32617 // 1/1.00461543f Loading Loading @@ -1933,14 +1936,60 @@ static void weighted_ave_fx( const Word32 wnd_fx[] /* i : window coef Q31 */ ) { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT Word16 i, j, len, len2; Word32 gain_tmp_fx = 0, gain_sub_fx; move32(); len = shr( input_frame, 1 ); len2 = shr( input_frame, 2 ); gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len2; i++ ) { gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_tmp_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } FOR( ; i < len; i++ ) { j = add( i, 1 ); gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, L_sub( MAX_32, wnd_fx[sub( len, j )] ) ) ); // Q31 dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_tmp_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } #else Word16 i, len; Word32 gain_tmp_fx = 0, gain_sub_fx; move32(); #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC len = shr( input_frame, 1 ); gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len; i++ ) { gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_tmp_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { dst_fx[i] = L_add_sat( Mpy_32_32( src1_fx[i], gain_fx ), Mpy_32_32( src2_fx[i], L_sub( MAX_32, gain_tmp_fx ) ) ); // Q16 move32(); } #endif #else Word16 i, len; Word32 gain_tmp_fx = 0, gain_sub_fx; move32(); len = shr( input_frame, 4 ); #endif gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len; i++ ) { Loading @@ -1954,6 +2003,8 @@ static void weighted_ave_fx( move32(); } #endif return; } Loading Loading @@ -2144,14 +2195,64 @@ static void adapt_gain_fx( const Word32 wnd_fx[] /* i : window coef Q31 */ ) { #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC #ifdef NONBE_FIX_947_STEREO_DMX_ROMOPT Word16 i, j, len, len2; Word32 gain_tmp_fx, gain_sub_fx; len = shr( input_frame, 1 ); len2 = shr( input_frame, 2 ); gain_sub_fx = L_sub( gain_fx, old_gain_fx ); FOR( i = 0; i < len2; i++ ) { gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 dst_fx[i] = Mpy_32_32( src_fx[i], gain_tmp_fx ); // Q16 move32(); } FOR( ; i < len; i++ ) { j = add( i, 1 ); gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, L_sub( MAX_32, wnd_fx[sub( len, j )] ) ) ); // Q31 dst_fx[i] = Mpy_32_32( src_fx[i], gain_tmp_fx ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { dst_fx[i] = Mpy_32_32( src_fx[i], gain_fx ); // Q16 move32(); } #else Word16 i, len; Word32 gain_tmp_fx, gain_sub_fx; #ifdef NONBE_FIX_947_STEREO_DMX_EVS_POC len = shr( input_frame, 1 ); // gain_sub = gain - old_gain; gain_sub_fx = L_sub( gain_fx, old_gain_fx ); // Q31 FOR( i = 0; i < len; i++ ) { // gain_tmp = old_gain + gain_sub * wnd[i]; gain_tmp_fx = L_add( old_gain_fx, Mpy_32_32( gain_sub_fx, wnd_fx[i] ) ); // Q31 // dst[i] = src[i] * gain_tmp; dst_fx[i] = Mpy_32_32( src_fx[i], gain_tmp_fx ); // Q16 move32(); } FOR( ; i < input_frame; i++ ) { // dst[i] = src[i] * gain; dst_fx[i] = Mpy_32_32( src_fx[i], gain_fx ); // Q16 move32(); } #endif #else Word16 i, len; Word32 gain_tmp_fx, gain_sub_fx; len = shr( input_frame, 4 ); #endif // gain_sub = gain - old_gain; gain_sub_fx = L_sub( gain_fx, old_gain_fx ); // Q31 Loading @@ -2169,6 +2270,7 @@ static void adapt_gain_fx( dst_fx[i] = Mpy_32_32( src_fx[i], gain_fx ); // Q16 move32(); } #endif return; } Loading Loading @@ -2328,9 +2430,15 @@ void stereo_dmx_evs_enc_fx( #ifdef NONBE_FIX_947_STEREO_DMX_EVS_PHA Word16 n; Word16 dmx_weight, corr; // Q15 Word32 data_fx[CPE_CHANNELS][L_FRAME48k]; // Q16/Q11 #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT Word16 k, m, pha_len, fad_len, sbfad_len; #else Word16 k, m, pha_len, fad_len; #endif Word32 data_fx[CPE_CHANNELS][L_FRAME48k]; // Q16/Q11 Word32 mem_prev[STEREO_DMX_EVS_FAD_LEN_MAX], data_mem[STEREO_DMX_EVS_DATA_LEN_MAX]; // Q11 Word32 *p_data_mem, *p_prev_taps, *p_curr_taps, *fad_g, *p_data; Loading Loading @@ -2725,6 +2833,9 @@ void stereo_dmx_evs_enc_fx( ELSE { hStereoDmxEVS->hPHA->n_fad_g = sub( input_frame, add( hStereoDmxEVS->hPHA->n_fad_g, 1 ) ); #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT hStereoDmxEVS->hPHA->n_fad_cnt = 0; #else IF( EQ_16( is_transient, 1 ) ) { hStereoDmxEVS->hPHA->n_fad_cnt = 0; Loading @@ -2734,6 +2845,7 @@ void stereo_dmx_evs_enc_fx( { hStereoDmxEVS->hPHA->n_fad_cnt = sub( n_fad_r, hStereoDmxEVS->hPHA->n_fad_cnt ); } #endif } } ELSE IF( is_transient ) Loading @@ -2754,6 +2866,73 @@ void stereo_dmx_evs_enc_fx( move16(); m_fad_g = sub( input_frame, add( n_fad_g, 1 ) ); #ifdef NONBE_FIX_947_STEREO_DMX_FADOPT IF( EQ_16( n_fad_r, 1 ) ) { n_fad_cnt = 0; move16(); FOR( n = 0; n < fad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; n_fad_g = add( n_fad_g, 1 ); p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 m_fad_g = sub( m_fad_g, 1 ); } } ELSE { n = 0; sbfad_len = 0; move16(); move16(); IF( NE_16( n_fad_cnt, 0 ) ) { sbfad_len = s_min( fad_len, sub( n_fad_r, n_fad_cnt ) ); FOR( ; n < sbfad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 } n_fad_cnt = 0; move16(); n_fad_g = add( n_fad_g, 1 ); m_fad_g = sub( m_fad_g, 1 ); } sbfad_len = sub( fad_len, sbfad_len ); IF( EQ_16( n_fad_r, STEREO_DMX_EVS_FAD_R ) ) { sbfad_len = L_mult( sbfad_len, STEREO_DMX_EVS_FAD_IR ) >> 16; } FOR( k = 0; k < sbfad_len; k++ ) { FOR( m = 0; m < n_fad_r; m++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 n = add( n, 1 ); } n_fad_g = add( n_fad_g, 1 ); m_fad_g = sub( m_fad_g, 1 ); } FOR( ; n < fad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; p_dmx_data[n] = L_add( p_dmx_data[n], Mpy_32_32( fad_g[m_fad_g], p_dmx_data_fo[n] ) ); // Q26 n_fad_cnt = add( n_fad_cnt, 1 ); IF( GE_16( n_fad_cnt, n_fad_r ) ) { n_fad_cnt = 0; move16(); n_fad_g = add( n_fad_g, 1 ); m_fad_g = sub( m_fad_g, 1 ); } } } #else FOR( n = 0; n < fad_len; n++ ) { p_dmx_data[n] = Mpy_32_32( p_dmx_data[n], fad_g[n_fad_g] ); // Q26; Loading @@ -2768,6 +2947,7 @@ void stereo_dmx_evs_enc_fx( m_fad_g = sub( m_fad_g, 1 ); } } #endif hStereoDmxEVS->hPHA->n_fad_g = n_fad_g; hStereoDmxEVS->hPHA->n_fad_cnt = n_fad_cnt; Loading Loading @@ -3558,9 +3738,13 @@ ivas_error stereo_dmx_evs_init_encoder_fx( IVAS_ERROR( IVAS_ERR_INTERNAL_FATAL, "invalid sample rate\n" ); BREAK; } #endif fad_len = hStereoDmxEVS->hPHA->fad_len_prc; move16(); #else fad_len = input_frame; move16(); #endif fad_g = hStereoDmxEVS->hPHA->fad_g_prc_fx; move32(); // fad_r = 1.0f / (float) ( fad_len + 1 ); Loading