Commit 4fbd8abc authored by TYAGIRIS's avatar TYAGIRIS
Browse files

LCLD 5ms changes

parent bf3f5796
Loading
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -456,9 +456,14 @@ int main(
     *------------------------------------------------------------------------------------------*/

#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef SPLIT_REND_LCLD_5MS
    asked_frame_size = arg.renderFramesize;
#endif
    if ( arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
    {
#ifndef SPLIT_REND_LCLD_5MS
        asked_frame_size = arg.renderFramesize;
#endif
        if ( ( error = IVAS_DEC_EnableSplitRendering( hIvasDec ) ) != IVAS_ERR_OK )
        {
            fprintf( stderr, "\nConfigure failed: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
@@ -471,10 +476,12 @@ int main(
            goto cleanup;
        }

#ifndef SPLIT_REND_LCLD_5MS
        if ( arg.renderFramesize != asked_frame_size )
        {
            fprintf( stderr, "\nChanged render framesize, only 20ms are allowed for split rendering!\n" );
        }
#endif

        arg.enableHeadRotation = true;
    }
@@ -629,6 +636,7 @@ int main(
        }

#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifndef SPLIT_REND_LCLD_5MS
        if ( arg.renderFramesize == IVAS_RENDER_FRAMESIZE_5MS && ( renderConfig.split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ||
                                                                   renderConfig.split_rend_config.dof == 0 ) )
        {
@@ -645,6 +653,7 @@ int main(
            return error;
        }

#endif
#endif

        if ( RenderConfigReader_read( renderConfigReader, arg.renderConfigFilename, &renderConfig ) != IVAS_ERR_OK )
@@ -659,6 +668,31 @@ int main(
            goto cleanup;
        }

#ifdef SPLIT_REND_LCLD_5MS
#ifdef SPLIT_REND_WITH_HEAD_ROT
        if ( asked_frame_size == IVAS_RENDER_FRAMESIZE_5MS && ( renderConfig.split_rend_config.poseCorrectionMode == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_NONE ||
                                                                renderConfig.split_rend_config.dof == 0 ) )
        {
            arg.renderFramesize = IVAS_RENDER_FRAMESIZE_5MS;
        }
        else
        {
            arg.renderFramesize = IVAS_RENDER_FRAMESIZE_20MS;
        }

        if ( ( error = IVAS_DEC_SetRenderFramesize( hIvasDec, arg.renderFramesize ) ) != IVAS_ERR_OK )
        {
            return error;
        }

        if ( arg.renderFramesize != asked_frame_size )
        {
            fprintf( stderr, "\nChanged render framesize, only 20ms are allowed for non-0dof split rendering!\n" );
        }

#endif
#endif

        if ( arg.outputConfig == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
        {
            if ( ( error = RenderConfigReader_getAcousticEnvironment( renderConfigReader, arg.acousticEnvironmentId, &renderConfig.roomAcoustics ) ) == IVAS_ERR_OK )
+3 −0
Original line number Diff line number Diff line
@@ -134,6 +134,8 @@
/*#define SPLIT_REND_WITH_HEAD_ROT_DEBUG*/      /* debugging switch for split rendering */
/*#define SPLIT_POSE_CORRECTION_DEBUG*/         /* debugging switch for split rendering pose correction */
/*#define SPLIT_MD_CODING_DEBUG*/               /* debugging switch for split rendering metadata coding */
/*#define DEBUG_WRITE_PREDICTORS*/              /* debugging switch for LCDL predictors*/
/*#define DEBUG_WRITE_MS_PRED*/                 /* debugging switch for LCLD mid-side prediction*/

#endif /* DEBUGGING */

@@ -172,6 +174,7 @@
#define SPLIT_REND_HF_TUNING                                  /* Dlb: issue 950: split rendering MD tuning change at high frequencies*/
#define SPLIT_REND_MC_FIX_LFE                                 /* Dlb: issue 950: split rendering LFE fix for 7.1 and 5.1 MC mode*/
#define SPLIT_EXT_REND_FIX_LIMITER_POS                        /* Dlb: issue 950: fixing limiter position in split rendering mode in external renderer*/
#define SPLIT_REND_LCLD_5MS                                   /* Dlb: LCLD 5ms framing operation  */
#endif

/* ##################### End NON-BE switches ########################### */
+12 −1
Original line number Diff line number Diff line
@@ -247,10 +247,18 @@ static ivas_error ivas_dec_init_split_rend(
        }
    }

#ifdef SPLIT_REND_LCLD_5MS
    if ( ( error = ivas_split_rend_choose_default_codec( &st_ivas->hRenderConfig->split_rend_config.codec, &st_ivas->hRenderConfig->split_rend_config.codec_frame_size_ms, cldfb_in_flag, pcm_out_flag, st_ivas->hDecoderConfig->render_framesize == IVAS_RENDER_FRAMESIZE_5MS ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#else
    if ( ( error = ivas_split_rend_choose_default_codec( &st_ivas->hRenderConfig->split_rend_config.codec, &st_ivas->hRenderConfig->split_rend_config.codec_frame_size_ms, cldfb_in_flag, pcm_out_flag ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif


#ifdef SPLIT_REND_WITH_HEAD_ROT
    if ( st_ivas->renderer_type == RENDERER_BINAURAL_FASTCONV && st_ivas->ivas_format == SBA_ISM_FORMAT )
@@ -2477,7 +2485,9 @@ void ivas_initialize_handles_dec(
    st_ivas->hSplitBinRend.hMultiBinCldfbData = NULL;
    st_ivas->hSplitBinRend.hSplitRendBits = NULL;
    st_ivas->hSplitBinRend.hCldfbDataOut = NULL;
#ifndef SPLIT_REND_LCLD_5MS
    st_ivas->hSplitBinRend.tdDataOut = NULL;
#endif
    st_ivas->hSplitBinRend.numTdSamplesPerChannelCached = 0;
    ivas_init_split_rend_handles( &st_ivas->hSplitBinRend.splitrend );
#endif
@@ -2627,11 +2637,12 @@ void ivas_destroy_dec(
        free( st_ivas->hSplitBinRend.hCldfbDataOut );
        st_ivas->hSplitBinRend.hCldfbDataOut = NULL;
    }

#ifndef SPLIT_REND_LCLD_5MS
    if ( st_ivas->hSplitBinRend.tdDataOut != NULL )
    {
        free( st_ivas->hSplitBinRend.tdDataOut );
    }
#endif
#endif

    /* Parametric binaural renderer handle */
+27 −3
Original line number Diff line number Diff line
@@ -66,11 +66,15 @@ const int16_t MC_PARAMUPMIX_CHIDX2[MC_PARAMUPMIX_COMBINATIONS] = { 2, 3, 6, 7 };

static void ps_pred_process_sf( MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix, DECODER_TC_BUFFER_HANDLE hTcBuffer, float qmf_mod_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_mod_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_re[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float qmf_side_im[JBM_CLDFB_SLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX], float *param_interpol, const int16_t ch, const int16_t slots_rendered );

#ifndef SPLIT_REND_LCLD_5MS
#ifdef SPLIT_REND_WITH_HEAD_ROT
static void ivas_mc_paramupmix_dec_sf( Decoder_Struct *st_ivas, float *output_f[MAX_OUTPUT_CHANNELS], const int16_t slot_index_start );
#else
static void ivas_mc_paramupmix_dec_sf( Decoder_Struct *st_ivas, float *output_f[MAX_OUTPUT_CHANNELS] );
#endif
#else
static void ivas_mc_paramupmix_dec_sf( Decoder_Struct *st_ivas, float *output_f[MAX_OUTPUT_CHANNELS] );
#endif

static void ivas_param_upmix_dec_decorr_subframes( Decoder_Struct *st_ivas, const int16_t nSamplesForRendering );

@@ -208,8 +212,10 @@ void ivas_mc_paramupmix_dec_render(
    int16_t slots_to_render, first_sf, last_sf, subframe_idx;
    uint16_t slot_size, ch;
    float *output_f_local[MAX_OUTPUT_CHANNELS];
#ifndef SPLIT_REND_LCLD_5MS
#ifdef SPLIT_REND_WITH_HEAD_ROT
    int16_t slot_index_start;
#endif
#endif
    MC_PARAMUPMIX_DEC_HANDLE hMCParamUpmix;

@@ -251,18 +257,22 @@ void ivas_mc_paramupmix_dec_render(
            mvr2r( hMCParamUpmix->alpha_prev[ch], hMCParamUpmix->alpha_sf[ch], IVAS_MAX_NUM_BANDS );
            mvr2r( hMCParamUpmix->beta_prev[ch], hMCParamUpmix->beta_sf[ch], IVAS_MAX_NUM_BANDS );
        }

#ifndef SPLIT_REND_LCLD_5MS
#ifdef SPLIT_REND_WITH_HEAD_ROT
        slot_index_start = 0;
#endif
#endif
        for ( subframe_idx = first_sf; subframe_idx < last_sf; subframe_idx++ )
        {
            int16_t n_samples_sf = slot_size * st_ivas->hTcBuffer->subframe_nbslots[subframe_idx];

#ifndef SPLIT_REND_LCLD_5MS
#ifdef SPLIT_REND_WITH_HEAD_ROT
            ivas_mc_paramupmix_dec_sf( st_ivas, output_f_local, slot_index_start );

            slot_index_start += st_ivas->hTcBuffer->subframe_nbslots[subframe_idx];
#else
            ivas_mc_paramupmix_dec_sf( st_ivas, output_f_local );
#endif
#else
            ivas_mc_paramupmix_dec_sf( st_ivas, output_f_local );
#endif
@@ -644,7 +654,7 @@ static void ps_pred_process_sf(
    return;
}


#ifndef SPLIT_REND_LCLD_5MS
static void ivas_mc_paramupmix_dec_sf(
    Decoder_Struct *st_ivas, /* i/o: IVAS decoder handle                        */
#ifdef SPLIT_REND_WITH_HEAD_ROT
@@ -654,6 +664,12 @@ static void ivas_mc_paramupmix_dec_sf(
    float *output_f[MAX_OUTPUT_CHANNELS] /* i/o: synthesized core-coder transport channels  */
#endif
)
#else
static void ivas_mc_paramupmix_dec_sf(
    Decoder_Struct *st_ivas,             /* i/o: IVAS decoder handle                        */
    float *output_f[MAX_OUTPUT_CHANNELS] /* i/o: synthesized core-coder transport channels  */
)
#endif
{
    int16_t i, ch, slot_idx, k;
    float *pPcm_temp[MC_PARAMUPMIX_COMBINATIONS * 2]; /* decorrelated and undecorrelated*/
@@ -668,6 +684,9 @@ static void ivas_mc_paramupmix_dec_sf(
#ifdef SPLIT_REND_WITH_HEAD_ROT
    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];
#ifdef SPLIT_REND_LCLD_5MS
    int16_t slot_index_start;
#endif
#else
    float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX];
@@ -677,6 +696,11 @@ static void ivas_mc_paramupmix_dec_sf(
    assert( hMCParamUpmix );
    push_wmops( "ivas_mc_paramupmix_dec_sf" );

#ifdef SPLIT_REND_WITH_HEAD_ROT
#ifdef SPLIT_REND_LCLD_5MS
    slot_index_start = st_ivas->hTcBuffer->slots_rendered;
#endif
#endif
    for ( i = 0; i < MC_PARAMUPMIX_COMBINATIONS; i++ )
    {
        pPcm_temp[2 * i] = output_f[i + 4];     /* un-decorrelated */
+3 −1
Original line number Diff line number Diff line
@@ -979,7 +979,9 @@ typedef struct
    IVAS_SPLIT_REND_BITS_HANDLE hSplitRendBits;                         /*scratch buffer for frame by frame processing*/
    SPLIT_REND_WRAPPER splitrend;
    IVAS_DEC_SPLIT_REND_CLDFB_OUT_DATA_HANDLE hCldfbDataOut; /*buffer to store cldfb data before binauralization*/
#ifndef SPLIT_REND_LCLD_5MS
    float *tdDataOut; /*buffer to store TD data before binauralization*/
#endif
    int16_t numTdSamplesPerChannelCached;

} IVAS_DEC_SPLIT_REND_WRAPPER;
Loading