Commit 7950bbdb authored by multrus's avatar multrus
Browse files

properly initialize sub-handles/buffers with NULL, avoid depdency in...

properly initialize sub-handles/buffers with NULL, avoid depdency in free-functions from codec parameters
parent 130166fc
Loading
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1109,11 +1109,17 @@ ivas_error ivas_param_ism_dec_open(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                      */
);

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
void ivas_param_ism_dec_close(
    PARAM_ISM_DEC_HANDLE *hParamIsmDec                          /* i/o: decoder ParamISM handle                     */
);
#else
void ivas_param_ism_dec_close(
    PARAM_ISM_DEC_HANDLE *hParamIsmDec,                         /* i/o: decoder ParamISM handle                     */
    SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out,  /* i/o: common spatial renderer data                */
    const AUDIO_CONFIG output_config                            /* i  : output audio configuration                  */
);
#endif

void ivas_ism_dec_digest_tc(
    Decoder_Struct *st_ivas                                     /* i/o: IVAS decoder structure                      */
+1 −1
Original line number Diff line number Diff line
@@ -2886,7 +2886,7 @@ void ivas_destroy_dec(

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
    /* ParamISM dec handle */
    ivas_param_ism_dec_close( &( st_ivas->hParamIsmDec ), &( st_ivas->hSpatParamRendCom ), st_ivas->hDecoderConfig->output_config );
    ivas_param_ism_dec_close( &( st_ivas->hParamIsmDec ) );

    /* DirAC handles */
    ivas_dirac_rend_close( &( st_ivas->hDirACRend ) );
+6 −0
Original line number Diff line number Diff line
@@ -149,7 +149,13 @@ static ivas_error ivas_ism_bitrate_switching_dec(
    if ( st_ivas->ism_mode == ISM_MODE_DISC && last_ism_mode == ISM_MODE_PARAM )
    {
        /* Deallocate the ParamISM struct */
#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
        ivas_param_ism_dec_close( &( st_ivas->hParamIsmDec ) );

        ivas_spat_hSpatParamRendCom_close( &( st_ivas->hSpatParamRendCom ) );
#else
        ivas_param_ism_dec_close( &( st_ivas->hParamIsmDec ), &( st_ivas->hSpatParamRendCom ), st_ivas->hDecoderConfig->output_config );
#endif

        if ( st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_CODED || st_ivas->hOutSetup.output_config == IVAS_AUDIO_CONFIG_BINAURAL_SPLIT_PCM )
        {
+45 −0
Original line number Diff line number Diff line
@@ -430,22 +430,55 @@ ivas_error ivas_param_ism_dec_open(
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ParamISM\n" ) );
    }

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
    /* initialize sub-handles with NULL */
    hParamIsmDec->hParamIsm = NULL;
    hParamIsmDec->hParamIsmRendering = NULL;
#endif

    if ( ( hSpatParamRendCom = (SPAT_PARAM_REND_COMMON_DATA_HANDLE) malloc( sizeof( SPAT_PARAM_REND_COMMON_DATA ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC\n" ) );
    }

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
    /* initialize buffers in handle with NULL - this handle is also used by other DirAC technologies, and not every technology is initializing all buffers */
    hSpatParamRendCom->azimuth = NULL;
    hSpatParamRendCom->elevation = NULL;
    hSpatParamRendCom->azimuth2 = NULL;
    hSpatParamRendCom->elevation2 = NULL;
    hSpatParamRendCom->diffuseness_vector = NULL;
    hSpatParamRendCom->energy_ratio1 = NULL;
    hSpatParamRendCom->energy_ratio2 = NULL;
    hSpatParamRendCom->spreadCoherence = NULL;
    hSpatParamRendCom->spreadCoherence2 = NULL;
    hSpatParamRendCom->surroundingCoherence = NULL;
#endif

    /* Assign memory to Param Object handle */
    if ( ( hParamIsmDec->hParamIsm = (PARAM_ISM_CONFIG_HANDLE) malloc( sizeof( PARAM_ISM_CONFIG_DATA ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ParamISM\n" ) );
    }

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
    /* initialize sub-handles with NULL */
    hParamIsmDec->hParamIsm->hFbMixer = NULL;
#endif

    if ( ( hParamIsmDec->hParamIsmRendering = (PARAM_ISM_RENDERING_HANDLE) malloc( sizeof( PARAM_ISM_RENDERING_DATA ) ) ) == NULL )
    {
        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for ParamISM Rendering handle\n" ) );
    }

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
    /* initialize sub-handles/buffers with NULL */
    hParamIsmDec->hParamIsmRendering->proto_matrix = NULL;
    hParamIsmDec->hParamIsmRendering->interpolator = NULL;
    hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc = NULL;
    hParamIsmDec->hParamIsmRendering->Cldfb_ImagBuffer_tc = NULL;
#endif

    output_Fs = st_ivas->hDecoderConfig->output_Fs;
    output_config = st_ivas->hDecoderConfig->output_config;

@@ -617,11 +650,17 @@ ivas_error ivas_param_ism_dec_open(
 * Close Param ISM handle
 *-------------------------------------------------------------------------*/

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
void ivas_param_ism_dec_close(
    PARAM_ISM_DEC_HANDLE *hParamIsmDec_out /* i/o: decoder DirAC handle         */
)
#else
void ivas_param_ism_dec_close(
    PARAM_ISM_DEC_HANDLE *hParamIsmDec_out,                    /* i/o: decoder DirAC handle         */
    SPAT_PARAM_REND_COMMON_DATA_HANDLE *hSpatParamRendCom_out, /* i/o: common spatial renderer data */
    AUDIO_CONFIG output_config                                 /* i  : output audio configuration   */
)
#endif
{
    if ( hParamIsmDec_out != NULL && *hParamIsmDec_out != NULL )
    {
@@ -635,8 +674,10 @@ void ivas_param_ism_dec_close(
            hParamIsmDec->hParamIsm = NULL;
        }

#ifndef FIX_FLOAT_1526_DIRAC_MEM_LEAK
        if ( !( output_config == IVAS_AUDIO_CONFIG_MONO || output_config == IVAS_AUDIO_CONFIG_STEREO ) )
        {
#endif
            /* Param ISM Rendering */
            if ( hParamIsmDec->hParamIsmRendering->interpolator != NULL )
            {
@@ -648,7 +689,9 @@ void ivas_param_ism_dec_close(
                free( hParamIsmDec->hParamIsmRendering->proto_matrix );
                hParamIsmDec->hParamIsmRendering->proto_matrix = NULL;
            }
#ifndef FIX_FLOAT_1526_DIRAC_MEM_LEAK
        }
#endif

        if ( hParamIsmDec->hParamIsmRendering->Cldfb_RealBuffer_tc != NULL )
        {
@@ -671,6 +714,7 @@ void ivas_param_ism_dec_close(
        *hParamIsmDec_out = NULL;
    }

#ifndef FIX_FLOAT_1526_DIRAC_MEM_LEAK
    if ( hSpatParamRendCom_out != NULL && *hSpatParamRendCom_out != NULL )
    {
        if ( output_config == IVAS_AUDIO_CONFIG_BINAURAL || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_IR || output_config == IVAS_AUDIO_CONFIG_BINAURAL_ROOM_REVERB )
@@ -682,6 +726,7 @@ void ivas_param_ism_dec_close(
        free( *hSpatParamRendCom_out );
        *hSpatParamRendCom_out = NULL;
    }
#endif

    return;
}
+14 −0
Original line number Diff line number Diff line
@@ -225,6 +225,20 @@ ivas_error ivas_spat_hSpatParamRendCom_config(
            return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for DirAC meta\n" ) );
        }

#ifdef FIX_FLOAT_1526_DIRAC_MEM_LEAK
        /* initialize buffers in handle with NULL - this handle is also used by other DirAC technologies, and not every technology is initializing all buffers */
        hSpatParamRendCom->azimuth = NULL;
        hSpatParamRendCom->elevation = NULL;
        hSpatParamRendCom->azimuth2 = NULL;
        hSpatParamRendCom->elevation2 = NULL;
        hSpatParamRendCom->diffuseness_vector = NULL;
        hSpatParamRendCom->energy_ratio1 = NULL;
        hSpatParamRendCom->energy_ratio2 = NULL;
        hSpatParamRendCom->spreadCoherence = NULL;
        hSpatParamRendCom->spreadCoherence2 = NULL;
        hSpatParamRendCom->surroundingCoherence = NULL;
#endif

        *hSpatParamRendCom_out = hSpatParamRendCom;
    }