Commit a7b2b13e authored by eichenseer's avatar eichenseer
Browse files

Fix to issue 967. Adjusted the smoothing in the ISM mono DMX. Also changed the...

Fix to issue 967. Adjusted the smoothing in the ISM mono DMX. Also changed the function name to ivas_ism_mono_dmx().
parent 557eabfd
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5469,7 +5469,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
@@ -173,6 +173,7 @@
#define NONBE_FIX_935_EARLY_REFLECTIONS_WRONG_ORDER           /* Qualcomm: issue 953: fix order or ER channels in LC mode*/
#define NONBE_FIX_949_MC_5MS_FRAMING                          /* Dlb: issue 949: fix for issue 949, distorted output in MC mode with 5ms framing*/
#define NONBE_FIX_952_MC_PARAMUPMIX_5MS                       /* Dlb : issue 952 : Differences between 5ms and 20ms rendering for ParamUpmix*/
#define NONBE_FIX_967_ISM_MONO_DMX                            /* FhG: issue 967: accumulating energies in ISM mono DMX */

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

+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++ )
+34 −2
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,16 @@ 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 +118,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 +143,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 +154,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 +178,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 ) ) );