Commit 85b78c9b authored by Tapani Pihlajakuja's avatar Tapani Pihlajakuja
Browse files

Fixes releases of MASA renderer memories and correct binaural renderer function for MASA.

parent 1385334b
Loading
Loading
Loading
Loading
Loading
+57 −3
Original line number Diff line number Diff line
@@ -2145,6 +2145,7 @@ static ivas_error setRendInputActiveMasa(

static void freeDecoderDummy( DecoderDummy **ppDecDummy )
{
    int16_t i;
    DecoderDummy *pDecDummy;

    if ( ppDecDummy == NULL || *ppDecDummy == NULL )
@@ -2155,13 +2156,60 @@ static void freeDecoderDummy( DecoderDummy **ppDecDummy )

    if ( pDecDummy->hDecoderConfig != NULL )
    {
        free( pDecDummy->hDecoderConfig );
        count_free( pDecDummy->hDecoderConfig );
    }
    if ( pDecDummy->hHeadTrackData != NULL )
    {
        free( pDecDummy->hHeadTrackData );
        count_free( pDecDummy->hHeadTrackData );
    }
    ivas_render_config_close( &pDecDummy->hRenderConfig );

#ifdef NOKIA_MASA_EXTERNAL_RENDERER
    /* CLDFB handles */
    for ( i = 0; i < MAX_INTERN_CHANNELS; i++ )
    {
        if ( pDecDummy->cldfbAnaDec[i] != NULL )
        {
            deleteCldfb( &( pDecDummy->cldfbAnaDec[i] ) );
            pDecDummy->cldfbAnaDec[i] = NULL;
        }
    }

    for ( i = 0; i < MAX_OUTPUT_CHANNELS; i++ )
    {
        if ( pDecDummy->cldfbSynDec[i] != NULL )
        {
            deleteCldfb( &( pDecDummy->cldfbSynDec[i] ) );
            pDecDummy->cldfbSynDec[i] = NULL;
        }
    }

    /* DirAC handle */
    if ( pDecDummy->hDirAC != NULL )
    {
        ivas_dirac_dec_close( pDecDummy->hDirAC );
        pDecDummy->hDirAC = NULL;
    }

    /* Qmetadata handle */
    ivas_qmetadata_close( &pDecDummy->hQMetaData );

    /* VBAP handle */
    vbap_free_data( &( pDecDummy->hVBAPdata ) );

    /* HOA decoder matrix */
    if ( pDecDummy->hoa_dec_mtx != NULL )
    {
        count_free( pDecDummy->hoa_dec_mtx );
        pDecDummy->hoa_dec_mtx = NULL;
    }

    /* Parametric binaural renderer handle */
    ivas_dirac_dec_close_binaural_data( &pDecDummy->hDiracDecBin );
#endif

    count_free( pDecDummy );
    pDecDummy = NULL;
}

static void clearInputMasa( input_masa *inputMasa )
@@ -4437,7 +4485,7 @@ static ivas_error renderMasaToBinaural( input_masa *masaInput, IVAS_REND_AudioBu
    copyBufferTo2dArray( masaInput->base.inputBuffer, tmpBuffer );
    copyMasaMetadataToDiracRenderer( &masaInput->masaMetadata, masaInput->decDummy->hDirAC );

    ivas_dirac_dec( masaInput->decDummy, tmpBuffer, masaInput->base.inputBuffer.config.numChannels, NULL, NULL, -1 );
    ivas_dirac_dec_binaural( masaInput->decDummy, tmpBuffer, masaInput->base.inputBuffer.config.numChannels );

    accumulate2dArrayToBuffer( tmpBuffer, &outAudio );

@@ -4630,6 +4678,12 @@ void IVAS_REND_Close( IVAS_REND_HANDLE *phIvasRend )
    {
        clearInputSba( &hIvasRend->inputsSba[i] );
    }
#ifdef NOKIA_MASA_EXTERNAL_RENDERER
    for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i )
    {
        clearInputMasa( &hIvasRend->inputsMasa[i] );
    }
#endif

    ivas_limiter_close( &hIvasRend->hLimiter );