Loading lib_isar/isar_splitRendererPre.c +5 −7 Original line number Diff line number Diff line Loading @@ -3129,8 +3129,6 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( Word16 Q_in = Q_sig, q_final = 0; move16(); move16(); // float Cldfb_In_BinReal[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; // float Cldfb_In_BinImag[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; UWord8 useLc3plus; Word32 *in_delayed_fx[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS]; Word16 i; Loading @@ -3154,12 +3152,11 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( { /* Artificially delay input to head pose correction analysis by LC3plus coding delay, so that audio and metadata are in sync after decoding */ mvl2l( hSplitBin->lc3plusDelayBuffers_fx[i] + frame_size, hSplitBin->lc3plusDelayBuffers_fx[i], (Word16) hSplitBin->lc3plusDelaySamples ); // mvr2r( hSplitBin->lc3plusDelayBuffers[i] + frame_size, hSplitBin->lc3plusDelayBuffers[i], (int16_t) hSplitBin->lc3plusDelaySamples ); in_delayed_fx[i] = hSplitBin->lc3plusDelayBuffers_fx[i]; // in_delayed[i] = hSplitBin->lc3plusDelayBuffers[i]; Scale_sig32( hSplitBin->lc3plusDelayBuffers_fx[i], (Word16) hSplitBin->lc3plusDelaySamples, sub( Q_in, hSplitBin->lc3plusDelayBuffers_q ) ); mvl2l( in_fx[i], hSplitBin->lc3plusDelayBuffers_fx[i] + hSplitBin->lc3plusDelaySamples, frame_size ); // mvr2r(in[i], hSplitBin->lc3plusDelayBuffers[i] + hSplitBin->lc3plusDelaySamples, frame_size); } hSplitBin->lc3plusDelayBuffers_q = Q_in; } ELSE { Loading @@ -3180,12 +3177,13 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( IF( ( hSplitBin->multiBinPoseData.poseCorrectionMode == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_CLDFB ) || ( !useLc3plus && !pcm_out_flag ) ) { Word32 in_delayed_cldfb[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][L_FRAME48k] = { 0 }; Word16 gd_bits = sub( Q_sig, Q11 ); FOR( i = 0; i < num_poses * BINAURAL_CHANNELS; i++ ) { Copy32( in_delayed_fx[i], in_delayed_cldfb[i], L_FRAME48k ); Scale_sig32( in_delayed_cldfb[i], L_FRAME48k, -4 ); Scale_sig32( in_delayed_cldfb[i], L_FRAME48k, -gd_bits ); } Q_sig = sub( Q_sig, 4 ); Q_sig = sub( Q_sig, gd_bits ); num_slots = ( hSplitBin->multiBinPoseData.poseCorrectionMode == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_CLDFB ) ? CLDFB_NO_COL_MAX : ( hSplitBin->hSplitBinLCLDEnc->iNumBlocks * hSplitBin->hSplitBinLCLDEnc->iNumIterations ); move32(); num_cldfb_bands = hSplitBin->hCldfbHandles->cldfbAna[0]->no_channels; Loading lib_rend/lib_rend.c +8 −5 Original line number Diff line number Diff line Loading @@ -7167,6 +7167,8 @@ static ivas_error renderMcToSplitBinaural( Word16 exp = *outAudio.pq_fact; move16(); CREND_HANDLE hCrend; IVAS_QUATERNION Quaternions_orig[MAX_PARAM_SPATIAL_SUBFRAMES], Quaternions_abs; Word16 q_fact_orig; #ifdef SPLIT_REND_WITH_HEAD_ROT hCrend = mcInput->crendWrapper->hCrend[0]; #else Loading Loading @@ -7219,17 +7221,18 @@ static ivas_error renderMcToSplitBinaural( tmpRotBuffer.data_fx = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( Word32 ) ); } FOR( i = 0; i < combinedOrientationDataLocal.num_subframes; i++ ) { Copy_Quat_fx( &combinedOrientationDataLocal.Quaternions[i], &Quaternions_orig[i] ); } FOR( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses; pos_idx++ ) { /* Update head positions */ IVAS_QUATERNION Quaternions_orig[MAX_PARAM_SPATIAL_SUBFRAMES], Quaternions_abs; Word16 q_fact_orig; FOR( i = 0; i < combinedOrientationDataLocal.num_subframes; i++ ) { Copy_Quat_fx( &combinedOrientationDataLocal.Quaternions[i], &Quaternions_orig[i] ); Quaternions_abs.w_fx = L_negate( 12582912 ); // Q22 q_fact_orig = combinedOrientationDataLocal.Quaternions[i].q_fact; q_fact_orig = Quaternions_orig[i].q_fact; modify_Quat_q_fx( &combinedOrientationDataLocal.Quaternions[i], &combinedOrientationDataLocal.Quaternions[i], Q22 ); /*euler*/ Quat2EulerDegree_fx( combinedOrientationDataLocal.Quaternions[i], Loading Loading
lib_isar/isar_splitRendererPre.c +5 −7 Original line number Diff line number Diff line Loading @@ -3129,8 +3129,6 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( Word16 Q_in = Q_sig, q_final = 0; move16(); move16(); // float Cldfb_In_BinReal[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; // float Cldfb_In_BinImag[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][CLDFB_NO_COL_MAX][CLDFB_NO_CHANNELS_MAX]; UWord8 useLc3plus; Word32 *in_delayed_fx[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS]; Word16 i; Loading @@ -3154,12 +3152,11 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( { /* Artificially delay input to head pose correction analysis by LC3plus coding delay, so that audio and metadata are in sync after decoding */ mvl2l( hSplitBin->lc3plusDelayBuffers_fx[i] + frame_size, hSplitBin->lc3plusDelayBuffers_fx[i], (Word16) hSplitBin->lc3plusDelaySamples ); // mvr2r( hSplitBin->lc3plusDelayBuffers[i] + frame_size, hSplitBin->lc3plusDelayBuffers[i], (int16_t) hSplitBin->lc3plusDelaySamples ); in_delayed_fx[i] = hSplitBin->lc3plusDelayBuffers_fx[i]; // in_delayed[i] = hSplitBin->lc3plusDelayBuffers[i]; Scale_sig32( hSplitBin->lc3plusDelayBuffers_fx[i], (Word16) hSplitBin->lc3plusDelaySamples, sub( Q_in, hSplitBin->lc3plusDelayBuffers_q ) ); mvl2l( in_fx[i], hSplitBin->lc3plusDelayBuffers_fx[i] + hSplitBin->lc3plusDelaySamples, frame_size ); // mvr2r(in[i], hSplitBin->lc3plusDelayBuffers[i] + hSplitBin->lc3plusDelaySamples, frame_size); } hSplitBin->lc3plusDelayBuffers_q = Q_in; } ELSE { Loading @@ -3180,12 +3177,13 @@ ivas_error isar_renderMultiTDBinToSplitBinaural( IF( ( hSplitBin->multiBinPoseData.poseCorrectionMode == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_CLDFB ) || ( !useLc3plus && !pcm_out_flag ) ) { Word32 in_delayed_cldfb[MAX_HEAD_ROT_POSES * BINAURAL_CHANNELS][L_FRAME48k] = { 0 }; Word16 gd_bits = sub( Q_sig, Q11 ); FOR( i = 0; i < num_poses * BINAURAL_CHANNELS; i++ ) { Copy32( in_delayed_fx[i], in_delayed_cldfb[i], L_FRAME48k ); Scale_sig32( in_delayed_cldfb[i], L_FRAME48k, -4 ); Scale_sig32( in_delayed_cldfb[i], L_FRAME48k, -gd_bits ); } Q_sig = sub( Q_sig, 4 ); Q_sig = sub( Q_sig, gd_bits ); num_slots = ( hSplitBin->multiBinPoseData.poseCorrectionMode == ISAR_SPLIT_REND_POSE_CORRECTION_MODE_CLDFB ) ? CLDFB_NO_COL_MAX : ( hSplitBin->hSplitBinLCLDEnc->iNumBlocks * hSplitBin->hSplitBinLCLDEnc->iNumIterations ); move32(); num_cldfb_bands = hSplitBin->hCldfbHandles->cldfbAna[0]->no_channels; Loading
lib_rend/lib_rend.c +8 −5 Original line number Diff line number Diff line Loading @@ -7167,6 +7167,8 @@ static ivas_error renderMcToSplitBinaural( Word16 exp = *outAudio.pq_fact; move16(); CREND_HANDLE hCrend; IVAS_QUATERNION Quaternions_orig[MAX_PARAM_SPATIAL_SUBFRAMES], Quaternions_abs; Word16 q_fact_orig; #ifdef SPLIT_REND_WITH_HEAD_ROT hCrend = mcInput->crendWrapper->hCrend[0]; #else Loading Loading @@ -7219,17 +7221,18 @@ static ivas_error renderMcToSplitBinaural( tmpRotBuffer.data_fx = malloc( tmpRotBuffer.config.numSamplesPerChannel * tmpRotBuffer.config.numChannels * sizeof( Word32 ) ); } FOR( i = 0; i < combinedOrientationDataLocal.num_subframes; i++ ) { Copy_Quat_fx( &combinedOrientationDataLocal.Quaternions[i], &Quaternions_orig[i] ); } FOR( pos_idx = 0; pos_idx < pMultiBinPoseData->num_poses; pos_idx++ ) { /* Update head positions */ IVAS_QUATERNION Quaternions_orig[MAX_PARAM_SPATIAL_SUBFRAMES], Quaternions_abs; Word16 q_fact_orig; FOR( i = 0; i < combinedOrientationDataLocal.num_subframes; i++ ) { Copy_Quat_fx( &combinedOrientationDataLocal.Quaternions[i], &Quaternions_orig[i] ); Quaternions_abs.w_fx = L_negate( 12582912 ); // Q22 q_fact_orig = combinedOrientationDataLocal.Quaternions[i].q_fact; q_fact_orig = Quaternions_orig[i].q_fact; modify_Quat_q_fx( &combinedOrientationDataLocal.Quaternions[i], &combinedOrientationDataLocal.Quaternions[i], Q22 ); /*euler*/ Quat2EulerDegree_fx( combinedOrientationDataLocal.Quaternions[i], Loading