Commit 5ca3d209 authored by sekine's avatar sekine
Browse files

update parameters on 20230320.

parent 4d5f94fe
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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 */
+178 −104
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@
#endif
#include "wmc_auto.h"


/*---------------------------------------------------------------------*
 * Local struct
 *---------------------------------------------------------------------*/
@@ -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;
@@ -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;
@@ -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;