Commit 463f0114 authored by emerit's avatar emerit
Browse files

FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING

parent 639d93d1
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1590,6 +1590,11 @@ typedef enum
    TDREND_PLAYSTATUS_INITIAL,
    TDREND_PLAYSTATUS_PLAYING,
    TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
,
TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC,
TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC,
#endif    
} TDREND_PlayStatus_t;

typedef enum
+1 −1
Original line number Diff line number Diff line
@@ -209,7 +209,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 */
                                                        /* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */

+92 −0
Original line number Diff line number Diff line
@@ -386,6 +386,10 @@ ivas_error TDREND_GetMix(
    float hrf_right_delta[SFX_SPAT_BIN_MAX_FILTER_LENGTH];
    int16_t intp_count;
    float pan_left, pan_right;
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
    float step, gain_tmp;
    int16_t j;
#endif

#ifdef FIX_356_ISM_METADATA_SYNC
    int16_t subframe_update_flag;
@@ -412,7 +416,11 @@ ivas_error TDREND_GetMix(
        SrcRend_p = Src_p->SrcRend_p;

        /* Update rendering params if needed */
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
        if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING || SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) )
#else
        if ( ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) && ( hBinRendererTd->Listener_p->PoseUpdated || SrcSpatial_p->Updated ) )
#endif
        {
            TDREND_SRC_REND_UpdateFiltersFromSpatialParams( hBinRendererTd, SrcRend_p, SrcSpatial_p, Src_p->hrf_left_prev,
                                                            Src_p->hrf_right_prev, hrf_left_delta, hrf_right_delta, &intp_count, &Src_p->filterlength, &Src_p->itd, &Src_p->Gain, Src_p,
@@ -425,18 +433,94 @@ ivas_error TDREND_GetMix(
        }

        /* Render source if needed */
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
        if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING || SrcRend_p->PlayStatus > TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) )
#else
        if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING ) )
#endif
        {
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
            if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC )
            {
                Src_p->Gain = 0;
            }
            if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC )
            {
                Src_p->prevGain = 0;
            }

#endif
            error = TDREND_REND_RenderSourceHRFilt( Src_p, hrf_left_delta, hrf_right_delta, intp_count, output_buf, subframe_length );
        }

#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
        if ( ( SrcRend_p->InputAvailable == TRUE ) && ( SrcRend_p->PlayStatus >= TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC ) )
#else
        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++ )
                {
                    /* 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;
                }
                step = pan_right / ( subframe_length );
                gain_tmp = 0;
                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;
                }
            }
            else if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC )
            {
                step = -pan_left / ( subframe_length );
                gain_tmp = pan_left;
                for ( j = 0; j < subframe_length; j++ )
                {
                    /* 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;
                }
                step = -pan_right / ( subframe_length );
                gain_tmp = pan_right;
                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;
                }
            }
            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 );
            }
#else
            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 )
        {
            SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC;
        }
        if ( SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC )
        {
            SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING;
        }
#endif
    }

    /* Populate output variable */
@@ -545,11 +629,19 @@ void TDREND_Update_object_positions(
                Pos[1] = hIsmMetaData[nS]->azimuth / 90.f;
                Pos[2] = 0;
                TDREND_MIX_SRC_SetPos( hBinRendererTd, nS, Pos );
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
                TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC );
#else
                TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC );
#endif
            }
            else
            {
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
                TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC );
#else
                TDREND_MIX_SRC_SetPlayState( hBinRendererTd, nS, TDREND_PLAYSTATUS_PLAYING );
#endif
            }
            TDREND_MIX_SRC_SetDir( hBinRendererTd, nS, Dir );
        }
+29 −0
Original line number Diff line number Diff line
@@ -171,9 +171,38 @@ ivas_error TDREND_MIX_SRC_SetPlayState(
        return ( IVAS_ERROR( IVAS_ERR_INVALID_INDEX, "Index exceeds max index\n" ) );
    }
    else
    {
#ifdef FIX_504_CLICK_NON_DIEGETIC_STATUS_SWITCHING
        if ( hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_INITIAL )
        {
            if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC )
            {
                hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC;
            }
            if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC )
            {
                hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING;
            }
        }
        else
        {
            if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_NON_DIEGETIC && hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC )
            {
                hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING_NON_DIEGETIC;
            }
            else if ( PlayStatus == TDREND_PLAYSTATUS_SWITCHING_TO_DIEGETIC && hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus == TDREND_PLAYSTATUS_PLAYING )
            {
                hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = TDREND_PLAYSTATUS_PLAYING;
            }
            else
            {
                hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus;
            }
        }
#else
        hBinRendererTd->Sources[SrcInd]->SrcRend_p->PlayStatus = PlayStatus;
#endif
    }
    return IVAS_ERR_OK;
}

+2 −2
Original line number Diff line number Diff line
@@ -1029,9 +1029,9 @@ networkSimulator_g192 ../scripts/dly_error_profiles/dly_error_profile_5.dat bit

// NON DIEGETiC PAN at 60 kbps, 48kHz in, 48kHz out, STEREO out
../IVAS_cod 64000 48 testv/stv48c.wav bit
../IVAS_dec -non_diegetic_pan -0.5 48 bit testv/stv48c.pcm_MONO_64000_48-48_STEREO_NON-DIEGETIC-PAN_-0.5.tst
../IVAS_dec -non_diegetic_pan -45 48 bit testv/stv48c.pcm_MONO_64000_48-48_STEREO_NON-DIEGETIC-PAN_-45.tst

// 4 ISM with extended metadata and non diegetic pan object switching bitrate 256 kbps, 48 kHz in, 48 kHz out, DTX on, BINAURAL out
// 4 ISM with extended metadata and non diegetic pan object bitrate 256 kbps, 48 kHz in, 48 kHz out, DTX on, BINAURAL out
../IVAS_cod -dtx -ism +4 testv/stvISM1.csv NULL testv/stvISM_with_no_diegetic_switch.csv testv/stvISM4.csv 256000 48 testv/stv4ISM48s.wav bit
../IVAS_dec BINAURAL 48 bit testv/stv+4ISM48s+non_diegetic_pan.wav_brate_256000-48_DTX_binaural.tst
Loading