Commit db0cb169 authored by sagnowski's avatar sagnowski
Browse files

Port some formatting and documentation changes that were omitted in port 171 of float MR 1527

Not all changes from the original MR were ported, which makes porting following MRs more
difficult than it should be.

This commit ports some of the missing changes in preparation for work on port 391: #2102

Original float MR:
ivas-codec-pc/ivas-codec!1527

Incomplete port to BASOP main:
!1977
parent 3fe45f3a
Loading
Loading
Loading
Loading
+168 −152
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@
#ifndef ISAR_PROT_H
#define ISAR_PROT_H


#include "isar_stat.h"
#include <stdint.h>
#include "options.h"
@@ -42,19 +41,59 @@
#include "enh64.h"

/* clang-format off */
/*----------------------------------------------------------------------------------*
 * General ISAR prototypes
 *----------------------------------------------------------------------------------*/

ivas_error isar_splitBinPreRendOpen(
    ISAR_BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend,      /* i/o: binaural pre-renderer handle            */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData                 /* i/o: pose correction data handle             */
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    ,
    const Word32 output_Fs
#endif
);

ivas_error split_renderer_open_lc3plus(
    SPLIT_REND_WRAPPER *hSplitRendWrapper,                      /* i/o: Split renderer pre-renderer handle      */
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig,        /* i  : Split renderer pre-renderer config      */
    const Word32 output_Fs,                                     /* i  : output sampling rate                    */
    const IVAS_RENDER_FRAMESIZE ivas_frame_size                 /* i  : IVAS frame size                         */
);

void isar_splitBinPreRendClose(
    ISAR_BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend       /* i/o: binaural pre-renderer handle            */
);

void lc3plusTimeAlignCldfbPoseCorr(
    SPLIT_REND_WRAPPER *hSplitBin,                              /* i/o: Split renderer pre-renderer handle      */
    Word32 Cldfb_In_BinReal_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: Binaural signals, real part      */
    Word32 Cldfb_In_BinImag_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i/o: Binaural signals, imag. part     */
    Word16 *Q_in 
);

ivas_error splitRendLc3plusEncodeAndWrite(
    SPLIT_REND_WRAPPER *hSplitBin,                              /* i/o: Split renderer pre-renderer handle      */
    ISAR_SPLIT_REND_BITS_HANDLE pBits,                          /* i/o: ISAR bits handle                        */
    const Word32 available_bits,                                /* i  : available bit-budget                    */
    Word32 *in[],                                               /* i/o: PCM in/out buffer                       */
    Word16 Q_sig 
);

/*! r: parameter value  */
Word32 ISAR_SPLIT_REND_BITStream_read_int32(
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    const Word32 bits );
    ISAR_SPLIT_REND_BITS_HANDLE pBits,                          /* i/o: ISAR bits handle                        */
    const Word32 bits                                           /* i  : number of bits to be read               */
);

void ISAR_SPLIT_REND_BITStream_write_int32(
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    const Word32 val,
    const Word32 bits 
    ISAR_SPLIT_REND_BITS_HANDLE pBits,                          /* i/o: ISAR bits handle                        */
    const Word32 val,                                           /* i  : parameter value                         */
    const Word32 bits                                           /* i  : number of bits to be written            */
);

ivas_error isar_splitBinLCLDEncOpen(
    ISAR_BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc,
    ISAR_BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc,        /* o  : ISAR LCLD encoder handle                */
    const Word32 iSampleRate,
    const Word16 iChannels,
    const Word32 iDataRate,
@@ -63,15 +102,16 @@ ivas_error isar_splitBinLCLDEncOpen(
);

ivas_error isar_splitBinRendPLCOpen(
    ISAR_SPLIT_REND_PLC_HANDLE *phSplitRendPLC,
    const Word16 iNumSubSets );
    ISAR_SPLIT_REND_PLC_HANDLE *phSplitRendPLC,                 /* i/o: ISAR PLC handle                         */
    const Word16 iNumSubSets
);

void isar_splitBinRendPLCClose(
    ISAR_SPLIT_REND_PLC_HANDLE *phSplitRendPLC 
    ISAR_SPLIT_REND_PLC_HANDLE *phSplitRendPLC                  /* i/o: ISAR PLC handle                         */
);

ivas_error isar_splitBinLCLDDecOpen(
    ISAR_BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec,
    ISAR_BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec,        /* i/o: ISAR LCLD decoder handle                */
    const Word32 iSampleRate,
    const Word16 iChannels,
    const Word16 iNumBlocks,
@@ -79,7 +119,7 @@ ivas_error isar_splitBinLCLDDecOpen(
);

void isar_splitBinLCLDDecClose(
    ISAR_BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec 
    ISAR_BIN_HR_SPLIT_LCLD_DEC_HANDLE *hSplitBinLCLDDec         /* o  : ISAR LCLD decoder handle                */
);

void isar_splitBinRendPLCsaveState(
@@ -126,47 +166,38 @@ void isar_log_cldfb2wav_data(
    const Word16 md_band_idx,
    const char *filename 
);
#endif

void isar_SplitRenderer_PostRenderer(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle        */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    Word32 Cldfb_RealBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    Word32 Cldfb_ImagBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    const IVAS_QUATERNION Quaternion_act,
    Word16 *Q_in 
);

#endif
void isar_splitBinLCLDDecProcess(
    ISAR_BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec,
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    Word32 Cldfb_Out_Real_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
    Word32 Cldfb_Out_Imag_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
    ISAR_BIN_HR_SPLIT_LCLD_DEC_HANDLE hSplitBinLCLDDec,         /* i/o: ISAR LCLD decoder handle                */
    ISAR_SPLIT_REND_BITS_HANDLE pBits,                          /* i/o: ISAR bits handle                        */
    Word32 Cldfb_Out_Real_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i  : Binaural signals, real part        */
    Word32 Cldfb_Out_Imag_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX], /* i  : Binaural signals, imag. part       */
    Word16 *Q_cldfb_final,
    const Word16 bfi 
    const Word16 bfi                                            /* i  : BFI flag                                */
);

void set_fix_rotation_mat_fx(
    Word32 fix_pos_rot_mat[][BINAURAL_CHANNELS][BINAURAL_CHANNELS],
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData 
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData                 /* i/o: pose correction data handle             */
);

void isar_splitBinLCLDEncClose(
    ISAR_BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc 
    ISAR_BIN_HR_SPLIT_LCLD_ENC_HANDLE *hSplitBinLCLDEnc         /* i/o: ISAR LCLD encoder handle                */
);

void isar_splitBinLCLDEncProcess(
    ISAR_BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc,
    ISAR_BIN_HR_SPLIT_LCLD_ENC_HANDLE hSplitBinLCLDEnc,         /* i/o: ISAR LCLD encoder handle                */
    Word32 Cldfb_In_Real[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
    Word32 Cldfb_In_Imag[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
    const Word32 available_bits,
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    ISAR_SPLIT_REND_BITS_HANDLE pBits,                           /* i/o: ISAR bits handle                        */
    Word16 *q_final 
);

void set_pose_types_fx(
    ISAR_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1],
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData 
    ISAR_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1],/* o  : ISAR pose type                          */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData                 /* i/o: pose correction data handle             */
);

void isar_split_rend_init_huff_cfg(
@@ -174,13 +205,13 @@ void isar_split_rend_init_huff_cfg(
);

ivas_error isar_splitBinPostRendOpen(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend,
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    const Word32 output_Fs 
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend,    /* i/o: binaural post-renderer handle           */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,                /* i/o: pose correction data handle             */
    const Word32 output_Fs                                      /* i  : output sampling rate                    */
);

void isar_splitBinPostRendClose(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend 
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE *hBinHrSplitPostRend     /* i/o: binaural post-renderer handle           */
);

void isar_SplitRenderer_getdiagdiff(
@@ -191,18 +222,6 @@ void isar_SplitRenderer_getdiagdiff(
    const Word16 max_val 
);

void isar_renderSplitGetMultiBinPoseData_fx(
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplit_rend_config,
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    const ISAR_SPLIT_REND_ROT_AXIS rot_axis 
);

void isar_renderSplitGetMultiBinPoseData(
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplit_rend_config,
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    const ISAR_SPLIT_REND_ROT_AXIS rot_axis 
);

void isar_split_rend_get_quant_params_fx(
    const Word16 num_md_bands,
    Word16 pred_real_bands_yaw[ISAR_SPLIT_REND_NUM_QUANT_STRATS],
@@ -219,12 +238,12 @@ void isar_split_rend_get_quant_params_fx(
);

void isar_splitBinPostRendMdDec_fx(
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend,
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData
    ISAR_SPLIT_REND_BITS_HANDLE pBits,                          /* i/o: ISAR bits handle                        */
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend,     /* i/o: binaural post-renderer handle           */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData                 /* i/o: pose correction data handle             */
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    ,
    BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend
    BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend             /* i/o: binaural pre-renderer handle            */
#endif
);

@@ -251,8 +270,8 @@ void isar_mat_mult_2by2_complex_fx(
);

void isar_rend_CldfbSplitPostRendProcess(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend,
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend,     /* i/o: binaural post-renderer handle           */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,                /* i/o: pose correction data handle             */
    const IVAS_QUATERNION QuaternionPost,
    Word32 Cldfb_RealBuffer_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],
    Word32 Cldfb_ImagBuffer_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX],
@@ -262,14 +281,6 @@ void isar_rend_CldfbSplitPostRendProcess(
    const Word16 cldfb_in_flag 
);

void isar_init_multi_bin_pose_data_fx(
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData );

/* Copy for encoder, to be removed */
void isar_init_multi_bin_pose_data_fx_enc(
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData 
);

void isar_rend_CldfbSplitPreRendProcess(
    const ISAR_BIN_HR_SPLIT_PRE_REND_HANDLE hBinHrSplitPreRend,
    const IVAS_QUATERNION headPosition,
@@ -284,6 +295,32 @@ void isar_rend_CldfbSplitPreRendProcess(
    const Word16 ro_md_flag 
);

ivas_error isar_renderMultiTDBinToSplitBinaural(
    SPLIT_REND_WRAPPER *hSplitBin,
    const IVAS_QUATERNION headPosition,
    const Word32 SplitRendBitRate,
    const Word16 isar_frame_size_ms,
    const Word16 codec_frame_size_ms,
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    const Word16 max_bands,
    // float *in[],
    Word32 *in_fx[], // Q11
    Word16 Q_sig,
    const Word16 low_res_pre_rend_rot,
    const Word16 pcm_out_flag,
    const Word16 ro_md_flag 
);

void isar_init_multi_bin_pose_data_fx(
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData                 /* i/o: pose correction data handle             */
);

void isar_renderSplitGetMultiBinPoseData_fx(
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplit_rend_config,      /* i  : Split renderer pre-renderer config      */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,                /* i/o: pose correction data handle             */
    const ISAR_SPLIT_REND_ROT_AXIS rot_axis                     /* i  : external control for rotation axis for split rendering */
);

Word16 isar_renderSplitGetRot_axisNumBits(
    const Word16 dof 
);
@@ -300,50 +337,37 @@ Word16 isar_renderSplitGetCodeFromRot_axis(
);

void isar_init_split_post_rend_handles(
    ISAR_SPLIT_POST_REND_WRAPPER *hSplitRendWrapper );

ivas_error isar_splitBinPreRendOpen(
    ISAR_BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend,
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    const Word32 output_Fs
#else
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData
#endif
);

void isar_splitBinPreRendClose(
    ISAR_BIN_HR_SPLIT_PRE_REND_HANDLE *hBinHrSplitPreRend 
    ISAR_SPLIT_POST_REND_WRAPPER *hSplitRendWrapper             /* i/o: Split renderer post-renderer handle     */
);

void isar_set_split_rend_ht_setup_fx(
    SPLIT_REND_WRAPPER *hSplitrend,
    IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES],
    Word32 Rmat_fx[MAX_PARAM_SPATIAL_SUBFRAMES][3][3] 
    SPLIT_REND_WRAPPER *hSplitrend,                             /* i/o: Split renderer pre-renderer handle      */
    IVAS_QUATERNION Quaternions[MAX_PARAM_SPATIAL_SUBFRAMES],   /* i/o: External orientation in quaternions     */
    Word32 Rmat_fx[MAX_PARAM_SPATIAL_SUBFRAMES][3][3]           /* o  : real-space rotation matrix              */
);

Word32 isar_get_lc3plus_bitrate(
    const Word32 SplitRendBitRate,
    const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode,
    const Word32 nChannels,
    const Word32 codecFrameDurationUs );
    const Word32 SplitRendBitRate,                             /* i  : ISAR bitrate                            */
    const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode, /* i  : ISAR pose correction mode            */
    const Word32 nChannels,                                    /* i  : number of channels                      */
    const Word32 lc3plus_frame_duration_us                     /* i  : ISAR frame length in us                 */
);

ivas_error isar_split_rend_validate_config(
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig,
    const Word16 is_pcm_out 
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig,        /* i  : Split renderer pre-renderer config      */
    const Word16 is_pcm_out                                     /* i  : flag to indicate PCM output             */
);

/*! r: LCLD codec bitrate */
Word32 isar_get_lcld_bitrate(
    const Word32 SplitRendBitRate,
    const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode 
    const Word32 SplitRendBitRate,                             /* i  : ISAR bitrate                            */
    const ISAR_SPLIT_REND_POSE_CORRECTION_MODE poseCorrectionMode /* i  : ISAR pose correction mode             */
);

ivas_error splitRendLc3plusEncodeAndWrite(
    SPLIT_REND_WRAPPER *hSplitBin,
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    const Word32 available_bits,
    Word32 *in[],
    Word16 Q_sig 
/*! r: ISAR MD bitrate */
Word32 isar_get_split_rend_md_target_brate(
    const Word32 SplitRendBitRate,                             /* i  : ISAR bitrate                            */
    const Word16 pcm_out_flag                                  /* i  : flag to indicate PCM output             */
);

ivas_error isar_framesize_to_ms(
@@ -351,11 +375,6 @@ ivas_error isar_framesize_to_ms(
    Word16 *ms                                                  /* o  : frame size in ms                        */
);

Word32 isar_get_split_rend_md_target_brate(
    const Word32 SplitRendBitRate,
    const Word16 pcm_out_flag 
);

ivas_error isar_split_rend_choose_default_codec(
    ISAR_SPLIT_REND_CODEC *pCodec,                              /* i/o: pointer to codec setting                */
    Word16 *pIsar_frame_size_ms,                                /* i/o: pointer to ISAR frame size setting      */
@@ -365,21 +384,9 @@ ivas_error isar_split_rend_choose_default_codec(
    const Word16 num_subframes                                  /* i  : number of subframes                     */
);

void ISAR_SPLIT_REND_BITStream_init(
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    const Word32 buf_len_bytes,
    UWord8 *pbuf 
);

Word16 wrap_a(
    Word16 val,
    const Word16 min_val,
    const Word16 max_val 
);

void isar_renderSplitUpdateNoCorrectionPoseData(
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplit_rend_config,
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplit_rend_config,      /* i  : Split renderer pre-renderer config      */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData                 /* i/o: pose correction data handle             */
);

Word32 get_bit(
@@ -387,45 +394,54 @@ Word32 get_bit(
    const Word32 bit_id 
);

ivas_error split_renderer_open_lc3plus(
    SPLIT_REND_WRAPPER *hSplitRendWrapper,
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplitRendConfig,
    const Word32 OutSampleRate,
    const IVAS_RENDER_FRAMESIZE ivas_frame_size 
);

/*! r: ISAR audio type */
ISAR_POST_REND_AudioConfigType isar_getAudioConfigType(
    const IVAS_AUDIO_CONFIG config 
    const IVAS_AUDIO_CONFIG config                              /* i  : audio configuration                     */
);

void isar_init_split_rend_handles(
    SPLIT_REND_WRAPPER *hSplitRendWrapper 
    SPLIT_REND_WRAPPER *hSplitRendWrapper                       /* i/o: Split renderer pre-renderer handle      */
);

ivas_error isar_renderMultiTDBinToSplitBinaural(
    SPLIT_REND_WRAPPER *hSplitBin,
    const IVAS_QUATERNION headPosition,
    const Word32 SplitRendBitRate,
    const Word16 isar_frame_size_ms,
    const Word16 codec_frame_size_ms,
// UNUSED
void ISAR_SPLIT_REND_BITStream_init(
    ISAR_SPLIT_REND_BITS_HANDLE pBits,
    const Word16 max_bands,
    // float *in[],
    Word32 *in_fx[], // Q11
    Word16 Q_sig,
    const Word16 low_res_pre_rend_rot,
    const Word16 pcm_out_flag,
    const Word16 ro_md_flag 
    const Word32 buf_len_bytes,
    UWord8 *pbuf 
);

void lc3plusTimeAlignCldfbPoseCorr(
    SPLIT_REND_WRAPPER *hSplitBin,
    Word32 Cldfb_In_BinReal_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
    Word32 Cldfb_In_BinImag_fx[][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX],
    Word16 *Q_in 
/*----------------------------------------------------------------------------------*
 * BASOP-only
 *----------------------------------------------------------------------------------*/

/* Copy for encoder, to be removed */
void isar_init_multi_bin_pose_data_fx_enc(
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData 
);


Word16 wrap_a(
    Word16 val,
    const Word16 min_val,
    const Word16 max_val 
);

void isar_renderSplitGetMultiBinPoseData(
    const ISAR_SPLIT_REND_CONFIG_DATA *pSplit_rend_config,
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    const ISAR_SPLIT_REND_ROT_AXIS rot_axis 
);


void isar_SplitRenderer_PostRenderer(
    ISAR_BIN_HR_SPLIT_POST_REND_HANDLE hBinPostRenderer, /* i/o: binaural renderer handle        */
    MULTI_BIN_REND_POSE_DATA *pMultiBinPoseData,
    Word32 Cldfb_RealBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    Word32 Cldfb_ImagBuffer_Ref_Binaural_fx[][CLDFB_NO_COL_MAX / MAX_PARAM_SPATIAL_SUBFRAMES][CLDFB_NO_CHANNELS_MAX], /* i/o  : Reference/out Binaural signals */
    const IVAS_QUATERNION Quaternion_act,
    Word16 *Q_in 
);

void ivas_cmult_fix(
    Word32 in1_re_fx,
    Word16 exp_re1,