Commit 5cc0eeaf authored by vaclav's avatar vaclav
Browse files

updates within IMPR_TC_SWITCHING_MEMORY

parent cc76c5ed
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1447,7 +1447,7 @@ void polezero_filter(
}

#define WMC_TOOL_MAN

// VE: define complexity macros here
static float fleft_shift( float input, const int16_t shift )
{
    return ( input * (float) pow( 2.0, (double) shift ) );
+1 −2
Original line number Diff line number Diff line
@@ -1004,7 +1004,6 @@ void ivas_spar_dec_upmixer(
#endif
    }


    /*---------------------------------------------------------------------*
     * TD decorrelation
     *---------------------------------------------------------------------*/
@@ -1018,7 +1017,7 @@ void ivas_spar_dec_upmixer(
            mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - i], output[nchan_internal - 1 - i], output_frame );
        }

        hSpar->hFbMixer->fb_cfg->num_in_chans = num_in_ingest;
        hSpar->hFbMixer->fb_cfg->num_in_chans = num_in_ingest; // VE2DB: same as below, can be simplified
    }
    else
    {
+54 −11
Original line number Diff line number Diff line
@@ -438,9 +438,7 @@ void ivas_dirac_enc(
            else
            {
                /* encode SID parameters */
                ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1,
                                               SBA_FORMAT,
                                               SBA_MODE_DIRAC );
                ivas_qmetadata_enc_sid_encode( hMetaData, hQMetaData, -1, SBA_FORMAT, SBA_MODE_DIRAC );
            }
        }
    }
@@ -465,6 +463,51 @@ void ivas_dirac_enc_spar_delay_synchro(
    int16_t ch_idx;
    float tmp_buffer[L_FRAME48k];

#ifdef IMPR_TC_SWITCHING_MEMORY
#if 1
    /* check last sba_mode */
    if ( ivas_sba_mode_select( st_ivas->hEncoderConfig->last_ivas_total_brate ) == SBA_MODE_SPAR )
    {
        Encoder_State *sts[MCT_MAX_BLOCKS];
        int16_t i_chan = 0;

        /* initializations */
        for ( int16_t sce_id = 0; sce_id < st_ivas->nSCE; sce_id++ )
        {
            sts[sce_id] = st_ivas->hSCE[sce_id]->hCoreCoder[0];
            i_chan++;
        }

        for ( int16_t cpe_id = 0; cpe_id < st_ivas->nCPE; cpe_id++ )
        {
            for ( int16_t ch = 0; ch < CPE_CHANNELS; ch++ )
            {
                sts[i_chan] = st_ivas->hCPE[cpe_id]->hCoreCoder[ch];
                i_chan++;
            }
        }

        for ( ch_idx = 0; ch_idx < i_chan; ch_idx++ )
        {
            mvr2r( sts[ch_idx]->input, st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay );
        }
    }
#else
    /* check last sba_mode */
    if ( ivas_sba_mode_select( st_ivas->hEncoderConfig->last_ivas_total_brate ) == SBA_MODE_SPAR )
    {
        for ( ch_idx = 0; ch_idx < st_ivas->hEncoderConfig->nchan_inp; ch_idx++ )
        {
            mvr2r( data_f[ch_idx], tmp_buffer, input_frame );
            //set_f( data_f[ch_idx], 0, 48 );
            mvr2r( tmp_buffer, &data_f[ch_idx][st_ivas->hDirAC->num_samples_synchro_delay], input_frame - st_ivas->hDirAC->num_samples_synchro_delay );
            mvr2r( &tmp_buffer[input_frame - st_ivas->hDirAC->num_samples_synchro_delay], st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay );
        }
    }
    else
#endif
#endif
    {
        for ( ch_idx = 0; ch_idx < st_ivas->hEncoderConfig->nchan_inp; ch_idx++ )
        {
            mvr2r( data_f[ch_idx], tmp_buffer, input_frame );
@@ -472,7 +515,7 @@ void ivas_dirac_enc_spar_delay_synchro(
            mvr2r( tmp_buffer, &data_f[ch_idx][st_ivas->hDirAC->num_samples_synchro_delay], input_frame - st_ivas->hDirAC->num_samples_synchro_delay );
            mvr2r( &tmp_buffer[input_frame - st_ivas->hDirAC->num_samples_synchro_delay], st_ivas->hDirAC->sba_synchro_buffer[ch_idx], st_ivas->hDirAC->num_samples_synchro_delay );
        }

    }
    return;
}

+11 −0
Original line number Diff line number Diff line
@@ -234,6 +234,17 @@ ivas_error ivas_enc(
                ivas_masa_encode( st_ivas->hMasa, st_ivas->hQMetaData, hMetaData, &nb_bits_metadata[0], st_ivas->nchan_transport, ivas_format,
                                  ivas_total_brate, hEncoderConfig->Opt_DTX_ON, st_ivas->nchan_transport == 2 ? st_ivas->hCPE[0]->element_mode : -1 );
            }

            float tmpF = 0;
            dbgwrite( &tmpF, 4, 1, 960, "res/tmp_ppFilterbank_prior_input" );
            if ( st_ivas->nSCE > 0 )
            {
                dbgwrite( st_ivas->hSCE[0]->hCoreCoder[0]->input_buff, 4, 960, 1, "res/tmp_input_buff" );
            }
            else
            {
                dbgwrite( st_ivas->hCPE[0]->hCoreCoder[0]->input_buff, 4, 960, 1, "res/tmp_input_buff" );
            }
        }
        else if ( st_ivas->sba_mode == SBA_MODE_SPAR )
        {
+57 −6
Original line number Diff line number Diff line
@@ -218,6 +218,9 @@ ivas_error ivas_sba_enc_reconfigure(
{
    int16_t nchan_transport_old, nSCE_old, nCPE_old;
    int16_t n, sce_id, cpe_id;
#ifdef IMPR_TC_SWITCHING_MEMORY
    int16_t len_inp_memory;
#endif
    Indice *ind_list_metadata;
    int32_t ivas_total_brate;
    ENCODER_CONFIG_HANDLE hEncoderConfig;
@@ -225,6 +228,10 @@ ivas_error ivas_sba_enc_reconfigure(

    hEncoderConfig = st_ivas->hEncoderConfig;
    error = IVAS_ERR_OK;
#ifdef IMPR_TC_SWITCHING_MEMORY
    //VE: TBD - last 1ms sample are not correct but are needed for DirAC<->SPAR delay compensation
    len_inp_memory = ( int16_t )( hEncoderConfig->input_Fs / FRAMES_PER_SEC ) + NS2SA( hEncoderConfig->input_Fs, IVAS_FB_ENC_DELAY_NS );
#endif

    ivas_total_brate = hEncoderConfig->ivas_total_brate;

@@ -376,11 +383,12 @@ ivas_error ivas_sba_enc_reconfigure(
        else
        {
            Indice *ind_list;
            int16_t nb_bits_tot;
            int16_t next_ind;
            int16_t last_ind;
            BSTR_ENC_HANDLE hBstr;
            BSTR_ENC_HANDLE hMetaData;
            int16_t nb_bits_tot, next_ind, last_ind;
            BSTR_ENC_HANDLE hBstr, hMetaData;
#ifdef IMPR_TC_SWITCHING_MEMORY
            int16_t n_CoreCoder_save;
            float input_buff[MCT_MAX_BLOCKS][L_FRAME48k + NS2SA( 48000, IVAS_FB_ENC_DELAY_NS )];
#endif

            ind_list = NULL;
            hBstr = NULL;
@@ -411,15 +419,36 @@ ivas_error ivas_sba_enc_reconfigure(
            last_ind = hBstr->last_ind;
            ind_list_metadata = hMetaData->ind_list;

            /* destroy superfluous core coder elements */ // VE: TBV whether a core-coder can be reused
#ifdef IMPR_TC_SWITCHING_MEMORY
            n_CoreCoder_save = min( st_ivas->nchan_transport, nchan_transport_old );
#endif

            /* destroy superfluous core coder elements */
            for ( sce_id = st_ivas->nSCE; sce_id < nSCE_old; sce_id++ )
            {
#ifdef IMPR_TC_SWITCHING_MEMORY
                /* save input audio buffers */
                if ( n_CoreCoder_save > sce_id )
                {
                    mvr2r( st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, input_buff[sce_id], len_inp_memory );
                }
#endif
                destroy_sce_enc( st_ivas->hSCE[sce_id] );
                st_ivas->hSCE[sce_id] = NULL;
            }

            for ( cpe_id = st_ivas->nCPE; cpe_id < nCPE_old; cpe_id++ )
            {
#ifdef IMPR_TC_SWITCHING_MEMORY
                /* save input audio buffers */
                for ( n = 0; n < CPE_CHANNELS; n++ )
                {
                    if( n_CoreCoder_save > cpe_id * CPE_CHANNELS + n )
                    {
                        mvr2r( st_ivas->hCPE[cpe_id]->hCoreCoder[0]->input_buff, input_buff[( cpe_id - st_ivas->nCPE ) * CPE_CHANNELS + n], len_inp_memory );
                    }
                }
#endif
                destroy_cpe_enc( st_ivas->hCPE[cpe_id] );
                st_ivas->hCPE[cpe_id] = NULL;
            }
@@ -442,12 +471,14 @@ ivas_error ivas_sba_enc_reconfigure(
            {
                int16_t nSCE_existing;
                nSCE_existing = min( nSCE_old, st_ivas->nSCE );

                for ( sce_id = 0; sce_id < nSCE_existing; sce_id++ )
                {
                    copy_encoder_config( st_ivas, st_ivas->hSCE[sce_id]->hCoreCoder[0], 0 );
                    st_ivas->hSCE[sce_id]->element_brate = ivas_total_brate / st_ivas->nchan_transport;
                    st_ivas->hSCE[sce_id]->hCoreCoder[0]->total_brate = st_ivas->hSCE[sce_id]->element_brate; /* dummy initialization for getting right pointers initialization of input buffers in init_coder_ace_plus() */
                }

                for ( sce_id = nSCE_existing; sce_id < st_ivas->nSCE; sce_id++ )
                {
                    if ( ( error = create_sce_enc( st_ivas, sce_id, ivas_total_brate / st_ivas->nchan_transport ) ) != IVAS_ERR_OK )
@@ -455,6 +486,14 @@ ivas_error ivas_sba_enc_reconfigure(
                        return error;
                    }

#ifdef IMPR_TC_SWITCHING_MEMORY
                    /* propagate input audio buffers */
                    if ( n_CoreCoder_save > sce_id )
                    {
                        mvr2r( input_buff[sce_id], st_ivas->hSCE[sce_id]->hCoreCoder[0]->input_buff, len_inp_memory );
                    }
#endif

                    /* prepare bitstream buffers */
                    st_ivas->hSCE[sce_id]->hCoreCoder[0]->hBstr->ind_list = ind_list + sce_id * MAX_NUM_INDICES;

@@ -479,6 +518,7 @@ ivas_error ivas_sba_enc_reconfigure(
            {
                int16_t nCPE_existing;
                nCPE_existing = min( nCPE_old, st_ivas->nCPE );

                for ( cpe_id = 0; cpe_id < nCPE_existing; cpe_id++ )
                {
                    st_ivas->hCPE[cpe_id]->element_brate = ( ivas_total_brate / st_ivas->nchan_transport ) * CPE_CHANNELS;
@@ -498,6 +538,17 @@ ivas_error ivas_sba_enc_reconfigure(
                        return error;
                    }

#ifdef IMPR_TC_SWITCHING_MEMORY
                    /* propagate input audio buffers */
                    for ( n = 0; n < CPE_CHANNELS; n++ )
                    {
                        if ( n_CoreCoder_save > cpe_id * CPE_CHANNELS + n )
                        {
                            mvr2r( input_buff[n], st_ivas->hCPE[cpe_id]->hCoreCoder[0]->input_buff, len_inp_memory );
                        }
                    }
#endif

                    /* prepare bitstream buffers */
                    for ( n = 0; n < CPE_CHANNELS; n++ )
                    {
Loading