Commit 44c55881 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

[fix] SBA to stereo rendering loudness

parent 7e3f3315
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -151,6 +151,7 @@
#define FIX_BASOP_2517_CLICK_IN_OMASA_LTV               /* FhG: BASOP #2517: preserve precision by removing one-bit headroom from Q_min and allowing saturation during buffer scaling */
#define FIX_BASOP_2559_Q_SYNTH_HISTORY_RESET            /* FhG: BASOP issue 2559: reset hTcxDec->q_synth_history_fx in allocate_CoreCoder_TCX_fx() */
#define FIX_FLOAT_1578_OMASA_REND_SPIKES                /* Nokia: Float issue 1578: Fix spikes and collapsed perception in OMASA/MASA rendering to FOA/HOA */
#define FIX_1521_SBA_LOUDNESS_STEREO                    /* FhG: issue 1521: Fix loudness for SBA to stereo rendering */

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

+20 −0
Original line number Diff line number Diff line
@@ -1566,11 +1566,31 @@ void ivas_sba_dirac_stereo_dec_fx(
    synchro_synthesis_fx( st_ivas->hDecoderConfig->ivas_total_brate, hCPE, output, output_frame, 1 /*st_ivas->sba_dirac_stereo_flag*/, q_dft[0] );

    /* output scaling */
#ifdef FIX_1521_SBA_LOUDNESS_STEREO
    IF( !sba_mono_flag )
#else
    test();
    IF( !sba_mono_flag && !( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_MODE_NONE ) ) )
#endif
    {
#ifdef FIX_1521_SBA_LOUDNESS_STEREO
        test();
        IF( EQ_16( st_ivas->ivas_format, SBA_ISM_FORMAT ) && EQ_16( st_ivas->ism_mode, ISM_MODE_NONE ) )
        {
            /* low bitrate OSBA needs a makeup gain of 2.f to compensate for the encoder side
                INV_SQRT2 * 2 = SQRT2  */
            v_multc_fx( output[0], SQRT2_FX, output[0], output_frame );
            v_multc_fx( output[1], SQRT2_FX, output[1], output_frame );
        }
        ELSE
        {
            v_multc_fx( output[0], INV_SQRT2_FX, output[0], output_frame );
            v_multc_fx( output[1], INV_SQRT2_FX, output[1], output_frame );
        }
#else
        v_shr( output[0], 1, output[0], output_frame ); /*0.5f*/
        v_shr( output[1], 1, output[1], output_frame ); /*0.5f*/
#endif
    }

    /* delay HB synth */
+7 −0
Original line number Diff line number Diff line
@@ -98,10 +98,17 @@ ivas_error ivas_sba_get_hoa_dec_matrix_fx(
    }
    ELSE IF( EQ_32( hOutSetup.output_config, IVAS_AUDIO_CONFIG_STEREO ) )
    {
#ifdef FIX_1521_SBA_LOUDNESS_STEREO
        ( *hoa_dec_mtx )[0] = INV_SQRT2_FX >> 2;
        ( *hoa_dec_mtx )[1] = INV_SQRT2_FX >> 2;
        ( *hoa_dec_mtx )[SBA_NHARM_HOA3] = INV_SQRT2_FX >> 2;
        ( *hoa_dec_mtx )[SBA_NHARM_HOA3 + 1] = -( INV_SQRT2_FX >> 2 );
#else
        ( *hoa_dec_mtx )[0] = ONE_IN_Q28;                   // 0.5f in Q29
        ( *hoa_dec_mtx )[1] = ONE_IN_Q28;                   // 0.5f in Q29
        ( *hoa_dec_mtx )[SBA_NHARM_HOA3] = ONE_IN_Q28;      // 0.5f in Q29
        ( *hoa_dec_mtx )[SBA_NHARM_HOA3 + 1] = -ONE_IN_Q28; // 0.5f in Q29
#endif
        move32();
        move32();
        move32();