Loading lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -211,7 +211,7 @@ #define FIX_485_STATIC_BUFFERS /* FhG: move static buffers in DirAC parameter estimator to the DirAC struct */ #define FIX_I503_ASAN_ERROR_IND_LIST /* VA: fix issue #503: address sanitizer error with IND_LIST_DYN */ #define FIX_473_JITTER_NONDIEGETIC_PANNING /* FhG,Orange: add missing non-diegetic panning to JITTER */ //#define FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING /* Ora : fix issue 504 click in non diegetic rendering */ #define FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING /* Ora : fix issue 504 click in non diegetic rendering */ #define SBA_MODE_CLEAN_UP /* Dlb: Cean up SBA mode references */ #define FIX_502_IND_LIST_SIZE /* Fix issue #502: insufficient index buffer sizes */ Loading lib_rend/ivas_objectRenderer.c +34 −39 Original line number Diff line number Diff line Loading @@ -388,7 +388,7 @@ ivas_error TDREND_GetMix( int16_t intp_count; float pan_left, pan_right; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float step, gain_tmp; float step_left, gain_tmp_left, step_right, gain_tmp_right; int16_t j; #endif Loading Loading @@ -443,6 +443,8 @@ ivas_error TDREND_GetMix( if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { Src_p->Gain = 0; Src_p->prevPanGain[0] = 0; Src_p->prevPanGain[1] = 0; } if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { Loading @@ -450,7 +452,7 @@ ivas_error TDREND_GetMix( } #endif error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length ); error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, &Src_p->InputFrame_p[subframe_idx * subframe_length], output_buf, subframe_length ); } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING Loading @@ -459,58 +461,51 @@ ivas_error TDREND_GetMix( if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #endif { pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { step = pan_left / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; pan_left = 0; pan_right = 0; } step = pan_right / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) else { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; } else if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) { step = -pan_left / ( subframe_length ); gain_tmp = pan_left; for ( j = 0; j < subframe_length; j++ ) mvr2r( &Src_p->InputFrame_p[( subframe_idx + 1 ) * subframe_length - ITD_MEM_LEN], Src_p->mem_itd, ITD_MEM_LEN ); /* update memory for next frame */ } if ( Src_p->prevPanGain[0] == pan_left ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); } step = -pan_right / ( subframe_length ); gain_tmp = pan_right; else { step_left = ( pan_left - Src_p->prevPanGain[0] ) / ( subframe_length ); gain_tmp_left = Src_p->prevPanGain[0]; step_right = ( pan_right - Src_p->prevPanGain[1] ) / ( subframe_length ); gain_tmp_right = Src_p->prevPanGain[1]; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; gain_tmp_left = gain_tmp_left + step_left; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp_left; gain_tmp_right = gain_tmp_right + step_right; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp_right; } } else { mvr2r( &Src_p->InputFrame_p[( subframe_idx + 1 ) * subframe_length - ITD_MEM_LEN], Src_p->mem_itd, ITD_MEM_LEN ); /* update memory for next frame */ v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); Src_p->prevPanGain[0] = pan_left; Src_p->prevPanGain[1] = pan_right; } #else pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); #endif } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { Loading lib_rend/ivas_objectRenderer_hrFilt.c +13 −5 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ ivas_error TDREND_REND_RenderSourceHRFilt( const float *hrf_left_delta, /* i : Left filter interpolation delta */ const float *hrf_right_delta, /* i : Right filter interpolation delta */ const int16_t intp_count, /* i : Interpolation count */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float *intput_buf, /* o : Input buffer */ #endif float output_buf[][L_SPATIAL_SUBFR_48k], /* o : Output buffer */ const int16_t subframe_length /* i : Subframe length in use */ ) Loading @@ -70,7 +73,11 @@ ivas_error TDREND_REND_RenderSourceHRFilt( float LeftOutputFrame[L_SPATIAL_SUBFR_48k]; float RightOutputFrame[L_SPATIAL_SUBFR_48k]; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING TDREND_Apply_ITD( intput_buf, LeftOutputFrame, RightOutputFrame, &Src_p->previtd, Src_p->itd, Src_p->mem_itd, subframe_length ); #else TDREND_Apply_ITD( Src_p->InputFrame_p, LeftOutputFrame, RightOutputFrame, &Src_p->previtd, Src_p->itd, Src_p->mem_itd, subframe_length ); #endif TDREND_firfilt( LeftOutputFrame, Src_p->hrf_left_prev, hrf_left_delta, intp_count, Src_p->mem_hrf_left, subframe_length, Src_p->filterlength, Src_p->Gain, Src_p->prevGain ); TDREND_firfilt( RightOutputFrame, Src_p->hrf_right_prev, hrf_right_delta, intp_count, Src_p->mem_hrf_right, subframe_length, Src_p->filterlength, Src_p->Gain, Src_p->prevGain ); Src_p->prevGain = Src_p->Gain; Loading @@ -79,8 +86,9 @@ ivas_error TDREND_REND_RenderSourceHRFilt( v_add( LeftOutputFrame, output_buf[0], output_buf[0], subframe_length ); v_add( RightOutputFrame, output_buf[1], output_buf[1], subframe_length ); #ifndef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING Src_p->InputFrame_p += subframe_length; /* Increment input pointer -- todo: should we remove this and input the current subframe instead? */ #endif return IVAS_ERR_OK; } Loading lib_rend/ivas_objectRenderer_sources.c +4 −0 Original line number Diff line number Diff line Loading @@ -724,6 +724,10 @@ void TDREND_SRC_Init( Src_p->azim_prev = 0.0f; Src_p->elev_prev = 0.0f; Src_p->prevGain = 1.0f; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING Src_p->prevPanGain[0] = 0.0f; Src_p->prevPanGain[1] = 0.0f; #endif return; } lib_rend/ivas_prot_rend.h +3 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,9 @@ ivas_error TDREND_REND_RenderSourceHRFilt( const float *hrf_left_delta, /* i: Left filter interpolation delta */ const float *hrf_right_delta, /* i: Right filter interpolation delta */ const int16_t intp_count, /* i: Interpolation count */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float *intput_buf, /* o : Input buffer */ #endif float output_buf[][L_SPATIAL_SUBFR_48k], /* o : Output buffer */ const int16_t subframe_length /* i : Subframe length in use */ ); Loading Loading
lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -211,7 +211,7 @@ #define FIX_485_STATIC_BUFFERS /* FhG: move static buffers in DirAC parameter estimator to the DirAC struct */ #define FIX_I503_ASAN_ERROR_IND_LIST /* VA: fix issue #503: address sanitizer error with IND_LIST_DYN */ #define FIX_473_JITTER_NONDIEGETIC_PANNING /* FhG,Orange: add missing non-diegetic panning to JITTER */ //#define FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING /* Ora : fix issue 504 click in non diegetic rendering */ #define FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING /* Ora : fix issue 504 click in non diegetic rendering */ #define SBA_MODE_CLEAN_UP /* Dlb: Cean up SBA mode references */ #define FIX_502_IND_LIST_SIZE /* Fix issue #502: insufficient index buffer sizes */ Loading
lib_rend/ivas_objectRenderer.c +34 −39 Original line number Diff line number Diff line Loading @@ -388,7 +388,7 @@ ivas_error TDREND_GetMix( int16_t intp_count; float pan_left, pan_right; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float step, gain_tmp; float step_left, gain_tmp_left, step_right, gain_tmp_right; int16_t j; #endif Loading Loading @@ -443,6 +443,8 @@ ivas_error TDREND_GetMix( if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { Src_p->Gain = 0; Src_p->prevPanGain[0] = 0; Src_p->prevPanGain[1] = 0; } if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { Loading @@ -450,7 +452,7 @@ ivas_error TDREND_GetMix( } #endif error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length ); error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, &Src_p->InputFrame_p[subframe_idx * subframe_length], output_buf, subframe_length ); } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING Loading @@ -459,58 +461,51 @@ ivas_error TDREND_GetMix( if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) ) #endif { pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { step = pan_left / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; pan_left = 0; pan_right = 0; } step = pan_right / ( subframe_length ); gain_tmp = 0; for ( j = 0; j < subframe_length; j++ ) else { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; } pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; } else if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) { step = -pan_left / ( subframe_length ); gain_tmp = pan_left; for ( j = 0; j < subframe_length; j++ ) mvr2r( &Src_p->InputFrame_p[( subframe_idx + 1 ) * subframe_length - ITD_MEM_LEN], Src_p->mem_itd, ITD_MEM_LEN ); /* update memory for next frame */ } if ( Src_p->prevPanGain[0] == pan_left ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); } step = -pan_right / ( subframe_length ); gain_tmp = pan_right; else { step_left = ( pan_left - Src_p->prevPanGain[0] ) / ( subframe_length ); gain_tmp_left = Src_p->prevPanGain[0]; step_right = ( pan_right - Src_p->prevPanGain[1] ) / ( subframe_length ); gain_tmp_right = Src_p->prevPanGain[1]; for ( j = 0; j < subframe_length; j++ ) { /* Apply linear gain interpolation in case of abrupt gain changes */ gain_tmp = gain_tmp + step; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp; gain_tmp_left = gain_tmp_left + step_left; output_buf[0][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp_left; gain_tmp_right = gain_tmp_right + step_right; output_buf[1][j] += Src_p->InputFrame_p[subframe_idx * subframe_length + j] * gain_tmp_right; } } else { mvr2r( &Src_p->InputFrame_p[( subframe_idx + 1 ) * subframe_length - ITD_MEM_LEN], Src_p->mem_itd, ITD_MEM_LEN ); /* update memory for next frame */ v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); Src_p->prevPanGain[0] = pan_left; Src_p->prevPanGain[1] = pan_right; } #else pan_left = ( SrcSpatial_p->Pos_p[1] + 1.f ) * 0.5f; pan_right = 1.f - pan_left; v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_left, output_buf[0], subframe_length ); v_multc_acc( &Src_p->InputFrame_p[subframe_idx * subframe_length], pan_right, output_buf[1], subframe_length ); #endif } #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC ) { Loading
lib_rend/ivas_objectRenderer_hrFilt.c +13 −5 Original line number Diff line number Diff line Loading @@ -63,6 +63,9 @@ ivas_error TDREND_REND_RenderSourceHRFilt( const float *hrf_left_delta, /* i : Left filter interpolation delta */ const float *hrf_right_delta, /* i : Right filter interpolation delta */ const int16_t intp_count, /* i : Interpolation count */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float *intput_buf, /* o : Input buffer */ #endif float output_buf[][L_SPATIAL_SUBFR_48k], /* o : Output buffer */ const int16_t subframe_length /* i : Subframe length in use */ ) Loading @@ -70,7 +73,11 @@ ivas_error TDREND_REND_RenderSourceHRFilt( float LeftOutputFrame[L_SPATIAL_SUBFR_48k]; float RightOutputFrame[L_SPATIAL_SUBFR_48k]; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING TDREND_Apply_ITD( intput_buf, LeftOutputFrame, RightOutputFrame, &Src_p->previtd, Src_p->itd, Src_p->mem_itd, subframe_length ); #else TDREND_Apply_ITD( Src_p->InputFrame_p, LeftOutputFrame, RightOutputFrame, &Src_p->previtd, Src_p->itd, Src_p->mem_itd, subframe_length ); #endif TDREND_firfilt( LeftOutputFrame, Src_p->hrf_left_prev, hrf_left_delta, intp_count, Src_p->mem_hrf_left, subframe_length, Src_p->filterlength, Src_p->Gain, Src_p->prevGain ); TDREND_firfilt( RightOutputFrame, Src_p->hrf_right_prev, hrf_right_delta, intp_count, Src_p->mem_hrf_right, subframe_length, Src_p->filterlength, Src_p->Gain, Src_p->prevGain ); Src_p->prevGain = Src_p->Gain; Loading @@ -79,8 +86,9 @@ ivas_error TDREND_REND_RenderSourceHRFilt( v_add( LeftOutputFrame, output_buf[0], output_buf[0], subframe_length ); v_add( RightOutputFrame, output_buf[1], output_buf[1], subframe_length ); #ifndef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING Src_p->InputFrame_p += subframe_length; /* Increment input pointer -- todo: should we remove this and input the current subframe instead? */ #endif return IVAS_ERR_OK; } Loading
lib_rend/ivas_objectRenderer_sources.c +4 −0 Original line number Diff line number Diff line Loading @@ -724,6 +724,10 @@ void TDREND_SRC_Init( Src_p->azim_prev = 0.0f; Src_p->elev_prev = 0.0f; Src_p->prevGain = 1.0f; #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING Src_p->prevPanGain[0] = 0.0f; Src_p->prevPanGain[1] = 0.0f; #endif return; }
lib_rend/ivas_prot_rend.h +3 −0 Original line number Diff line number Diff line Loading @@ -349,6 +349,9 @@ ivas_error TDREND_REND_RenderSourceHRFilt( const float *hrf_left_delta, /* i: Left filter interpolation delta */ const float *hrf_right_delta, /* i: Right filter interpolation delta */ const int16_t intp_count, /* i: Interpolation count */ #ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING float *intput_buf, /* o : Input buffer */ #endif float output_buf[][L_SPATIAL_SUBFR_48k], /* o : Output buffer */ const int16_t subframe_length /* i : Subframe length in use */ ); Loading