Commit dab8a3ed authored by vaclav's avatar vaclav
Browse files

accept FIX_1319_STACK_SBA_DECODER

parent 8b912c2e
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -3727,13 +3727,8 @@ void ivas_dirac_dec_render_sf(
    Decoder_Struct *st_ivas,                                    /* i/o: IVAS decoder structure                  */
    float *output_f[],                                          /* i/o: synthesized core-coder transport channels/DirAC output  */
    const int16_t nchan_transport,                              /* i  : number of transport channels            */
#ifdef FIX_1319_STACK_SBA_DECODER
    float *pppQMfFrame_ts_re[HOA3_CHANNELS][CLDFB_NO_COL_MAX],
    float *pppQMfFrame_ts_im[HOA3_CHANNELS][CLDFB_NO_COL_MAX]
#else
    float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX],
    float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX]
#endif
);

void computeDiffuseness_mdft(
+0 −1
Original line number Diff line number Diff line
@@ -160,7 +160,6 @@

/*#define FIX_I4_OL_PITCH*/                             /* fix open-loop pitch used for EVS core switching */
#define TMP_FIX_1119_SPLIT_RENDERING_VOIP               /* FhG: Add error check for unsupported config: split rendering with VoIP mode */
#define FIX_1319_STACK_SBA_DECODER                      /* VA: issue 1319: Optimize the definition of buffer lengths in the SBA decoder */
#define JBM_MEMORY_OPT                                  /* VA: issue 916: optimization of RAM in the JBM decoder */

/* #################### End BE switches ################################## */
+3 −71
Original line number Diff line number Diff line
@@ -1623,7 +1623,7 @@ void ivas_dirac_dec_render(
    return;
}

#ifdef FIX_1319_STACK_SBA_DECODER

/*-------------------------------------------------------------------------
 * Local functions to perform binaural rendering with optimized stack
 *------------------------------------------------------------------------*/
@@ -1696,7 +1696,7 @@ static void binRenderer(

    return;
}
#endif


/*-------------------------------------------------------------------------
 * ivas_dirac_dec_render_sf()
@@ -1708,14 +1708,8 @@ void ivas_dirac_dec_render_sf(
    Decoder_Struct *st_ivas,       /* i/o: IVAS decoder structure                                  */
    float *output_f[],             /* i/o: synthesized core-coder transport channels/DirAC output  */
    const int16_t nchan_transport, /* i  : number of transport channels                            */
#ifdef FIX_1319_STACK_SBA_DECODER
    float *pppQMfFrame_ts_re[HOA3_CHANNELS][CLDFB_NO_COL_MAX],
    float *pppQMfFrame_ts_im[HOA3_CHANNELS][CLDFB_NO_COL_MAX]
#else
    float *pppQMfFrame_ts_re[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX],
    float *pppQMfFrame_ts_im[IVAS_MAX_FB_MIXER_IN_CH][CLDFB_NO_COL_MAX]
#endif
)
    float *pppQMfFrame_ts_im[HOA3_CHANNELS][CLDFB_NO_COL_MAX] )
{
    int16_t i, ch, idx_in, idx_lfe;
    DIRAC_DEC_HANDLE hDirAC;
@@ -1730,19 +1724,10 @@ void ivas_dirac_dec_render_sf(
    int16_t slot_idx_start, slot_idx_start_cldfb_synth, md_idx;

    /*CLDFB: last output channels reserved to LFE for CICPx*/
#ifdef FIX_1319_STACK_SBA_DECODER
    float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_RealBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural[1][BINAURAL_CHANNELS][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
#else
    float Cldfb_RealBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer[MAX_OUTPUT_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_RealBuffer_Temp[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Temp[2][CLDFB_SLOTS_PER_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
#endif
    int16_t index, num_freq_bands;

    /* local copies of azi, ele, diffuseness */
@@ -1919,29 +1904,17 @@ void ivas_dirac_dec_render_sf(
            /* CLDFB Analysis*/
            for ( ch = 0; ch < nchan_transport; ch++ )
            {
#ifdef FIX_1319_STACK_SBA_DECODER
                cldfbAnalysis_ts( &( st_ivas->hTcBuffer->tc[hDirACRend->sba_map_tc[ch]][hSpatParamRendCom->num_freq_bands * index_slot] ),
                                  Cldfb_RealBuffer_Binaural[0][ch][slot_idx], /* note: it is a tmp. buffer at this point */
                                  Cldfb_ImagBuffer_Binaural[0][ch][slot_idx], /* note: it is a tmp. buffer at this point */
                                  hSpatParamRendCom->num_freq_bands,
                                  st_ivas->cldfbAnaDec[ch] );
#else
                cldfbAnalysis_ts( &( st_ivas->hTcBuffer->tc[hDirACRend->sba_map_tc[ch]][hSpatParamRendCom->num_freq_bands * index_slot] ),
                                  Cldfb_RealBuffer_Temp[ch][slot_idx],
                                  Cldfb_ImagBuffer_Temp[ch][slot_idx],
                                  hSpatParamRendCom->num_freq_bands,
                                  st_ivas->cldfbAnaDec[ch] );
#endif
            }
        }

        if ( st_ivas->ism_mode == ISM_MASA_MODE_PARAM_ONE_OBJ )
        {
#ifdef FIX_1319_STACK_SBA_DECODER
            ivas_omasa_preProcessStereoTransportsForEditedObjects( st_ivas, Cldfb_RealBuffer_Binaural[0], Cldfb_ImagBuffer_Binaural[0], hSpatParamRendCom->num_freq_bands, subframe_idx );
#else
            ivas_omasa_preProcessStereoTransportsForEditedObjects( st_ivas, Cldfb_RealBuffer_Temp, Cldfb_ImagBuffer_Temp, hSpatParamRendCom->num_freq_bands, subframe_idx );
#endif
        }
    }

@@ -1968,13 +1941,8 @@ void ivas_dirac_dec_render_sf(
        {
            for ( ch = 0; ch < nchan_transport; ch++ )
            {
#ifdef FIX_1319_STACK_SBA_DECODER
                mvr2r( Cldfb_RealBuffer_Binaural[0][ch][slot_idx], Cldfb_RealBuffer[ch][0], hSpatParamRendCom->num_freq_bands );
                mvr2r( Cldfb_ImagBuffer_Binaural[0][ch][slot_idx], Cldfb_ImagBuffer[ch][0], hSpatParamRendCom->num_freq_bands );
#else
                mvr2r( Cldfb_RealBuffer_Temp[ch][slot_idx], Cldfb_RealBuffer[ch][0], hSpatParamRendCom->num_freq_bands );
                mvr2r( Cldfb_ImagBuffer_Temp[ch][slot_idx], Cldfb_ImagBuffer[ch][0], hSpatParamRendCom->num_freq_bands );
#endif
            }
        }
        else
@@ -2417,7 +2385,6 @@ void ivas_dirac_dec_render_sf(
            }
        }

#ifdef FIX_1319_STACK_SBA_DECODER
        /* Perform binaural rendering */
        if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
        {
@@ -2430,42 +2397,12 @@ void ivas_dirac_dec_render_sf(
                         Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );
        }

#else
        /* Perform binaural rendering */
        ivas_binRenderer( st_ivas->hBinRenderer, ( st_ivas->hSplitBinRend == NULL ) ? NULL : &st_ivas->hSplitBinRend->splitrend.multiBinPoseData, st_ivas->hCombinedOrientationData, hSpatParamRendCom->subframe_nbslots[subframe_idx],
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
                          NULL,
#endif
                          Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );

        if ( st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hDecoderConfig->output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
        {
            int16_t pos_idx;
            for ( pos_idx = 0; pos_idx < st_ivas->hBinRenderer->numPoses; pos_idx++ )
            {
                for ( slot_idx = 0; slot_idx < hSpatParamRendCom->subframe_nbslots[subframe_idx]; slot_idx++ )
                {
                    for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ )
                    {
                        mvr2r( Cldfb_RealBuffer_Binaural[pos_idx][ch][slot_idx], st_ivas->hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[( pos_idx * BINAURAL_CHANNELS ) + ch][slot_idx_start + slot_idx], hSpatParamRendCom->num_freq_bands );
                        mvr2r( Cldfb_ImagBuffer_Binaural[pos_idx][ch][slot_idx], st_ivas->hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[( pos_idx * BINAURAL_CHANNELS ) + ch][slot_idx_start + slot_idx], hSpatParamRendCom->num_freq_bands );
                    }
                }
            }
        }
#endif

        /* Inverse CLDFB*/
        for ( ch = 0; ch < st_ivas->hDecoderConfig->nchan_out; ch++ )
        {
            /* open CLDFB buffer up to CLDFB_NO_CHANNELS_MAX bands for 48kHz */
#ifdef FIX_1319_STACK_SBA_DECODER
            float *RealBuffer[CLDFB_SLOTS_PER_SUBFRAME];
            float *ImagBuffer[CLDFB_SLOTS_PER_SUBFRAME];
#else
            float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES];
            float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES];
#endif

            for ( i = 0; i < hSpatParamRendCom->subframe_nbslots[subframe_idx]; i++ )
            {
@@ -2489,13 +2426,8 @@ void ivas_dirac_dec_render_sf(
    }
    else
    {
#ifdef FIX_1319_STACK_SBA_DECODER
        float *RealBuffer[CLDFB_SLOTS_PER_SUBFRAME];
        float *ImagBuffer[CLDFB_SLOTS_PER_SUBFRAME];
#else
        float *RealBuffer[MAX_PARAM_SPATIAL_SUBFRAMES];
        float *ImagBuffer[MAX_PARAM_SPATIAL_SUBFRAMES];
#endif
        int16_t outchannels;

        idx_in = 0;
+0 −17
Original line number Diff line number Diff line
@@ -1367,28 +1367,15 @@ void ivas_spar_dec_upmixer_sf(
)
{
    int16_t cldfb_band, num_cldfb_bands, numch_in, numch_out;
#ifdef FIX_1319_STACK_SBA_DECODER
    float *cldfb_in_ts_re[HOA3_CHANNELS][CLDFB_NO_COL_MAX];
    float *cldfb_in_ts_im[HOA3_CHANNELS][CLDFB_NO_COL_MAX];
#else
    float *cldfb_in_ts_re[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX];
    float *cldfb_in_ts_im[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][CLDFB_NO_COL_MAX];
#endif
    int16_t i, b, ts, out_ch, in_ch;
    int16_t num_spar_bands, spar_band, nchan_transport;
    int16_t num_in_ingest, split_band;
    int16_t slot_size, slot_idx_start;
#ifdef FIX_1319_STACK_SBA_DECODER
    float *p_tc[HOA3_CHANNELS];
#else
    float *p_tc[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS];
#endif
    int16_t md_idx;
#ifdef FIX_1319_STACK_SBA_DECODER
    float Pcm_tmp[HOA3_CHANNELS][2 /* Re, Im*/ * L_FRAME48k / MAX_PARAM_SPATIAL_SUBFRAMES];
#else
    float Pcm_tmp[MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS][L_FRAME48k];
#endif
    int16_t numch_out_dirac;
    float mixer_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH][IVAS_MAX_NUM_BANDS];
    int16_t b_skip_mat[IVAS_SPAR_MAX_CH][IVAS_SPAR_MAX_CH];
@@ -1503,11 +1490,7 @@ void ivas_spar_dec_upmixer_sf(
    if ( hDecoderConfig->output_config != IVAS_AUDIO_CONFIG_FOA )
    {
        /* at this point, output channels are used as intermediate procesing buffers */
#ifdef FIX_1319_STACK_SBA_DECODER
        for ( in_ch = 0; in_ch < HOA3_CHANNELS; in_ch++ )
#else
        for ( in_ch = 0; in_ch < MAX_OUTPUT_CHANNELS + MAX_NUM_OBJECTS; in_ch++ )
#endif
        {
            for ( ts = 0; ts < MAX_PARAM_SPATIAL_SUBFRAMES; ts++ )
            {
+0 −2
Original line number Diff line number Diff line
@@ -4832,11 +4832,9 @@ static void ivas_destroy_handle_isar(
            free( ( *hSplitBinRend )->hCldfbDataOut );
            ( *hSplitBinRend )->hCldfbDataOut = NULL;
        }
#ifdef FIX_1319_STACK_SBA_DECODER

        free( ( *hSplitBinRend ) );
        ( *hSplitBinRend ) = NULL;
#endif
    }

    return;