Commit 2880bc36 authored by Vidhya V P's avatar Vidhya V P
Browse files

Fix for SBA BR switching cases crash

parent 3b416287
Loading
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -606,9 +606,20 @@ ivas_error ivas_sba_dec_reconfigure(
     *-----------------------------------------------------------------*/

    ivas_init_dec_get_num_cldfb_instances( st_ivas, &numCldfbAnalyses_old, &numCldfbSyntheses_old );

#ifndef SBA_BR_SWITCHING_RECONFIG
    nchan_hp20_old = getNumChanSynthesis( st_ivas );

#else
    int16_t analysis_order_old;
    analysis_order_old = ivas_sba_get_analysis_order( last_ivas_total_brate, st_ivas->sba_order );
    if ( analysis_order_old > 1 )
    {
        nchan_hp20_old = 0;
    }
    else
    {
        nchan_hp20_old = st_ivas->nchan_transport;
    }
#endif
    nSCE_old = st_ivas->nSCE;
    nCPE_old = st_ivas->nCPE;
    nchan_transport_old = st_ivas->nchan_transport;
+65 −0
Original line number Diff line number Diff line
@@ -352,7 +352,72 @@ ivas_error ivas_sba_enc_reconfigure(
        st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, hEncoderConfig->sba_order );
#ifdef SBA_BR_SWITCHING
        st_ivas->sba_mode = ivas_sba_mode_select( ivas_total_brate );
#ifdef SBA_BR_SWITCHING_RECONFIG
        int16_t analysis_order_old = ivas_sba_get_analysis_order( hEncoderConfig->last_ivas_total_brate, hEncoderConfig->sba_order );
        if ( analysis_order_old != st_ivas->sba_analysis_order )
        {
            int16_t n, i, n_old;
            float **old_mem_hp20_in;
            n_old = ivas_sba_get_nchan_metadata( analysis_order_old );
            n = ivas_sba_get_nchan_metadata( st_ivas->sba_analysis_order );
            if ( n > n_old )
            {
                /* save old mem_hp_20 pointer */
                old_mem_hp20_in = st_ivas->mem_hp20_in;
                st_ivas->mem_hp20_in = NULL;

                if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL )
                {
                    return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) );
                }

                for ( i = 0; i < n_old; i++ )
                {
                    st_ivas->mem_hp20_in[i] = old_mem_hp20_in[i];
                    old_mem_hp20_in[i] = NULL;
                }
                /* create additional hp20 memories */
                for ( ; i < n; i++ )
                {
                    if ( ( st_ivas->mem_hp20_in[i] = (float *) malloc( L_HP20_MEM * sizeof( float ) ) ) == NULL )
                    {
                        return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) );
                    }

                    set_f( st_ivas->mem_hp20_in[i], 0.0f, L_HP20_MEM );
                }

                free( old_mem_hp20_in );
                old_mem_hp20_in = NULL;
            }
            else if ( n < n_old )
            {
                /* save old mem_hp_20 pointer */
                old_mem_hp20_in = st_ivas->mem_hp20_in;
                st_ivas->mem_hp20_in = NULL;

                if ( ( st_ivas->mem_hp20_in = (float **) malloc( n * sizeof( float * ) ) ) == NULL )
                {
                    return ( IVAS_ERROR( IVAS_ERR_FAILED_ALLOC, "Can not allocate memory for HP20 filter memory\n" ) );
                }

                for ( i = 0; i < n; i++ )
                {
                    st_ivas->mem_hp20_in[i] = old_mem_hp20_in[i];
                    old_mem_hp20_in[i] = NULL;
                }
                /* remove superfluous hp20 memories */
                for ( ; i < n_old; i++ )
                {
                    free( old_mem_hp20_in[i] );
                    old_mem_hp20_in[i] = NULL;
                }

                free( old_mem_hp20_in );
                old_mem_hp20_in = NULL;
            }
        }
#endif
        if ( st_ivas->sba_mode == SBA_MODE_SPAR )
        {
            if ( st_ivas->hSpar == NULL )