Commit 228e6c77 authored by Jan Kiene's avatar Jan Kiene
Browse files

Merge branch '1532_ref_ISM_downmix_energies' into 'float-pc'

[non-BE]Port float MR1332 to BASOP (float reference code)

See merge request !1506
parents e4c00ca8 2ddc8247
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5489,7 +5489,11 @@ void ivas_mono_dmx_renderer_close(
    MONO_DOWNMIX_RENDERER_HANDLE *hMonoDmxRenderer              /* i/ i/o: Mono downmix structure                       */
);

#ifdef NONBE_FIX_967_ISM_MONO_DMX
void ivas_ism_mono_dmx(
#else
void ivas_mono_downmix_render_passive(
#endif
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder structure                                */
    float *output_f[],                                          /* i/o: synthesized core-coder transport channels/mono output */
    const int16_t output_frame                                  /* i  : output frame length                                   */
+1 −0
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@
#define NONBE_FIX_935_EARLY_REFLECTIONS_WRONG_ORDER           /* Qualcomm: issue 953: fix order or ER channels in LC mode*/
#define FIX_956_DECODER_COMMAND_LINE_FIX                /* VA: Output correct error message when the decoder command-line has too many mandatory arguments. */
#define FIX_955_FASTCONV_REND_IN_ISM                    /* VA: put FastConv rendering call under DEBUGGING */
#define NONBE_FIX_967_ISM_MONO_DMX                            /* FhG: issue 967: accumulating energies in ISM mono DMX */
#define FIX_958_667_DISABLE_INITIAL_PLC_SUPPRESSION     /* Ericsson: Fix related to issue 667 in IVAS BASOP. Handling of initial lost frame in IVAS causes non-BE on EVS BASOP 26.444 */
#define NONBE_FIX_968_ISM_BRIR_WITH_HEADROTATION_5MS_FIX      /* FhG : issue #968: differences between 5ms and 20ms rendering for discrete ISM with BRIR and head rotation*/

+12 −0
Original line number Diff line number Diff line
@@ -196,7 +196,11 @@ ivas_error ivas_jbm_dec_tc(

        if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX )
        {
#ifdef NONBE_FIX_967_ISM_MONO_DMX
            ivas_ism_mono_dmx( st_ivas, p_output, output_frame );
#else
            ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame );
#endif
        }
        else if ( st_ivas->ism_mode == ISM_MODE_PARAM && ( st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC || st_ivas->renderer_type == RENDERER_BINAURAL_PARAMETRIC_ROOM || st_ivas->renderer_type == RENDERER_STEREO_PARAMETRIC ) )
        {
@@ -388,7 +392,11 @@ ivas_error ivas_jbm_dec_tc(

        if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX )
        {
#ifdef NONBE_FIX_967_ISM_MONO_DMX
            ivas_ism_mono_dmx( st_ivas, p_output, output_frame );
#else
            ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame );
#endif
        }
        else if ( output_config == IVAS_AUDIO_CONFIG_EXTERNAL )
        {
@@ -512,7 +520,11 @@ ivas_error ivas_jbm_dec_tc(
        }
        else if ( st_ivas->renderer_type == RENDERER_MONO_DOWNMIX && st_ivas->ism_mode == ISM_SBA_MODE_DISC )
        {
#ifdef NONBE_FIX_967_ISM_MONO_DMX
            ivas_ism_mono_dmx( st_ivas, p_output, output_frame );
#else
            ivas_mono_downmix_render_passive( st_ivas, p_output, output_frame );
#endif

            /* add W */
            for ( n = 0; n < nchan_out; n++ )
+36 −5
Original line number Diff line number Diff line
@@ -48,7 +48,9 @@

#define DOWNMIX_ALPHA    0.95f /* Smoothing coefficient */
#define DOWNMIX_MAX_GAIN 4.0f  /* Maximum allowed gain  */
#define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4
#ifndef NONBE_FIX_967_ISM_MONO_DMX
#define MONO_DOWNMIX_RENDERER_MAX_INPUT_CHANS 4 // FhG esr: this seems to be obsolete; not related to issue 967
#endif


/*-------------------------------------------------------------------------
@@ -99,12 +101,15 @@ void ivas_mono_dmx_renderer_close(


/*-------------------------------------------------------------------------
 * ivas_mono_downmix_render_passive()
 * ivas_ism_mono_dmx()
 *
 * Downmix process
 *------------------------------------------------------------------------*/

#ifdef NONBE_FIX_967_ISM_MONO_DMX
void ivas_ism_mono_dmx(
#else
void ivas_mono_downmix_render_passive(
#endif
    Decoder_Struct *st_ivas,   /* i/o: IVAS decoder structure                                */
    float *output_f[],         /* i/o: synthesized core-coder transport channels/mono output */
    const int16_t output_frame /* i  : output frame length                                   */
@@ -112,6 +117,9 @@ void ivas_mono_downmix_render_passive(
{
    int16_t i, j, numInputChannels;
    float proto_signal[L_FRAME48k], eq;
#ifdef NONBE_FIX_967_ISM_MONO_DMX
    float inputEnergy_local, protoEnergy_local;
#endif
    MONO_DOWNMIX_RENDERER_HANDLE hDownmix;

    numInputChannels = st_ivas->nSCE;
@@ -134,6 +142,10 @@ void ivas_mono_downmix_render_passive(

    hDownmix = st_ivas->hMonoDmxRenderer;
    set_zero( proto_signal, output_frame );
#ifdef NONBE_FIX_967_ISM_MONO_DMX
    inputEnergy_local = 0;
    protoEnergy_local = 0;
#endif

    /* Compute the Proto Signal */
    for ( i = 0; i < numInputChannels; i++ )
@@ -141,6 +153,18 @@ void ivas_mono_downmix_render_passive(
        v_add( output_f[i], proto_signal, proto_signal, output_frame );
    }

#ifdef NONBE_FIX_967_ISM_MONO_DMX
    /* compute the input energy, proto energy */
    for ( i = 0; i < output_frame; i++ )
    {
        protoEnergy_local += proto_signal[i] * proto_signal[i];

        for ( j = 0; j < numInputChannels; j++ )
        {
            inputEnergy_local += ( output_f[j][i] * output_f[j][i] );
        }
    }
#else
    /* compute the input energy, proto energy after smoothing */
    hDownmix->inputEnergy *= DOWNMIX_ALPHA;
    hDownmix->protoEnergy *= DOWNMIX_ALPHA;
@@ -153,6 +177,13 @@ void ivas_mono_downmix_render_passive(
            hDownmix->inputEnergy += ( output_f[j][i] * output_f[j][i] );
        }
    }
#endif
#ifdef NONBE_FIX_967_ISM_MONO_DMX
    hDownmix->inputEnergy *= DOWNMIX_ALPHA;
    hDownmix->protoEnergy *= DOWNMIX_ALPHA;
    hDownmix->inputEnergy += ( 1.0f - DOWNMIX_ALPHA ) * inputEnergy_local;
    hDownmix->protoEnergy += ( 1.0f - DOWNMIX_ALPHA ) * protoEnergy_local;
#endif

    /* compute the eq factor */
    eq = min( DOWNMIX_MAX_GAIN, sqrtf( hDownmix->inputEnergy / ( EPSILON + hDownmix->protoEnergy ) ) );