Commit dfd6da7a authored by vaclav's avatar vaclav
Browse files

move ISAR handles from ivas_stat_rend.h to isar_stat.h + fix compilation when...

move ISAR handles from ivas_stat_rend.h to isar_stat.h + fix compilation when SPLIT_REND_WITH_HEAD_ROT is deactivated
parent b3c0971b
Loading
Loading
Loading
Loading
+97 −0
Original line number Diff line number Diff line
@@ -58,6 +58,103 @@
 *  ISAR post rend structs
 *-------------------------------------------------------------------*/

/* binaural split rendering head rotation data structure */
typedef struct ivas_binaural_head_rot_split_rendering_md_struct
{
    float pred_mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float pred_mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float gd;
    float gd2;
    int16_t pred_mat_re_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    int16_t pred_mat_im_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    int16_t gd_idx;
    int16_t gd2_idx;

} BIN_HR_SPLIT_REND_MD, *BIN_HR_SPLIT_REND_MD_HANDLE;

typedef struct ivas_split_rend_huffman_cfg_t
{
    const int32_t *codebook;
    int16_t min_len;
    int16_t max_len;
    int16_t sym_len;

} ivas_split_rend_huffman_cfg_t;

typedef struct ivas_binaural_head_rot_split_rendering_huff_struct
{
    ivas_split_rend_huffman_cfg_t pred[2];
    int16_t pred_idx_trav[2][ISAR_SPLIT_REND_PRED_63QUANT_PNTS];
    int16_t pred_base2_code_len[2];
    ivas_split_rend_huffman_cfg_t pred_roll;
    int16_t pred_roll_idx_trav[ISAR_SPLIT_REND_ROLL_PRED_QUANT_PNTS];
    int16_t pred_roll_base2_code_len;
    ivas_split_rend_huffman_cfg_t gd;
    int16_t gd_base2_code_len;
    int16_t gd_idx_trav[ISAR_SPLIT_REND_D_QUANT_PNTS];
    ivas_split_rend_huffman_cfg_t p_gd;
    int16_t p_gd_base2_code_len;
    int16_t p_gd_idx_trav[ISAR_SPLIT_REND_D_QUANT_PNTS];
    ivas_split_rend_huffman_cfg_t p_gd_diff;
    int16_t p_gd_diff_base2_code_len;
    int16_t p_gd_diff_idx_trav[ISAR_SPLIT_REND_D_QUANT_PNTS];

} BIN_HR_SPLIT_REND_HUFF, *BIN_HR_SPLIT_REND_HUFF_HANDLE;

#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
typedef struct ivas_binaural_head_rot_split_post_rendering_struct
{
    BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES][MAX_SPLIT_MD_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS];
    IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES];
    int16_t low_Res;

    float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    ISAR_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1];
    BIN_HR_SPLIT_REND_HUFF huff_cfg;
    float mixer_mat_re[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float mixer_mat_im[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float gd_mem[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS];
    int16_t cf_flag;
    HANDLE_CLDFB_FILTER_BANK cldfbAna[BINAURAL_CHANNELS];
    HANDLE_CLDFB_FILTER_BANK cldfbSyn[BINAURAL_CHANNELS];
    HANDLE_CLDFB_FILTER_BANK cldfbSynReconsBinDec[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS];

} BIN_HR_SPLIT_POST_REND, *BIN_HR_SPLIT_POST_REND_HANDLE;
#endif

typedef struct ivas_binaural_head_rot_split_pre_rendering_struct
{
    BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_SPLIT_MD_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS];
    float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    ISAR_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1];
    BIN_HR_SPLIT_REND_HUFF huff_cfg;
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    HANDLE_CLDFB_FILTER_BANK cldfbSynRotBinDec[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS];
#endif

#ifdef SPLIT_POSE_CORRECTION_DEBUG
    BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend;
#endif

} BIN_HR_SPLIT_PRE_REND, *BIN_HR_SPLIT_PRE_REND_HANDLE;

typedef struct
{
    float Cldfb_Prev_BinReal[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX + CLDFB_PLC_XF][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_Prev_BinImag[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX + CLDFB_PLC_XF][CLDFB_NO_CHANNELS_MAX];
    float xf_bet[2][CLDFB_NO_CHANNELS_MAX][CLDFB_PLC_XF];

} CLDFB_PLC, *CLDFB_PLC_HANDLE;

typedef struct
{
    CLDFB_PLC CldfbPLC_state;
    int16_t prev_bfi;
    int16_t bf_count;
    int16_t iNumSubSets;

} SPLIT_REND_PLC_STRUCT, *SPLIT_REND_PLC_HANDLE;

typedef struct
{
    int8_t headRotEnabled;
+1 −2
Original line number Diff line number Diff line
@@ -1611,11 +1611,10 @@ void ivas_combined_orientation_update_index(
    if ( hCombinedOrientationData != NULL )
    {
#ifdef SPLIT_REND_WITH_HEAD_ROT
        if ( hCombinedOrientationData->num_subframes == 1 || hCombinedOrientationData->sr_low_res_flag
        if ( hCombinedOrientationData->num_subframes == 1 || hCombinedOrientationData->sr_low_res_flag )
#else
        if ( hCombinedOrientationData->num_subframes == 1 )
#endif
        )
        {
            /* only one orientation available anyway or split rendering with low resolution*/
            hCombinedOrientationData->subframe_idx = 0;
+0 −144
Original line number Diff line number Diff line
@@ -1325,150 +1325,6 @@ typedef struct ivas_hrtfs_statistics_struct
} HRTFS_STATISTICS, *HRTFS_STATISTICS_HANDLE;


#ifdef SPLIT_REND_WITH_HEAD_ROT
/*----------------------------------------------------------------------------------*
 * Binaural split rendering structures
 *----------------------------------------------------------------------------------*/

/* binaural split rendering head rotation data structure */
typedef struct ivas_binaural_head_rot_split_rendering_md_struct
{
    float pred_mat_re[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float pred_mat_im[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float gd;
    float gd2;
    int16_t pred_mat_re_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    int16_t pred_mat_im_idx[BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    int16_t gd_idx;
    int16_t gd2_idx;

} BIN_HR_SPLIT_REND_MD, *BIN_HR_SPLIT_REND_MD_HANDLE;

typedef struct ivas_split_rend_huffman_cfg_t
{
    const int32_t *codebook;
    int16_t min_len;
    int16_t max_len;
    int16_t sym_len;

} ivas_split_rend_huffman_cfg_t;

typedef struct ivas_binaural_head_rot_split_rendering_huff_struct
{
    ivas_split_rend_huffman_cfg_t pred[2];
    int16_t pred_idx_trav[2][ISAR_SPLIT_REND_PRED_63QUANT_PNTS];
    int16_t pred_base2_code_len[2];
    ivas_split_rend_huffman_cfg_t pred_roll;
    int16_t pred_roll_idx_trav[ISAR_SPLIT_REND_ROLL_PRED_QUANT_PNTS];
    int16_t pred_roll_base2_code_len;
    ivas_split_rend_huffman_cfg_t gd;
    int16_t gd_base2_code_len;
    int16_t gd_idx_trav[ISAR_SPLIT_REND_D_QUANT_PNTS];
    ivas_split_rend_huffman_cfg_t p_gd;
    int16_t p_gd_base2_code_len;
    int16_t p_gd_idx_trav[ISAR_SPLIT_REND_D_QUANT_PNTS];
    ivas_split_rend_huffman_cfg_t p_gd_diff;
    int16_t p_gd_diff_base2_code_len;
    int16_t p_gd_diff_idx_trav[ISAR_SPLIT_REND_D_QUANT_PNTS];

} BIN_HR_SPLIT_REND_HUFF, *BIN_HR_SPLIT_REND_HUFF_HANDLE;


typedef struct ivas_binaural_head_rot_split_post_rendering_struct
{
    BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES][MAX_SPLIT_MD_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS];
    IVAS_QUATERNION QuaternionsPre[MAX_PARAM_SPATIAL_SUBFRAMES];
    int16_t low_Res;

    float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    ISAR_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1];
    BIN_HR_SPLIT_REND_HUFF huff_cfg;
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    float mixer_mat_re[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float mixer_mat_im[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float gd_mem[MAX_HEAD_ROT_POSES][MAX_SPLIT_REND_MD_BANDS];
#else
    float mixer_mat_re[1][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float mixer_mat_im[1][MAX_SPLIT_REND_MD_BANDS][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    float gd_mem[1][MAX_SPLIT_REND_MD_BANDS];
#endif
    int16_t cf_flag;
    HANDLE_CLDFB_FILTER_BANK cldfbAna[BINAURAL_CHANNELS];
    HANDLE_CLDFB_FILTER_BANK cldfbSyn[BINAURAL_CHANNELS];
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    HANDLE_CLDFB_FILTER_BANK cldfbSynReconsBinDec[MAX_HEAD_ROT_POSES][BINAURAL_CHANNELS];
#endif

} BIN_HR_SPLIT_POST_REND, *BIN_HR_SPLIT_POST_REND_HANDLE;

typedef struct ivas_binaural_head_rot_split_pre_rendering_struct
{
    BIN_HR_SPLIT_REND_MD rot_md[MAX_HEAD_ROT_POSES - 1][MAX_SPLIT_MD_SUBFRAMES][MAX_SPLIT_REND_MD_BANDS];
    float fix_pos_rot_mat[MAX_HEAD_ROT_POSES - 1][BINAURAL_CHANNELS][BINAURAL_CHANNELS];
    ISAR_SPLIT_REND_POSE_TYPE pose_type[MAX_HEAD_ROT_POSES - 1];
    BIN_HR_SPLIT_REND_HUFF huff_cfg;
#ifdef SPLIT_REND_WITH_HEAD_ROT_DEBUG
    HANDLE_CLDFB_FILTER_BANK cldfbSynRotBinDec[MAX_HEAD_ROT_POSES + 1][BINAURAL_CHANNELS];
#endif

#ifdef SPLIT_POSE_CORRECTION_DEBUG
    BIN_HR_SPLIT_POST_REND_HANDLE hBinHrSplitPostRend;
#endif

} BIN_HR_SPLIT_PRE_REND, *BIN_HR_SPLIT_PRE_REND_HANDLE;

typedef struct ivas_binaural_head_rot_split_rendering_lcld_enc_struct
{
    void *pLcld_enc;
    int16_t iChannels;
    LCLDEncoder *psLCLDEncoder;
    float ***pppfLCLDReal;
    float ***pppfLCLDImag;
#ifdef CLDFB_DEBUG
    FILE *cldfbIn;
    int16_t numFrame;
#endif
    int16_t iNumIterations;
    int16_t iNumBlocks;

} BIN_HR_SPLIT_LCLD_ENC, *BIN_HR_SPLIT_LCLD_ENC_HANDLE;

typedef struct
{
    float Cldfb_Prev_BinReal[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX + CLDFB_PLC_XF][CLDFB_NO_CHANNELS_MAX];
    float Cldfb_Prev_BinImag[BINAURAL_CHANNELS][CLDFB_NO_COL_MAX + CLDFB_PLC_XF][CLDFB_NO_CHANNELS_MAX];
    float xf_bet[2][CLDFB_NO_CHANNELS_MAX][CLDFB_PLC_XF];

} CLDFB_PLC, *CLDFB_PLC_HANDLE;

typedef struct
{
    CLDFB_PLC CldfbPLC_state;
    int16_t prev_bfi;
    int16_t bf_count;
    int16_t iNumSubSets;

} SPLIT_REND_PLC_STRUCT, *SPLIT_REND_PLC_HANDLE;

typedef struct ivas_binaural_head_rot_split_rendering_lcld_dec_struct
{
    void *pLcld_dec;
    int32_t iChannels;
    LCLDDecoder *psLCLDDecoder;
    float ***pppfDecLCLDReal;
    float ***pppfDecLCLDImag;
#ifdef CLDFB_DEBUG
    FILE *cldfbOut;
    int16_t numFrame;
#endif
    SPLIT_REND_PLC_HANDLE hSplitRendPLC;
    int16_t iNumBlocks;
    int16_t iNumIterations;

} BIN_HR_SPLIT_LCLD_DEC, *BIN_HR_SPLIT_LCLD_DEC_HANDLE;
#endif


/*----------------------------------------------------------------------------------*
 * Limiter structure
 *----------------------------------------------------------------------------------*/
+5 −1
Original line number Diff line number Diff line
@@ -4458,7 +4458,11 @@ int16_t IVAS_REND_FeedRenderConfig(
                return error;
            }
        }
#ifdef SPLIT_REND_WITH_HEAD_ROT
        if ( pIsmInput->crendWrapper != NULL && pIsmInput->crendWrapper->hCrend[0] != NULL )
#else
        if ( pIsmInput->crendWrapper != NULL && pIsmInput->crendWrapper->hCrend != NULL )
#endif
        {
#ifdef SPLIT_REND_WITH_HEAD_ROT
            if ( ( error = ivas_reverb_open( &pIsmInput->crendWrapper->hCrend[0]->hReverb, hIvasRend->hHrtfs.hHrtfStatistics, hRenderConfig, *pIsmInput->base.ctx.pOutSampleRate ) ) != IVAS_ERR_OK )