Commit 0a4785ac authored by bayers's avatar bayers
Browse files

fix ParamMC reconfig, reallocate CLDFB buffers when number of transport channel changes

parent ca07e497
Loading
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
@@ -974,6 +974,61 @@ ivas_error ivas_param_mc_dec_reconfig(
        set_zero( hParamMC->proto_frame_f, 2 * hParamMC->diff_proto_info->num_protos_diff * hParamMC->num_freq_bands );
    }


#ifdef NONBE_UNIFIED_DECODING_PATHS
    if ( nchan_transport_old != nchan_transport )
#
        {
            if ( hParamMC->synthesis_conf != PARAM_MC_SYNTH_MONO_STEREO )
            {
                int16_t n_cldfb_slots;


                if ( hParamMC->Cldfb_RealBuffer_tc != NULL )
                {
                    free( hParamMC->Cldfb_RealBuffer_tc );
                    hParamMC->Cldfb_RealBuffer_tc = NULL;
                }

                if ( hParamMC->Cldfb_RealBuffer_tc != NULL )
                {
                    free( hParamMC->Cldfb_RealBuffer_tc );
                    hParamMC->Cldfb_RealBuffer_tc = NULL;
                }

                n_cldfb_slots = DEFAULT_JBM_CLDFB_TIMESLOTS;
                if ( st_ivas->hDecoderConfig->Opt_tsm )
                {
                    n_cldfb_slots = MAX_JBM_CLDFB_TIMESLOTS;
                }
                if ( ( hParamMC->Cldfb_RealBuffer_tc = (float *) malloc( n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL )
                {
                    return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) );
                }
                set_zero( hParamMC->Cldfb_RealBuffer_tc, n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands );

                if ( ( hParamMC->Cldfb_ImagBuffer_tc = (float *) malloc( n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands * sizeof( float ) ) ) == NULL )
                {
                    return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for Parametric MC JBM\n" ) );
                }
                set_zero( hParamMC->Cldfb_ImagBuffer_tc, n_cldfb_slots * nchan_transport * hParamMC->num_freq_bands );
            }
            else
            {
                if ( hParamMC->Cldfb_RealBuffer_tc != NULL )
                {
                    free( hParamMC->Cldfb_RealBuffer_tc );
                    hParamMC->Cldfb_RealBuffer_tc = NULL;
                }

                if ( hParamMC->Cldfb_RealBuffer_tc != NULL )
                {
                    free( hParamMC->Cldfb_RealBuffer_tc );
                    hParamMC->Cldfb_RealBuffer_tc = NULL;
                }
            }
        }
#endif
    return error;
}