Commit 80dcf2d9 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

harmonize rounding of ISM position metadata and crossfading between renderer and decoder

parent c0727907
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -179,6 +179,9 @@

#define FIX_ITD_CNG                                     /* Eri: Fix for CNG ITD */

#define FIX_REND_ISM_XFADE                              /* Issue 193: Crossfade inconsistencies in ISM between decoder and external renderer */
#define FIX_REND_ISM_POS_ROUNDING                       /* Issue 193: (TEMPORARY! Pending fix for #215) Align rounding of ISM position data in external renderer */

/* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */
#endif
+10 −0
Original line number Diff line number Diff line
@@ -82,7 +82,11 @@ ivas_error ivas_ism_renderer_open(
    interpolator_length = (uint16_t) ( st_ivas->hDecoderConfig->output_Fs / FRAMES_PER_SEC );
    for ( i = 0; i < interpolator_length; i++ )
    {
#ifdef FIX_REND_ISM_XFADE
        st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length - 1 );
#else
        st_ivas->hIsmRendererData->interpolator[i] = (float) i / ( (float) interpolator_length );
#endif
    }

    return error;
@@ -180,8 +184,14 @@ void ivas_ism_render(
            }
            else
            {
#ifdef FIX_REND_ISM_POS_ROUNDING
                // TODO tmu review when #215 is resolved
                azimuth = (int16_t) floorf( st_ivas->hIsmMetaData[i]->azimuth + 0.5f );
                elevation = (int16_t) floorf( st_ivas->hIsmMetaData[i]->elevation + 0.5f );
#else
                azimuth = (int16_t) ( st_ivas->hIsmMetaData[i]->azimuth + 0.5f );
                elevation = (int16_t) ( st_ivas->hIsmMetaData[i]->elevation + 0.5f );
#endif

                if ( st_ivas->hIntSetup.is_planar_setup )
                {
+15 −0
Original line number Diff line number Diff line
@@ -308,20 +308,35 @@ void ivas_ism2sba(

    for ( i = 0; i < num_objects; i++ )
    {
#ifdef FIX_REND_ISM_POS_ROUNDING
        // TODO tmu review when #215 is resolved
        azimuth = (int16_t) floorf( hIsmMetaData[i]->azimuth + 0.5f );
        elevation = (int16_t) floorf( hIsmMetaData[i]->elevation + 0.5f );
#else
        azimuth = (int16_t) ( hIsmMetaData[i]->azimuth + 0.5f );
        elevation = (int16_t) ( hIsmMetaData[i]->elevation + 0.5f );
#endif

        /*get HOA gets for direction (ACN/SN3D)*/
        ivas_dirac_dec_get_response( azimuth, elevation, gains, sba_order );

        for ( j = 0; j < sba_num_chans; j++ )
        {
#ifdef FIX_REND_ISM_XFADE
            g1 = 1.f;
#endif
            g2 = 0.f;
            for ( k = 0; k < output_frame; k++ )
            {
#ifdef FIX_REND_ISM_XFADE
                buffer_tmp[j][k] += ( g2 * gains[j] + g1 * hIsmRendererData->prev_gains[i][j] ) * buffer_td[i][k];
                g2 += 1.f / ( output_frame - 1 );
                g1 = 1.0f - g2;
#else
                g2 += 1.f / output_frame;
                g1 = 1.0f - g2;
                buffer_tmp[j][k] += ( g2 * gains[j] + g1 * hIsmRendererData->prev_gains[i][j] ) * buffer_td[i][k];
#endif
            }
            hIsmRendererData->prev_gains[i][j] = gains[j];
        }
+33 −1
Original line number Diff line number Diff line
@@ -3791,11 +3791,27 @@ static ivas_error renderIsmToMc(
    wmops_sub_start( "renderIsmToMc" );

/* TODO(sgi): Possible optimization: less processing needed if position didn't change */
#ifdef FIX_REND_ISM_POS_ROUNDING
        // TODO tmu review when #215 is resolved
    if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper,
                                 (int16_t) floorf( ismInput->currentPos.azimuth + 0.5f ),
                                 (int16_t) floorf( ismInput->currentPos.elevation + 0.5f ),
                                 currentPanGains ) ) != IVAS_ERR_OK )
#else
    if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper, ismInput->currentPos.azimuth, ismInput->currentPos.elevation, currentPanGains ) ) != IVAS_ERR_OK )
#endif
    {
        return error;
    }
#ifdef FIX_REND_ISM_POS_ROUNDING
        // TODO tmu review when #215 is resolved
    if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper,
                                 (int16_t) floorf( ismInput->previousPos.azimuth + 0.5f ),
                                 (int16_t) floorf( ismInput->previousPos.elevation + 0.5f ),
                                 previousPanGains ) ) != IVAS_ERR_OK )
#else
    if ( ( error = getEfapGains( *ismInput->base.ctx.pEfapOutWrapper, ismInput->previousPos.azimuth, ismInput->previousPos.elevation, previousPanGains ) ) != IVAS_ERR_OK )
#endif
    {
        return error;
    }
@@ -3832,7 +3848,15 @@ static ivas_error renderIsmToSba(
        return error;
    }

#ifdef FIX_REND_ISM_POS_ROUNDING
        // TODO tmu review when #215 is resolved
    ivas_dirac_dec_get_response( (int16_t) floorf( ismInput->previousPos.azimuth + 0.5f ),
                                 (int16_t) floorf( ismInput->previousPos.elevation + 0.5f ),
                                 previousPanGains,
                                 ambiOrderOut );
#else
    ivas_dirac_dec_get_response( (int16_t) ismInput->previousPos.azimuth, (int16_t) ismInput->previousPos.elevation, previousPanGains, ambiOrderOut );
#endif

    if ( ( ismInput->currentPos.azimuth == ismInput->previousPos.azimuth ) &&
         ( ismInput->currentPos.elevation == ismInput->previousPos.elevation ) )
@@ -3841,7 +3865,15 @@ static ivas_error renderIsmToSba(
    }
    else
    {
#ifdef FIX_REND_ISM_POS_ROUNDING
        // TODO tmu review when #215 is resolved
        ivas_dirac_dec_get_response( (int16_t) floorf( ismInput->currentPos.azimuth + 0.5f ),
                                     (int16_t) floorf( ismInput->currentPos.elevation + 0.5f ),
                                     currentPanGains,
                                     ambiOrderOut );
#else
        ivas_dirac_dec_get_response( (int16_t) ismInput->currentPos.azimuth, (int16_t) ismInput->currentPos.elevation, currentPanGains, ambiOrderOut );
#endif
    }

    /* Assume num channels in audio buffer to be 1.