Commit 7d39805a authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Add missing bits to previous commit.

parent 2da33653
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -193,6 +193,7 @@
#define FIX_2252_LP_CNG_STARTS_SID                      /* VA: issues 2251 and 2252: fix LP CNG uninitialized value in bitstream that starts with an SID */
#define FIX_1381_BWD                                    /* VA: issue 1381: apply no hysteresis in BWD at higher bitrates also in mono MASA and OMASA */
#define FIX_2285_CODE_DECODER_INIT_BW                   /* VA: basop issue 2285: fix core-decoder initialization bandwidth */
#define FIX_FLOAT_1493_MASA_ENCODE_STABILITY_IMPROVE    /* Nokia: float issue 1493: Improves float decision stability in MASA encoding by adjusting reduction code */

/* ##################### End NON-BE switches ########################### */

+25 −3
Original line number Diff line number Diff line
@@ -82,8 +82,9 @@ static void masa_metadata_direction_alignment( MASA_ENCODER_HANDLE hMasa );
#define LOWBITRATE_ONSET_BETA  0.92f
#define LOWBITRATE_ONSET_GAIN  1.4f
#define LOWBITRATE_NUM_BANDS   5

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


/*-----------------------------------------------------------------------*
@@ -981,7 +982,11 @@ static void combine_freqbands_and_subframes(
    MASA_ENCODER_HANDLE hMasa )
{
    int16_t i, j, k, m;
#ifdef FIX_FLOAT_1493_MASA_ENCODE_STABILITY_IMPROVE
    volatile float aziRad, eleRad; /* Using volatile to reduce numerically unstable optimization */
#else
    float aziRad, eleRad;
#endif
    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];
@@ -1067,9 +1072,14 @@ static void combine_freqbands_and_subframes(
                        energySum += hMasa->data.energy[j][m];
                    }

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

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

#ifdef FIX_FLOAT_1493_MASA_ENCODE_STABILITY_IMPROVE
    volatile float aziRad; /* Using volatile to reduce numerically unstable optimization */
    volatile float eleRad;
#else
    float aziRad;
    float eleRad;
#endif
    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];
@@ -1246,11 +1261,13 @@ void ivas_masa_combine_directions(
        }
        importance[i] /= (float) numSf;
        importance[i] *= hMasa->data.importanceWeight[i];
#ifdef FIX_FLOAT_1493_MASA_ENCODE_STABILITY_IMPROVE
        /* Setting close to zero values to zero to reduce decision differences */
        if ( importance[i] < IMPORTANCE_MIN_STEP )
        {
            importance[i] = 0.0f;
        }
#endif
    }

    /* Determine bands where to use two directions */
@@ -1273,9 +1290,14 @@ void ivas_masa_combine_directions(
        {
            for ( j = 0; j < numSf; j++ )
            {
#ifdef FIX_FLOAT_1493_MASA_ENCODE_STABILITY_IMPROVE
                /* 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] ) );
#else
                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] ) );
#endif

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