Commit 51acf5ce authored by TYAGIRIS's avatar TYAGIRIS
Browse files

issue fix on mc reconfig

parent ad0af430
Loading
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -380,7 +380,11 @@ ivas_error ivas_create_lfe_dec(
    LFE_DEC_HANDLE hLFE;
    float lfe_addl_delay_s;
    int16_t i, j;
#ifndef NONBE_1360_LFE_DELAY
    int16_t add_delay_sa;
#else
    float lfe_block_delay_s;
#endif

    low_pass_delay_dec_out = 0;
    block_offset_s = 0;
@@ -418,7 +422,11 @@ ivas_error ivas_create_lfe_dec(
    hLFE->cum_freq_models[1][3] = &ivas_str_lfe_freq_models.entropy_coder_model_coarse_sg4;

    /* delay calculation */
#ifndef NONBE_1360_LFE_DELAY
    hLFE->lfe_block_delay_s = ( IVAS_LFE_FADE_NS / 1000000000.f ) + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3];
#else
    lfe_block_delay_s = ( IVAS_LFE_FADE_NS / 1000000000.f ) + ivas_lfe_lpf_delay[IVAS_FILTER_ORDER_4 - 3];
#endif

    block_offset_s = BLOCK_OFFSET_MS * 0.001f;
    filt_order = 0;
@@ -435,22 +443,30 @@ ivas_error ivas_create_lfe_dec(
    }

    hLFE->filter_state.order = filt_order;
#ifndef NONBE_1360_LFE_DELAY
    hLFE->lfe_block_delay_s = hLFE->lfe_block_delay_s + low_pass_delay_dec_out;
#else
    lfe_block_delay_s = lfe_block_delay_s + low_pass_delay_dec_out;
#endif
    hLFE->lfe_prior_buf_len = NS2SA( output_Fs, IVAS_LFE_FADE_NS );

    hLFE->bfi_count = 0;
#ifdef NONBE_1360_LFE_DELAY
    block_offset_s += delay_ns / 1000000000.f;
#endif
    lfe_addl_delay_s = block_offset_s - lfe_block_delay_s;
#else
    lfe_addl_delay_s = block_offset_s - hLFE->lfe_block_delay_s;
#endif

    lfe_addl_delay_s = max( 0.0f, lfe_addl_delay_s );
#ifndef NONBE_1360_LFE_DELAY
    add_delay_sa = (int16_t) roundf( (float) delay_ns * output_Fs / 1000000000.f );
    hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs ) + add_delay_sa;
    hLFE->lfe_block_delay_s += lfe_addl_delay_s + add_delay_sa / output_Fs;
    hLFE->lfe_block_delay_s += lfe_addl_delay_s;
#else
    hLFE->lfe_addl_delay = (int16_t) ( lfe_addl_delay_s * output_Fs );
    hLFE->lfe_block_delay_s += lfe_addl_delay_s;
    hLFE->delay_ns = delay_ns;
#endif

    if ( hLFE->lfe_addl_delay > 0 )
+25 −5
Original line number Diff line number Diff line
@@ -1271,8 +1271,11 @@ static ivas_error ivas_mc_dec_reconfig(
    /*-----------------------------------------------------------------*
     * Allocate the LFE handle that is coded separately after the allocation of the core coders
     *-----------------------------------------------------------------*/

#ifdef NONBE_1360_LFE_DELAY
    if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) )
#else
    if ( ( st_ivas->mc_mode == MC_MODE_MCT || st_ivas->mc_mode == MC_MODE_PARAMUPMIX ) && st_ivas->hLFE == NULL )
#endif
    {
#ifdef NONBE_1360_LFE_DELAY
        int32_t delay_ns;
@@ -1307,6 +1310,20 @@ static ivas_error ivas_mc_dec_reconfig(
            }
        }

#ifdef NONBE_1360_LFE_DELAY
        if ( st_ivas->hLFE != NULL )
        {
            if ( st_ivas->hLFE->delay_ns != delay_ns )
            {
                ivas_lfe_dec_close( &( st_ivas->hLFE ) );
            }
        }
#endif

#ifdef NONBE_1360_LFE_DELAY
        if ( st_ivas->hLFE == NULL )
        {
#endif
            if ( ( error = ivas_create_lfe_dec( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ) != IVAS_ERR_OK )
            {
                return error;
@@ -1314,6 +1331,9 @@ static ivas_error ivas_mc_dec_reconfig(

            set_zero( st_ivas->hLFE->prevsynth_buf, LFE_PLC_BUFLEN );
            set_zero( st_ivas->hLFE->prior_out_buffer, L_FRAME48k );
#ifdef NONBE_1360_LFE_DELAY
        }
#endif
    }
#endif

+4 −0
Original line number Diff line number Diff line
@@ -790,7 +790,11 @@ typedef struct ivas_lfe_dec_data_structure
    LFE_WINDOW_HANDLE pWindow_state;
    const uint16_t *cum_freq_models[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS];
    int16_t lfe_dec_indices_coeffs_tbl[IVAS_MAX_NUM_QUANT_STRATS][IVAS_MAX_NUM_DCT_COEF_GROUPS];
#ifdef NONBE_1360_LFE_DELAY
    int32_t delay_ns;
#else
    float lfe_block_delay_s;
#endif
    int16_t lfe_prior_buf_len;
    float prior_out_buffer[L_FRAME48k];