Commit a8dbcb32 authored by Adam Mills's avatar Adam Mills
Browse files

Adding in fixes for split rending on mc and ism

parent 5f5bcd51
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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
+6 −0
Original line number Diff line number Diff line
@@ -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 ######################### */
+12 −0
Original line number Diff line number Diff line
@@ -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++ )
+24 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -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;
    }
@@ -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:
+44 −0
Original line number Diff line number Diff line
@@ -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,
@@ -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,
@@ -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,
@@ -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, 
@@ -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