Commit 2da33653 authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Address float issue 1493 with minor changes to improve stability of decision...

Address float issue 1493 with minor changes to improve stability of decision over platforms and builds.
parent ea2eb610
Loading
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ static void masa_metadata_direction_alignment( MASA_ENCODER_HANDLE hMasa );
#define LOWBITRATE_ONSET_GAIN  1.4f
#define LOWBITRATE_NUM_BANDS   5

#define IMPORTANCE_MIN_STEP    0.000244140625f /* 2^-12 to match BASOP */


/*-----------------------------------------------------------------------*
 * ivas_masa_enc_open()
@@ -979,7 +981,7 @@ static void combine_freqbands_and_subframes(
    MASA_ENCODER_HANDLE hMasa )
{
    int16_t i, j, k, m;
    float aziRad, eleRad;
    volatile float aziRad, eleRad; /* Using volatile to reduce numerically unstable optimization */
    float x[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
    float y[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
    float z[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
@@ -1065,8 +1067,9 @@ static void combine_freqbands_and_subframes(
                        energySum += hMasa->data.energy[j][m];
                    }

                    aziRad = atan2f( ySum, xSum );
                    eleRad = atan2f( zSum, sqrtf( xSum * xSum + ySum * ySum ) );
                    /* Using atan2 instead of atan2f to reduce platform difference */
                    aziRad = (float) atan2( ySum, xSum );
                    eleRad = (float) atan2( zSum, sqrtf( xSum * xSum + ySum * ySum ) );

                    hMeta->directional_meta[i].azimuth[j][k] = aziRad / EVS_PI * 180.0f;
                    hMeta->directional_meta[i].elevation[j][k] = eleRad / EVS_PI * 180.0f;
@@ -1174,8 +1177,8 @@ void ivas_masa_combine_directions(
    uint8_t computeCoherence;
    MASA_METADATA_HANDLE hMeta;

    float aziRad;
    float eleRad;
    volatile float aziRad;  /* Using volatile to reduce numerically unstable optimization */
    volatile float eleRad;
    float x[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
    float y[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
    float z[MASA_MAXIMUM_DIRECTIONS][MAX_PARAM_SPATIAL_SUBFRAMES][MASA_FREQUENCY_BANDS];
@@ -1243,6 +1246,11 @@ void ivas_masa_combine_directions(
        }
        importance[i] /= (float) numSf;
        importance[i] *= hMasa->data.importanceWeight[i];
        /* Setting close to zero values to zero to reduce decision differences */
        if ( importance[i] < IMPORTANCE_MIN_STEP )
        {
            importance[i] = 0.0f;
        }
    }

    /* Determine bands where to use two directions */
@@ -1265,8 +1273,9 @@ void ivas_masa_combine_directions(
        {
            for ( j = 0; j < numSf; j++ )
            {
                aziRad = atan2f( ySum[j][i], xSum[j][i] );
                eleRad = atan2f( zSum[j][i], sqrtf( xSum[j][i] * xSum[j][i] + ySum[j][i] * ySum[j][i] ) );
                /* Using atan2 instead of atan2f to reduce platform difference */
                aziRad = (float) atan2( ySum[j][i], xSum[j][i] );
                eleRad = (float) atan2( zSum[j][i], sqrtf( xSum[j][i] * xSum[j][i] + ySum[j][i] * ySum[j][i] ) );

                hMeta->directional_meta[0].azimuth[j][i] = aziRad / EVS_PI * 180.0f;
                hMeta->directional_meta[0].elevation[j][i] = eleRad / EVS_PI * 180.0f;