Commit 3cce8239 authored by Archit Tamarapu's avatar Archit Tamarapu
Browse files

fix asan error and refactor function calls into update McPanGains...

parent 384239a4
Loading
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1393,6 +1393,12 @@ static bool parseLfeConfig(
        }
        values[nvalues] = (float) atof( tok );
        nvalues++;

        /* ignore any additionally specified values */
        if ( nvalues == 3 )
        {
            break;
        }
    }

    if ( nvalues != 3 )
+106 −96
Original line number Diff line number Diff line
@@ -1363,6 +1363,97 @@ static bool configsAreEqual(
    return configA == configB;
}

#ifdef REND_CFG_LFE
static ivas_error updateLfePanGainsForMcOut(
    input_mc *inputMc,
    const IVAS_REND_AudioConfig outConfig )
{
    int16_t i, numLfeIn, numOutChannels;
    ivas_error error;
    error = IVAS_ERR_OK;

    /* If panning is not required, simply return */
    if ( !inputMc->lfeRouting.pan_lfe )
    {
        return error;
    }

    numLfeIn = getNumLfeChannels( inputMc );

    if ( outConfig == IVAS_REND_AUDIO_CONFIG_LS_CUSTOM )
    {
        numOutChannels = inputMc->base.ctx.pCustomLsOut->num_spk + inputMc->base.ctx.pCustomLsOut->num_lfe;
    }
    else
    {
        if ( ( error = getAudioConfigNumChannels( outConfig, &numOutChannels ) ) != IVAS_ERR_OK )
        {
            return error;
        }
    }

    for ( i = 0; i < numLfeIn; i++ )
    {
        /* panning gains */
        if ( ( error = getEfapGains( *inputMc->base.ctx.pEfapOutWrapper,
                                     inputMc->lfeRouting.lfeOutputAzimuth,
                                     inputMc->lfeRouting.lfeOutputElevation,
                                     inputMc->lfeRouting.lfeOutputGains[i] ) ) != IVAS_ERR_OK )
        {
            return error;
        }

        /* linear input gain */
        v_multc( inputMc->lfeRouting.lfeOutputGains[i],
                 inputMc->lfeRouting.lfeInputGain,
                 inputMc->lfeRouting.lfeOutputGains[i],
                 numOutChannels );
    }

    return error;
}

static ivas_error updateLfePanGainsForAmbiOut(
    input_mc *inputMc,
    const IVAS_REND_AudioConfig outConfig )
{
    int16_t i;
    int16_t numLfeIn, outAmbiOrder;
    ivas_error error;
    error = IVAS_ERR_OK;

    /* If panning is not required, simply return */
    if ( !inputMc->lfeRouting.pan_lfe )
    {
        return error;
    }

    if ( ( error = getAmbisonicsOrder( outConfig, &outAmbiOrder ) ) != IVAS_ERR_OK )
    {
        return error;
    }

    numLfeIn = getNumLfeChannels( inputMc );

    for ( i = 0; i < numLfeIn; i++ )
    {
        /* panning gains */
        ivas_dirac_dec_get_response( inputMc->lfeRouting.lfeOutputAzimuth,
                                     inputMc->lfeRouting.lfeOutputElevation,
                                     inputMc->lfeRouting.lfeOutputGains[i],
                                     outAmbiOrder );

        /* linear input gain */
        v_multc( inputMc->lfeRouting.lfeOutputGains[i],
                 inputMc->lfeRouting.lfeInputGain,
                 inputMc->lfeRouting.lfeOutputGains[i],
                 IVAS_MAX_OUTPUT_CHANNELS );
    }

    return error;
}
#endif

static ivas_error updateMcPanGainsForMcOut(
    input_mc *inputMc,
    const IVAS_REND_AudioConfig outConfig )
@@ -1404,6 +1495,17 @@ static ivas_error updateMcPanGainsForMcOut(
        error = initMcPanGainsWithConversionMapping( inputMc, outConfig );
    }

#ifdef REND_CFG_LFE
    /* check for errors from above block */
    if ( error != IVAS_ERR_OK )
    {
        return error;
    }

    /* update LFE panning */
    error = updateLfePanGainsForMcOut( inputMc, outConfig );
#endif

    return error;
}

@@ -1466,99 +1568,16 @@ static ivas_error updateMcPanGainsForAmbiOut(
        }
    }

    return IVAS_ERR_OK;
}

#ifdef REND_CFG_LFE
static ivas_error updateLfePanGainsForMcOut(
    input_mc *inputMc,
    const IVAS_REND_AudioConfig outConfig )
{
    int16_t i, numLfeIn, numOutChannels;
    ivas_error error;
    error = IVAS_ERR_OK;

    /* If panning is not required, simply return */
    if ( !inputMc->lfeRouting.pan_lfe )
    {
        return error;
    }

    numLfeIn = getNumLfeChannels( inputMc );

    if ( outConfig == IVAS_REND_AUDIO_CONFIG_LS_CUSTOM )
    {
        numOutChannels = inputMc->base.ctx.pCustomLsOut->num_spk + inputMc->base.ctx.pCustomLsOut->num_lfe;
    }
    else
    {
        if ( ( error = getAudioConfigNumChannels( outConfig, &numOutChannels ) ) != IVAS_ERR_OK )
        {
            return error;
        }
    }

    for ( i = 0; i < numLfeIn; i++ )
    {
        /* panning gains */
        if ( ( error = getEfapGains( *inputMc->base.ctx.pEfapOutWrapper,
                                     inputMc->lfeRouting.lfeOutputAzimuth,
                                     inputMc->lfeRouting.lfeOutputElevation,
                                     inputMc->lfeRouting.lfeOutputGains[i] ) ) != IVAS_ERR_OK )
        {
            return error;
        }

        /* linear input gain */
        v_multc( inputMc->lfeRouting.lfeOutputGains[i],
                 inputMc->lfeRouting.lfeInputGain,
                 inputMc->lfeRouting.lfeOutputGains[i],
                 numOutChannels );
    }

    return error;
}

static ivas_error updateLfePanGainsForAmbiOut(
    input_mc *inputMc,
    const IVAS_REND_AudioConfig outConfig )
{
    int16_t i;
    int16_t numLfeIn, outAmbiOrder;
    ivas_error error;
    error = IVAS_ERR_OK;

    /* If panning is not required, simply return */
    if ( !inputMc->lfeRouting.pan_lfe )
    {
        return error;
    }

    if ( ( error = getAmbisonicsOrder( outConfig, &outAmbiOrder ) ) != IVAS_ERR_OK )
    /* update LFE panning */
    if ( ( error = updateLfePanGainsForAmbiOut( inputMc, outConfig ) ) != IVAS_ERR_OK )
    {
        return error;
    }
#endif

    numLfeIn = getNumLfeChannels( inputMc );

    for ( i = 0; i < numLfeIn; i++ )
    {
        /* panning gains */
        ivas_dirac_dec_get_response( inputMc->lfeRouting.lfeOutputAzimuth,
                                     inputMc->lfeRouting.lfeOutputElevation,
                                     inputMc->lfeRouting.lfeOutputGains[i],
                                     outAmbiOrder );

        /* linear input gain */
        v_multc( inputMc->lfeRouting.lfeOutputGains[i],
                 inputMc->lfeRouting.lfeInputGain,
                 inputMc->lfeRouting.lfeOutputGains[i],
                 IVAS_MAX_OUTPUT_CHANNELS );
    }

    return error;
    return IVAS_ERR_OK;
}
#endif

static ivas_error updateMcPanGains(
    input_mc *inputMc,
@@ -1575,15 +1594,9 @@ static ivas_error updateMcPanGains(
    {
        case IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED:
            error = updateMcPanGainsForMcOut( inputMc, outConfig );
#ifdef REND_CFG_LFE
            error = updateLfePanGainsForMcOut( inputMc, outConfig );
#endif
            break;
        case IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS:
            error = updateMcPanGainsForAmbiOut( inputMc, outConfig );
#ifdef REND_CFG_LFE
            error = updateLfePanGainsForAmbiOut( inputMc, outConfig );
#endif
            break;
        case IVAS_REND_AUDIO_CONFIG_TYPE_BINAURAL:
            switch ( outConfig )
@@ -1593,9 +1606,6 @@ static ivas_error updateMcPanGains(
                case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM:
                    /* Prepare rendering to intermediate format */
                    error = updateMcPanGainsForMcOut( inputMc, IVAS_REND_AUDIO_CONFIG_7_1_4 );
#ifdef REND_CFG_LFE
                    error = updateLfePanGainsForMcOut( inputMc, outConfig );
#endif
                    break;
                default:
                    return IVAS_ERR_INVALID_OUTPUT_FORMAT;