Commit ddc854cf authored by TYAGIRIS's avatar TYAGIRIS
Browse files

adding support for MC fast conv and TD renderer

parent 1f02e7cc
Loading
Loading
Loading
Loading
Loading
+49 −15
Original line number Diff line number Diff line
@@ -518,12 +518,15 @@ ivas_error ivas_dec(
            /* Rendering */
            if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM )
            {
                if ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED )
#ifdef SPLIT_REND_WITH_HEAD_ROT
                if ( ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ||
                     ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) )
                {
                    ivas_rend_crendProcessSplitBin( st_ivas, output, output_frame );
                }
                else
                {
#endif
                    if ( ( error = ivas_rend_crendProcess( st_ivas->hCrendWrapper, st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hDecoderConfig,
                                                           st_ivas->hCombinedOrientationData, &st_ivas->hIntSetup, st_ivas->hEFAPdata, p_output, output_Fs
#ifdef SPLIT_REND_WITH_HEAD_ROT
@@ -537,7 +540,9 @@ ivas_error ivas_dec(
                    }

                    ivas_binaural_add_LFE( st_ivas, output_frame, p_output, p_output );
#ifdef SPLIT_REND_WITH_HEAD_ROT
                }
#endif
            }
            else if ( st_ivas->renderer_type == RENDERER_MC )
            {
@@ -549,19 +554,24 @@ ivas_error ivas_dec(
            }
            else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD )
            {
                if ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED )
#ifdef SPLIT_REND_WITH_HEAD_ROT
                if ( ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ||
                     ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) )
                {
                    ObjRenderIvasFrame_splitBinaural( st_ivas, output, output_frame ); 
                }
                else
                {
#endif
                    if ( ( ivas_td_binaural_renderer( st_ivas, p_output, output_frame ) ) != IVAS_ERR_OK )
                    {
                        return error;
                    }

                    ivas_binaural_add_LFE( st_ivas, output_frame, p_output, p_output );
#ifdef SPLIT_REND_WITH_HEAD_ROT
                }
#endif
            }
        }
        else if ( st_ivas->mc_mode == MC_MODE_PARAMUPMIX )
@@ -596,6 +606,15 @@ ivas_error ivas_dec(
            /* Rendering */
            if ( st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV || st_ivas->renderer_type == RENDERER_BINAURAL_MIXER_CONV_ROOM )
            {
#ifdef SPLIT_REND_WITH_HEAD_ROT
                if ( ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ||
                     ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) )
                {
                    ivas_rend_crendProcessSplitBin( st_ivas, output, output_frame );
                }
                else
                {
#endif
                    if ( ( error = ivas_rend_crendProcess( st_ivas->hCrendWrapper, st_ivas->intern_config, st_ivas->hOutSetup.output_config, st_ivas->hDecoderConfig,
                                                           st_ivas->hCombinedOrientationData, &st_ivas->hIntSetup, st_ivas->hEFAPdata, p_output, output_Fs
#ifdef SPLIT_REND_WITH_HEAD_ROT
@@ -608,6 +627,9 @@ ivas_error ivas_dec(
                    }

                    ivas_binaural_add_LFE( st_ivas, output_frame, p_output, p_output );
#ifdef SPLIT_REND_WITH_HEAD_ROT
                }
#endif
            }
            else if ( st_ivas->renderer_type == RENDERER_MC )
            {
@@ -626,12 +648,24 @@ ivas_error ivas_dec(
            }
            else if ( st_ivas->renderer_type == RENDERER_BINAURAL_OBJECTS_TD )
            {
#ifdef SPLIT_REND_WITH_HEAD_ROT
                if ( ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ||
                     ( output_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) )
                {
                    ObjRenderIvasFrame_splitBinaural( st_ivas, output, output_frame ); // TODO tmu check
                }
                else
                {
#endif
                    if ( ( ivas_td_binaural_renderer( st_ivas, p_output, output_frame ) ) != IVAS_ERR_OK )
                    {
                        return error;
                    }

                    ivas_binaural_add_LFE( st_ivas, output_frame, p_output, p_output );
#ifdef SPLIT_REND_WITH_HEAD_ROT
                }
#endif
            }
        }
        else if ( st_ivas->mc_mode == MC_MODE_PARAMMC )
@@ -791,7 +825,7 @@ ivas_error ivas_dec(
                                            hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural,
                                            hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural,
                                            max_band, output, 1,
                                            st_ivas->ivas_format != SBA_FORMAT,
                                            st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV,
                                            pcm_out );

        free( st_ivas->splitBinRend.hMultiBinCldfbData );
+21 −2
Original line number Diff line number Diff line
@@ -1554,8 +1554,8 @@ void ivas_param_mc_dec_render(
    float Cldfb_RealBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer[MAX_INTERN_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
#ifdef SPLIT_REND_WITH_HEAD_ROT
    float Cldfb_RealBuffer_Binaural[1][BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural[1][BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_RealBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
#else
    float Cldfb_RealBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_ImagBuffer_Binaural[BINAURAL_CHANNELS][PARAM_MC_MAX_NSLOTS_IN_SUBFRAME][CLDFB_NO_CHANNELS_MAX];
@@ -1766,6 +1766,25 @@ void ivas_param_mc_dec_render(
                              NULL,
#endif
                              Cldfb_RealBuffer_Binaural, Cldfb_ImagBuffer_Binaural, Cldfb_RealBuffer, Cldfb_ImagBuffer );

#ifdef SPLIT_REND_WITH_HEAD_ROT
            if ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) ||
                 ( st_ivas->hDecoderConfig->output_config == 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 < hParamMC->subframe_nbslots[subframe_idx]; slot_idx++ )
                    {
                        for ( ch = 0; ch < nchan_out_cldfb; ch++ )
                        {
                            mvr2r( Cldfb_RealBuffer_Binaural[pos_idx][ch][slot_idx], st_ivas->splitBinRend.hMultiBinCldfbData->Cldfb_RealBuffer_Binaural[pos_idx][ch][slot_idx_start + slot_idx], hParamMC->num_freq_bands );
                            mvr2r( Cldfb_ImagBuffer_Binaural[pos_idx][ch][slot_idx], st_ivas->splitBinRend.hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural[pos_idx][ch][slot_idx_start + slot_idx], hParamMC->num_freq_bands );
                        }
                    }
                }
            }
#endif
        }
        else if ( hParamMC->synthesis_conf == PARAM_MC_SYNTH_LS_CONV_CLDFB )
        {
+1 −0
Original line number Diff line number Diff line
@@ -2169,6 +2169,7 @@ ivas_error ivas_renderMultiBinToSplitBinaural(
        set_pose_types( hSplitBin->hBinHrSplitPreRend->pose_type, &hSplitBin->multiBinPoseData );
    }

    /*TODO : why should this be called during run time ?*/
    ivas_split_rend_choose_default_codec( &splitCodec, td_input, pcm_out );

    if (