Commit 0ba521f0 authored by emerit's avatar emerit
Browse files

version ok, add tests for renderer

parent 912586ae
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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 */
+34 −39
Original line number Diff line number Diff line
@@ -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

@@ -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 )
            {
@@ -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
@@ -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 )
        {
+13 −5
Original line number Diff line number Diff line
@@ -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             */
)
@@ -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;
@@ -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;
}
+4 −0
Original line number Diff line number Diff line
@@ -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;
}
+3 −0
Original line number Diff line number Diff line
@@ -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