Loading lib_com/ivas_cnst.h +3 −0 Original line number Diff line number Diff line Loading @@ -1552,6 +1552,9 @@ typedef enum #define MAX_SPLIT_MD_SUBFRAMES 1 #define COMPLEX_MD_BAND_THRESH MAX_SPLIT_REND_MD_BANDS #define COMPLEX_MD_BAND_THRESH_LOW 5 #ifdef SPLIT_REND_HF_TUNING #define SPLIT_REND_RO_MD_BAND_THRESH 4 #endif #define IVAS_SPLIT_REND_NUM_QUANT_STRATS 4 #define IVAS_SPLIT_REND_PRED_63QUANT_PNTS 63 Loading lib_com/options.h +6 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,12 @@ #define NONBE_FIX_856_TCX_LTP_SYNTH_FILTER /* FhG: issue 856: correct filtering length for tcx-ltp synth filtering*/ #define NONBE_FIX_943_RECONFIG_IGF_AFTER_SETTING_BW /* FhG: issue 943: fix crash in BW switchin from WB in MDCT-Stereo core encoder */ #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_HF_TUNING #define SPLIT_REND_MC_FIX_LFE #define SPLIT_EXT_REND_FIX_LIMITER_POS #endif /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ Loading lib_dec/ivas_objectRenderer_internal.c +12 −0 Original line number Diff line number Diff line Loading @@ -342,6 +342,18 @@ ivas_error ivas_td_binaural_renderer_sf_splitBinaural( { return error; } #ifdef SPLIT_REND_MC_FIX_LFE if ( st_ivas->ivas_format == MC_FORMAT ) { float *p_tc[MAX_TRANSPORT_CHANNELS]; for ( i = 0; i < st_ivas->nchan_transport; i++ ) { p_tc[i] = st_ivas->hTcBuffer->tc[i] + st_ivas->hTcBuffer->n_samples_rendered; } ivas_binaural_add_LFE( st_ivas, nSamplesRendered, p_tc, p_bin_output ); } #endif } for ( i = 0; i < pMultiBinPoseData->num_poses * BINAURAL_CHANNELS; i++ ) Loading lib_dec/lib_dec.c +24 −1 Original line number Diff line number Diff line Loading @@ -1051,6 +1051,9 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream( int16_t pcm_out_flag; int16_t td_input; int16_t numPoses; #ifdef SPLIT_REND_HF_TUNING int16_t ro_md_flag; #endif error = IVAS_ERR_OK; st_ivas = hIvasDec->st_ivas; Loading Loading @@ -1152,7 +1155,25 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream( max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); pcm_out_flag = ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0; td_input = st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC; #ifdef SPLIT_REND_HF_TUNING if ( st_ivas->hBinRendererTd != NULL ) { ro_md_flag = 1; } else { ro_md_flag = 0; } if ( ( error = ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, st_ivas->hHeadTrackData->Quaternions[0], st_ivas->hRenderConfig->split_rend_config.splitRendBitRate, st_ivas->hRenderConfig->split_rend_config.codec, st_ivas->hRenderConfig->split_rend_config.codec_frame_size_ms, hSplitBinRend->hSplitRendBits, hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, max_band, pOutput, 1, !td_input, pcm_out_flag, ro_md_flag ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, st_ivas->hHeadTrackData->Quaternions[0], st_ivas->hRenderConfig->split_rend_config.splitRendBitRate, Loading @@ -1162,6 +1183,7 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream( hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, max_band, pOutput, 1, !td_input, pcm_out_flag ) ) != IVAS_ERR_OK ) #endif { return error; } Loading Loading @@ -3699,6 +3721,7 @@ static ivas_error set_pcm_buffer_to_zero( { ivas_error error; error = IVAS_ERR_OK; switch ( pcmType ) { case IVAS_DEC_PCM_FLOAT: Loading lib_rend/ivas_prot_rend.h +44 −0 Original line number Diff line number Diff line Loading @@ -1574,6 +1574,24 @@ void ivas_renderSplitUpdateNoCorrectionPoseData( MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ); #ifdef SPLIT_REND_HF_TUNING ivas_error ivas_renderMultiBinToSplitBinaural( SPLIT_REND_WRAPPER *hSplitBin, const IVAS_QUATERNION headPosition, const int32_t SplitRendBitRate, IVAS_SPLIT_REND_CODEC splitCodec, int16_t codec_frame_size_ms, IVAS_SPLIT_REND_BITS_HANDLE pBits, float Cldfb_In_BinReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_BinImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t max_bands, float *output[], const int16_t low_res_pre_rend_rot, const int16_t cldfb_in_flag, const int16_t pcm_out_flag, const int16_t ro_md_flag ); #else ivas_error ivas_renderMultiBinToSplitBinaural( SPLIT_REND_WRAPPER *hSplitBin, const IVAS_QUATERNION headPosition, Loading @@ -1589,7 +1607,21 @@ ivas_error ivas_renderMultiBinToSplitBinaural( const int16_t cldfb_in_flag, const int16_t pcm_out_flag ); #endif #ifdef SPLIT_REND_HF_TUNING void ivas_rend_CldfbSplitPreRendProcess( const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, const IVAS_QUATERNION headPosition, MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_In_BinReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_BinImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], IVAS_SPLIT_REND_BITS_HANDLE pBits, const int32_t target_md_bits, const int16_t low_res_pre_rend_rot, const int16_t ro_md_flag ); #else void ivas_rend_CldfbSplitPreRendProcess( const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, const IVAS_QUATERNION headPosition, Loading @@ -1600,6 +1632,7 @@ void ivas_rend_CldfbSplitPreRendProcess( const int32_t target_md_bits, const int16_t low_res_pre_rend_rot ); #endif void ivas_rend_CldfbSplitPostRendProcess( BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, Loading Loading @@ -1672,6 +1705,16 @@ void ivas_log_cldfb2wav_data( ); #endif #ifdef SPLIT_REND_HF_TUNING void ivas_SplitRenderer_GetRotMd( BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_RealBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ float Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ const int16_t low_res, const int16_t ro_md_flag ); #else void ivas_SplitRenderer_GetRotMd( BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, Loading @@ -1679,6 +1722,7 @@ void ivas_SplitRenderer_GetRotMd( float Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ const int16_t low_res ); #endif void ivas_SplitRenderer_PostRenderer( BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ Loading Loading
lib_com/ivas_cnst.h +3 −0 Original line number Diff line number Diff line Loading @@ -1552,6 +1552,9 @@ typedef enum #define MAX_SPLIT_MD_SUBFRAMES 1 #define COMPLEX_MD_BAND_THRESH MAX_SPLIT_REND_MD_BANDS #define COMPLEX_MD_BAND_THRESH_LOW 5 #ifdef SPLIT_REND_HF_TUNING #define SPLIT_REND_RO_MD_BAND_THRESH 4 #endif #define IVAS_SPLIT_REND_NUM_QUANT_STRATS 4 #define IVAS_SPLIT_REND_PRED_63QUANT_PNTS 63 Loading
lib_com/options.h +6 −0 Original line number Diff line number Diff line Loading @@ -163,6 +163,12 @@ #define NONBE_FIX_856_TCX_LTP_SYNTH_FILTER /* FhG: issue 856: correct filtering length for tcx-ltp synth filtering*/ #define NONBE_FIX_943_RECONFIG_IGF_AFTER_SETTING_BW /* FhG: issue 943: fix crash in BW switchin from WB in MDCT-Stereo core encoder */ #ifdef SPLIT_REND_WITH_HEAD_ROT #define SPLIT_REND_HF_TUNING #define SPLIT_REND_MC_FIX_LFE #define SPLIT_EXT_REND_FIX_LIMITER_POS #endif /* ##################### End NON-BE switches ########################### */ /* ################## End DEVELOPMENT switches ######################### */ Loading
lib_dec/ivas_objectRenderer_internal.c +12 −0 Original line number Diff line number Diff line Loading @@ -342,6 +342,18 @@ ivas_error ivas_td_binaural_renderer_sf_splitBinaural( { return error; } #ifdef SPLIT_REND_MC_FIX_LFE if ( st_ivas->ivas_format == MC_FORMAT ) { float *p_tc[MAX_TRANSPORT_CHANNELS]; for ( i = 0; i < st_ivas->nchan_transport; i++ ) { p_tc[i] = st_ivas->hTcBuffer->tc[i] + st_ivas->hTcBuffer->n_samples_rendered; } ivas_binaural_add_LFE( st_ivas, nSamplesRendered, p_tc, p_bin_output ); } #endif } for ( i = 0; i < pMultiBinPoseData->num_poses * BINAURAL_CHANNELS; i++ ) Loading
lib_dec/lib_dec.c +24 −1 Original line number Diff line number Diff line Loading @@ -1051,6 +1051,9 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream( int16_t pcm_out_flag; int16_t td_input; int16_t numPoses; #ifdef SPLIT_REND_HF_TUNING int16_t ro_md_flag; #endif error = IVAS_ERR_OK; st_ivas = hIvasDec->st_ivas; Loading Loading @@ -1152,7 +1155,25 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream( max_band = (int16_t) ( ( BINAURAL_MAXBANDS * output_Fs ) / 48000 ); pcm_out_flag = ( output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ? 1 : 0; td_input = st_ivas->renderer_type != RENDERER_BINAURAL_FASTCONV && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC && st_ivas->renderer_type != RENDERER_BINAURAL_PARAMETRIC_ROOM && st_ivas->renderer_type != RENDERER_STEREO_PARAMETRIC; #ifdef SPLIT_REND_HF_TUNING if ( st_ivas->hBinRendererTd != NULL ) { ro_md_flag = 1; } else { ro_md_flag = 0; } if ( ( error = ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, st_ivas->hHeadTrackData->Quaternions[0], st_ivas->hRenderConfig->split_rend_config.splitRendBitRate, st_ivas->hRenderConfig->split_rend_config.codec, st_ivas->hRenderConfig->split_rend_config.codec_frame_size_ms, hSplitBinRend->hSplitRendBits, hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, max_band, pOutput, 1, !td_input, pcm_out_flag, ro_md_flag ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_renderMultiBinToSplitBinaural( &hSplitBinRend->splitrend, st_ivas->hHeadTrackData->Quaternions[0], st_ivas->hRenderConfig->split_rend_config.splitRendBitRate, Loading @@ -1162,6 +1183,7 @@ ivas_error IVAS_DEC_GetSplitBinauralBitstream( hSplitBinRend->hMultiBinCldfbData->Cldfb_RealBuffer_Binaural, hSplitBinRend->hMultiBinCldfbData->Cldfb_ImagBuffer_Binaural, max_band, pOutput, 1, !td_input, pcm_out_flag ) ) != IVAS_ERR_OK ) #endif { return error; } Loading Loading @@ -3699,6 +3721,7 @@ static ivas_error set_pcm_buffer_to_zero( { ivas_error error; error = IVAS_ERR_OK; switch ( pcmType ) { case IVAS_DEC_PCM_FLOAT: Loading
lib_rend/ivas_prot_rend.h +44 −0 Original line number Diff line number Diff line Loading @@ -1574,6 +1574,24 @@ void ivas_renderSplitUpdateNoCorrectionPoseData( MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData ); #ifdef SPLIT_REND_HF_TUNING ivas_error ivas_renderMultiBinToSplitBinaural( SPLIT_REND_WRAPPER *hSplitBin, const IVAS_QUATERNION headPosition, const int32_t SplitRendBitRate, IVAS_SPLIT_REND_CODEC splitCodec, int16_t codec_frame_size_ms, IVAS_SPLIT_REND_BITS_HANDLE pBits, float Cldfb_In_BinReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_BinImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], const int16_t max_bands, float *output[], const int16_t low_res_pre_rend_rot, const int16_t cldfb_in_flag, const int16_t pcm_out_flag, const int16_t ro_md_flag ); #else ivas_error ivas_renderMultiBinToSplitBinaural( SPLIT_REND_WRAPPER *hSplitBin, const IVAS_QUATERNION headPosition, Loading @@ -1589,7 +1607,21 @@ ivas_error ivas_renderMultiBinToSplitBinaural( const int16_t cldfb_in_flag, const int16_t pcm_out_flag ); #endif #ifdef SPLIT_REND_HF_TUNING void ivas_rend_CldfbSplitPreRendProcess( const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, const IVAS_QUATERNION headPosition, MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_In_BinReal[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], float Cldfb_In_BinImag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], IVAS_SPLIT_REND_BITS_HANDLE pBits, const int32_t target_md_bits, const int16_t low_res_pre_rend_rot, const int16_t ro_md_flag ); #else void ivas_rend_CldfbSplitPreRendProcess( const BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, const IVAS_QUATERNION headPosition, Loading @@ -1600,6 +1632,7 @@ void ivas_rend_CldfbSplitPreRendProcess( const int32_t target_md_bits, const int16_t low_res_pre_rend_rot ); #endif void ivas_rend_CldfbSplitPostRendProcess( BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend, Loading Loading @@ -1672,6 +1705,16 @@ void ivas_log_cldfb2wav_data( ); #endif #ifdef SPLIT_REND_HF_TUNING void ivas_SplitRenderer_GetRotMd( BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, float Cldfb_RealBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ float Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ const int16_t low_res, const int16_t ro_md_flag ); #else void ivas_SplitRenderer_GetRotMd( BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend, /* i/o: binaural renderer handle */ MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData, Loading @@ -1679,6 +1722,7 @@ void ivas_SplitRenderer_GetRotMd( float Cldfb_ImagBuffer_Ref_Binaural[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* o : Reference Binaural signals */ const int16_t low_res ); #endif void ivas_SplitRenderer_PostRenderer( BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle */ Loading