Commit 14196092 authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Fix issue 850 by adding sanity check for diffuseness and normalization for energy ratios.

parent b15a5701
Loading
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -186,6 +186,8 @@
#define NONBE_FIX_826_JBM_MASA_CNA_CNG                        /* FhG: issue #826:  Resolve "JBM MASA: CNA and CNG not in sync with non-JBM decoding" */
#define NONBE_FIX_835_JBM_PARAMUPMIX_HEADROT                  /* FhG: issue #835: Resolve "JBM: ParamUpmix head rotation broken" */

#define NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING            /* Nokia: issue #850: Fixes rare non-valid diffuseness and energy ratio values in 2dir MASA. */

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

/* ################## End DEVELOPMENT switches ######################### */
+8 −0
Original line number Diff line number Diff line
@@ -1256,6 +1256,14 @@ void ivas_qmetadata_to_dirac(
                        hSpatParamRendCom->energy_ratio2[meta_write_index][b] = q_direction->band_data[band].energy_ratio[block];
                        hSpatParamRendCom->diffuseness_vector[meta_write_index][b] -= q_direction->band_data[band].energy_ratio[block];

#ifdef NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING
                        /* Sanitize diffuseness for rare cases where floating point inaccuracy could result in negative diffuseness. */
                        if ( hSpatParamRendCom->diffuseness_vector[meta_write_index][b] < 0.0f )
                        {
                            hSpatParamRendCom->diffuseness_vector[meta_write_index][b] = 0.0f;
                        }

#endif
                        if ( q_direction->coherence_band_data != NULL )
                        {
                            hSpatParamRendCom->spreadCoherence2[meta_write_index][b] = q_direction->coherence_band_data[band].spread_coherence[block] / 255.0f;
+21 −0
Original line number Diff line number Diff line
@@ -1103,8 +1103,29 @@ int16_t ivas_qmetadata_dec_decode_hr_384_512(
                }
            }
        }

#ifdef NONBE_FIX_850_MASA_HBR_META_RATIO_DECODING
        /* Scale energy ratios that sum to over one */
        for ( b = 0; b < hQMetaData->q_direction[0].cfg.nbands; b++ )
        {
            for ( m = 0; m < hQMetaData->q_direction[0].cfg.nblocks; m++ )
            {
                float ratioSum;

                ratioSum = hQMetaData->q_direction[0].band_data[b].energy_ratio[m] + hQMetaData->q_direction[1].band_data[b].energy_ratio[m];

                if ( ratioSum > 1.0f )
                {
                    float ratioSumInv;
                    ratioSumInv = 1.0f / ratioSum;
                    hQMetaData->q_direction[0].band_data[b].energy_ratio[m] *= ratioSumInv;
                    hQMetaData->q_direction[1].band_data[b].energy_ratio[m] *= ratioSumInv;
                }
            }
        }
    }

#endif
#ifdef DEBUG_MODE_QMETADATA
    for ( d = 0; d < hQMetaData->no_directions; d++ )
    {