Loading lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -166,7 +166,7 @@ #define FIX_94_VERIFY_WAV_NUM_CHANNELS /* FhG: Issue 94 - Check if number of channels in input wav file matches encoder/renderer configuration */ #define NTT_LOW_RATE_STEREO /* NTT switches */ //#define ALL_MONO /* NTT switches */ #define V2_20230320 /* NTT switches */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading lib_enc/lib_enc.c +178 −104 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ #endif #include "wmc_auto.h" /*---------------------------------------------------------------------* * Local struct *---------------------------------------------------------------------*/ Loading Loading @@ -1220,6 +1221,85 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( ititd = ( int16_t )( st_ivas->hStereoDmxEVS->itd ); //fprintf( stderr, "itd %d %d ---", count, itit ); #ifdef FORCE_WW stereo_wwL = FORCE_WW; stereo_wwR = 1.0f - FORCE_WW for( it = 0; it < inputBufferSize / 2; it++ ) { inputBuffer[2 * it] = ( int16_t )( inputBuffer[2 * it] * stereo_wwL + mixBuffer[it] * stereo_wwR ); inputBuffer[2 * it + 1] = ( int16_t )( inputBuffer[2 * it + 1] * stereo_wwL + mixBuffer[it] * stereo_wwR ); } #else #ifdef V2_20230320 if (hEncoderConfig->ivas_total_brate == 24400) { bias = 0.7f; range = 0.3f; } else if (hEncoderConfig->ivas_total_brate == 16400) { bias = 0.5f; range = 0.5f; } else /*total_brate=13200*/ { bias = 0.2f; range = 0.8f; } mag0 = 1.0f - fabsf((float)ititd) * 0.0002f; w = st_ivas->hStereoDmxEVS->dmx_weight[0]; energy_L = sum2_i_step( inputBuffer, inputBufferSize, 2 ) * 0.2f + prevL * 0.8f + 1.0f; energy_R = sum2_i_step( inputBuffer + 1, inputBufferSize, 2 ) * 0.2f + prevR * 0.8f + 1.0f; if ( energy_L > energy_R ) { ratioLR = 0.3f + 0.7f * ( energy_R / energy_L ); } else { ratioLR = 0.3f + 0.7f * ( energy_L / energy_R ); /* 0.3 < ratioLR <1.0*/ } stereo_ww = 0.5f * ( 1.f + cosf( 2.f * w * EVS_PI ) ); /*stero_ww=1.0; stereo, stereo_ww=0.0; mono*/ stereo_ww = sqrtf(stereo_ww); stereo_ww = 1.0f - ( ( 1.0f - stereo_ww ) * ratioLR ); /* larger stereo_w for LRenegy is different */ if (ititd != 0) { stereo_w = 0.985f * prev_w + 0.015f * mag0 * ( bias + range * stereo_ww ) /*min(1.0f, max(0.0f, (bias + range * stereo_ww)))*/; } else { stereo_w = 0.9f * prev_w + 0.1f * mag0 * (bias + range * stereo_ww) /*min(1.0f, max(0.0f, (bias + range * stereo_ww))*/; } //fprintf( stderr, "L/R %5.3f,w, %5.3f,itd,%4d, bi,%3.1f,ra,%3.1f,mag0,%7.3f,stereo_w, %8.4f\n", // energy_L / energy_R, w, ititd, bias, range, mag0, stereo_w ); for ( it = 0; it < overlap_len / 2; it++ ) { stereo_wwL = stereo_w * ( it * nom_slope ) + prev_w * ( 1.f - it * nom_slope ); stereo_wwR = 1.f - stereo_wwL; inputBuffer[2 * it] = ( int16_t )( inputBuffer[2 * it] * stereo_wwL + mixBuffer[it] * stereo_wwR ); inputBuffer[2 * it + 1] = ( int16_t )( inputBuffer[2 * it + 1] * stereo_wwL + mixBuffer[it] * stereo_wwR ); } stereo_wwL = stereo_w; stereo_wwR = 1.f - stereo_wwL; for ( ; it < inputBufferSize / 2; it++ ) { inputBuffer[2 * it] = ( int16_t )( inputBuffer[2 * it] * stereo_wwL + mixBuffer[it] * stereo_wwR ); inputBuffer[2 * it + 1] = ( int16_t )( inputBuffer[2 * it + 1] * stereo_wwL + mixBuffer[it] * stereo_wwR ); } prev_w = stereo_w; prevL = energy_L; prevR = energy_R; #else /*V1_tested P800 20230320*/ if ( hEncoderConfig->ivas_total_brate == 24400 ) { bias = 0.6f; Loading @@ -1241,14 +1321,7 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( mag0 += 0.6f; w = st_ivas->hStereoDmxEVS->dmx_weight[0]; #ifdef ALL_MONO for (it = 0; it < inputBufferSize / 2; it++) { inputBuffer[2 * it] = mixBuffer[it]; inputBuffer[2 * it + 1] = mixBuffer[it]; } #else stereo_w = 0.95f *prev_w + 0.05f *mag0 * min( 1.0f, max( 0.0f, ( bias + range * 0.5f * ( 1.f + cosf( 2.f * w * EVS_PI ) ) ) ) ); energy_L= sum2_i_step(inputBuffer, inputBufferSize, 2) *0.2f + prevL*0.8f+ 1.0f; Loading Loading @@ -1284,9 +1357,10 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( prev_w = stereo_w; prevL= energy_L; prevR= energy_R; #endif #endif /*V2_20230320*/ #endif /*FORCE_WW*/ } #endif #endif /*end NTT_LOW_RATE_STEREO*/ if ( ( error = ivas_enc( st_ivas, inputBuffer, inputBufferSize ) ) != IVAS_ERR_OK ) { return error; Loading Loading
lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -166,7 +166,7 @@ #define FIX_94_VERIFY_WAV_NUM_CHANNELS /* FhG: Issue 94 - Check if number of channels in input wav file matches encoder/renderer configuration */ #define NTT_LOW_RATE_STEREO /* NTT switches */ //#define ALL_MONO /* NTT switches */ #define V2_20230320 /* NTT switches */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading
lib_enc/lib_enc.c +178 −104 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ #endif #include "wmc_auto.h" /*---------------------------------------------------------------------* * Local struct *---------------------------------------------------------------------*/ Loading Loading @@ -1220,6 +1221,85 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( ititd = ( int16_t )( st_ivas->hStereoDmxEVS->itd ); //fprintf( stderr, "itd %d %d ---", count, itit ); #ifdef FORCE_WW stereo_wwL = FORCE_WW; stereo_wwR = 1.0f - FORCE_WW for( it = 0; it < inputBufferSize / 2; it++ ) { inputBuffer[2 * it] = ( int16_t )( inputBuffer[2 * it] * stereo_wwL + mixBuffer[it] * stereo_wwR ); inputBuffer[2 * it + 1] = ( int16_t )( inputBuffer[2 * it + 1] * stereo_wwL + mixBuffer[it] * stereo_wwR ); } #else #ifdef V2_20230320 if (hEncoderConfig->ivas_total_brate == 24400) { bias = 0.7f; range = 0.3f; } else if (hEncoderConfig->ivas_total_brate == 16400) { bias = 0.5f; range = 0.5f; } else /*total_brate=13200*/ { bias = 0.2f; range = 0.8f; } mag0 = 1.0f - fabsf((float)ititd) * 0.0002f; w = st_ivas->hStereoDmxEVS->dmx_weight[0]; energy_L = sum2_i_step( inputBuffer, inputBufferSize, 2 ) * 0.2f + prevL * 0.8f + 1.0f; energy_R = sum2_i_step( inputBuffer + 1, inputBufferSize, 2 ) * 0.2f + prevR * 0.8f + 1.0f; if ( energy_L > energy_R ) { ratioLR = 0.3f + 0.7f * ( energy_R / energy_L ); } else { ratioLR = 0.3f + 0.7f * ( energy_L / energy_R ); /* 0.3 < ratioLR <1.0*/ } stereo_ww = 0.5f * ( 1.f + cosf( 2.f * w * EVS_PI ) ); /*stero_ww=1.0; stereo, stereo_ww=0.0; mono*/ stereo_ww = sqrtf(stereo_ww); stereo_ww = 1.0f - ( ( 1.0f - stereo_ww ) * ratioLR ); /* larger stereo_w for LRenegy is different */ if (ititd != 0) { stereo_w = 0.985f * prev_w + 0.015f * mag0 * ( bias + range * stereo_ww ) /*min(1.0f, max(0.0f, (bias + range * stereo_ww)))*/; } else { stereo_w = 0.9f * prev_w + 0.1f * mag0 * (bias + range * stereo_ww) /*min(1.0f, max(0.0f, (bias + range * stereo_ww))*/; } //fprintf( stderr, "L/R %5.3f,w, %5.3f,itd,%4d, bi,%3.1f,ra,%3.1f,mag0,%7.3f,stereo_w, %8.4f\n", // energy_L / energy_R, w, ititd, bias, range, mag0, stereo_w ); for ( it = 0; it < overlap_len / 2; it++ ) { stereo_wwL = stereo_w * ( it * nom_slope ) + prev_w * ( 1.f - it * nom_slope ); stereo_wwR = 1.f - stereo_wwL; inputBuffer[2 * it] = ( int16_t )( inputBuffer[2 * it] * stereo_wwL + mixBuffer[it] * stereo_wwR ); inputBuffer[2 * it + 1] = ( int16_t )( inputBuffer[2 * it + 1] * stereo_wwL + mixBuffer[it] * stereo_wwR ); } stereo_wwL = stereo_w; stereo_wwR = 1.f - stereo_wwL; for ( ; it < inputBufferSize / 2; it++ ) { inputBuffer[2 * it] = ( int16_t )( inputBuffer[2 * it] * stereo_wwL + mixBuffer[it] * stereo_wwR ); inputBuffer[2 * it + 1] = ( int16_t )( inputBuffer[2 * it + 1] * stereo_wwL + mixBuffer[it] * stereo_wwR ); } prev_w = stereo_w; prevL = energy_L; prevR = energy_R; #else /*V1_tested P800 20230320*/ if ( hEncoderConfig->ivas_total_brate == 24400 ) { bias = 0.6f; Loading @@ -1241,14 +1321,7 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( mag0 += 0.6f; w = st_ivas->hStereoDmxEVS->dmx_weight[0]; #ifdef ALL_MONO for (it = 0; it < inputBufferSize / 2; it++) { inputBuffer[2 * it] = mixBuffer[it]; inputBuffer[2 * it + 1] = mixBuffer[it]; } #else stereo_w = 0.95f *prev_w + 0.05f *mag0 * min( 1.0f, max( 0.0f, ( bias + range * 0.5f * ( 1.f + cosf( 2.f * w * EVS_PI ) ) ) ) ); energy_L= sum2_i_step(inputBuffer, inputBufferSize, 2) *0.2f + prevL*0.8f+ 1.0f; Loading Loading @@ -1284,9 +1357,10 @@ ivas_error IVAS_ENC_EncodeFrameToSerial( prev_w = stereo_w; prevL= energy_L; prevR= energy_R; #endif #endif /*V2_20230320*/ #endif /*FORCE_WW*/ } #endif #endif /*end NTT_LOW_RATE_STEREO*/ if ( ( error = ivas_enc( st_ivas, inputBuffer, inputBufferSize ) ) != IVAS_ERR_OK ) { return error; Loading