Commit 470ce0f5 authored by vaclav's avatar vaclav
Browse files
parents 6daed758 6baab0c6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -162,6 +162,8 @@
#define TMP_FIX_1119_SPLIT_RENDERING_VOIP               /* FhG: Add error check for unsupported config: split rendering with VoIP mode */
#define FIX_1314_STEREO_TO_EXT                          /* VA: issue 1314: set RENDERER_DISABLE for stereo to EXT output */
#define FIX_1320_STACK_CPE_DECODER                      /* VA: issue 1320: Optimize the stack memory consumption in the CPE decoder */
#define FIX_NCHAN_BUFFERS                               /* VA: issue 1322: Correct the number of float buffers (channels) at the decoder */
#define FIX_RENDERER_STACK                              /* VA: issue 1322: reduction of renderers' buffers size */

/* #################### End BE switches ################################## */

@@ -172,6 +174,7 @@

#define NONBE_1244_FIX_SWB_BWE_MEMORY                   /* VA: issue 1244: fix to SWB BWE memory in case of switching from FB coding - pending a review by Huawei */ 
#define NONBE_1122_KEEP_EVS_MODE_UNCHANGED              /* FhG: Disables fix for issue 1122 in EVS mode to keep BE tests green. This switch should be removed once the 1122 fix is added to EVS via a CR.  */
#define NONBE_FIX_1326_MASA_EXTREND_CUSTOMLS_OUT        /* FhG: Fix crash for external renderer MASA to custom LS rendering, number of output channels not set correctly */

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

+23 −1
Original line number Diff line number Diff line
@@ -1554,7 +1554,12 @@ void ivas_dirac_dec_render(
    uint16_t slot_size, n_samples_sf, ch, nchan_intern;
    SPAT_PARAM_REND_COMMON_DATA_HANDLE hSpatParamRendCom;
    float *output_f_local[MAX_OUTPUT_CHANNELS];
#ifdef FIX_RENDERER_STACK
    float *p_output_f[MAX_OUTPUT_CHANNELS];
    float output_f_local_buff[MAX_OUTPUT_CHANNELS][L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES];
#else
    float output_f_local_buff[MAX_OUTPUT_CHANNELS][L_FRAME48k];
#endif

    hSpatParamRendCom = st_ivas->hSpatParamRendCom;

@@ -1565,7 +1570,11 @@ void ivas_dirac_dec_render(
    for ( ch = 0; ch < nchan_intern; ch++ )
    {
        output_f_local[ch] = output_f_local_buff[ch];
#ifdef FIX_RENDERER_STACK
        p_output_f[ch] = output_f[ch];
#else
        set_zero( output_f_local_buff[ch], nSamplesAsked );
#endif
    }
    slot_size = NS2SA( st_ivas->hDecoderConfig->output_Fs, CLDFB_SLOT_NS );

@@ -1587,16 +1596,29 @@ void ivas_dirac_dec_render(
    for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ )
    {
        ivas_dirac_dec_render_sf( st_ivas, output_f_local, nchan_transport, NULL, NULL );

        n_samples_sf = hSpatParamRendCom->subframe_nbslots[subframe_idx] * hSpatParamRendCom->slot_size;

        for ( ch = 0; ch < nchan_intern; ch++ )
        {
#ifdef FIX_RENDERER_STACK
            /* move to output */
            if ( !( ( st_ivas->hDirACRend->hOutSetup.separateChannelEnabled ) && ( st_ivas->hDirACRend->hOutSetup.separateChannelIndex == ch || st_ivas->hDirACRend->hOutSetup.separateChannelIndex + 1 == ch ) ) )
            {
                mvr2r( output_f_local_buff[ch], p_output_f[ch], n_samples_sf );
            }

            p_output_f[ch] += n_samples_sf;
#else
            output_f_local[ch] += n_samples_sf;
#endif
        }

        /* update combined orientation access index */
        ivas_combined_orientation_update_index( st_ivas->hCombinedOrientationData, n_samples_sf );
    }

#ifndef FIX_RENDERER_STACK
    for ( ch = 0; ch < nchan_intern; ch++ )
    {
        if ( !( ( st_ivas->hDirACRend->hOutSetup.separateChannelEnabled ) && ( st_ivas->hDirACRend->hOutSetup.separateChannelIndex == ch || st_ivas->hDirACRend->hOutSetup.separateChannelIndex + 1 == ch ) ) )
@@ -1604,7 +1626,7 @@ void ivas_dirac_dec_render(
            mvr2r( output_f_local_buff[ch], output_f[ch], *nSamplesRendered );
        }
    }

#endif
    if ( hSpatParamRendCom->slots_rendered == hSpatParamRendCom->num_slots )
    {
        if ( st_ivas->hDirAC->hConfig->dec_param_estim == 1 )
+6 −1
Original line number Diff line number Diff line
@@ -487,7 +487,7 @@ ivas_error ivas_dec_setup(
    }

    /*-------------------------------------------------------------------*
     * Read other signling (ISM/MC mode, number of channels, etc.)
     * Read other signaling (ISM/MC mode, number of channels, etc.)
     *-------------------------------------------------------------------*/

    if ( is_DTXrate( ivas_total_brate ) == 0 )
@@ -2378,7 +2378,12 @@ ivas_error ivas_init_decoder(
     * Allocate floating-point output audio buffers
     *-----------------------------------------------------------------*/

#ifdef FIX_NCHAN_BUFFERS
    k = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate );
    for ( n = 0; n < k; n++ )
#else
    for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ )
#endif
    {
        /* note: these are intra-frame heap memories */
        if ( ( st_ivas->p_output_f[n] = (float *) malloc( ( 48000 / FRAMES_PER_SEC ) * sizeof( float ) ) ) == NULL )
+5 −1
Original line number Diff line number Diff line
@@ -821,7 +821,12 @@ void ivas_jbm_dec_feed_tc_to_renderer(
            p_data_f[n] = &st_ivas->p_output_f[n][0];
        }

#ifdef FIX_NCHAN_BUFFERS
        ch = ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate );
        for ( n = 0; n < ch; n++ )
#else
        for ( n = 0; n < ivas_get_nchan_buffers_dec( st_ivas, st_ivas->sba_analysis_order, st_ivas->hDecoderConfig->ivas_total_brate ); n++ )
#endif
        {
            hTcBuffer->tc[n] = st_ivas->p_output_f[n]; /* note: buffers needed in the TD decorellator */
        }
@@ -2178,7 +2183,6 @@ ivas_error ivas_jbm_dec_tc_buffer_reconfigure(

    hTcBuffer = st_ivas->hTcBuffer;


    /* if granularity changes, adapt subframe_nb_slots */
    if ( n_samples_granularity != hTcBuffer->n_samples_granularity )
    {
+30 −0
Original line number Diff line number Diff line
@@ -1320,6 +1320,9 @@ ivas_error ivas_masa_dec_reconfigure(
    Decoder_State **sts;
    int32_t ivas_total_brate, last_ivas_total_brate;
    int16_t numCldfbAnalyses_old, numCldfbSyntheses_old;
#ifdef FIX_NCHAN_BUFFERS
    int16_t nchan_out_buff_old, nchan_out_buff;
#endif
    ivas_error error;
    int16_t pos_idx;
    int32_t ism_total_brate;
@@ -1327,6 +1330,10 @@ ivas_error ivas_masa_dec_reconfigure(
    ivas_total_brate = st_ivas->hDecoderConfig->ivas_total_brate;
    last_ivas_total_brate = st_ivas->hDecoderConfig->last_ivas_total_brate;

#ifdef FIX_NCHAN_BUFFERS
    nchan_out_buff_old = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );

#endif
    /* Copy state to TC buffer if granularity matches and we are not in OMASA EXT rendering mode */
    if ( st_ivas->hSpatParamRendCom != NULL && st_ivas->hSpatParamRendCom->slot_size == st_ivas->hTcBuffer->n_samples_granularity && st_ivas->hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_EXTERNAL )
    {
@@ -1490,8 +1497,16 @@ ivas_error ivas_masa_dec_reconfigure(
            }
            else
            {
#ifdef FIX_NCHAN_BUFFERS
                tc_nchan_to_allocate = BINAURAL_CHANNELS;
                if ( st_ivas->hDiracDecBin[0] != NULL && st_ivas->hDiracDecBin[0]->useTdDecorr )
                {
                    tc_nchan_to_allocate = 2 * BINAURAL_CHANNELS;
                }
#else
                tc_nchan_to_allocate = 2 * BINAURAL_CHANNELS;
#endif
            }
        }
        else if ( st_ivas->nchan_transport == 1 && ( st_ivas->renderer_type == RENDERER_DIRAC && st_ivas->hDirACRend->synthesisConf == DIRAC_SYNTHESIS_GAIN_SHD ) )
        {
@@ -1530,6 +1545,21 @@ ivas_error ivas_masa_dec_reconfigure(
        }
    }

#ifdef FIX_NCHAN_BUFFERS
    /*-----------------------------------------------------------------*
     * floating-point output audio buffers
     *-----------------------------------------------------------------*/

    if ( st_ivas->ivas_format == MASA_FORMAT && st_ivas->last_ivas_format == MASA_FORMAT ) /* note: switching with OMASA is addressed in ivas_omasa_dec_config() */
    {
        nchan_out_buff = ivas_get_nchan_buffers_dec( st_ivas, -1, -1 );
        if ( ( error = ivas_output_buff_dec( st_ivas->p_output_f, nchan_out_buff_old, nchan_out_buff ) ) != IVAS_ERR_OK )
        {
            return error;
        }
    }

#endif
    return IVAS_ERR_OK;
}

Loading