Commit c0c76d8f authored by TYAGIRIS's avatar TYAGIRIS
Browse files

basop porting for mr2196

parent b4d4d741
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -137,6 +137,7 @@
#define NONBE_FIX_1052_SBA_EXT_FIX                      /* VA: SBA external output support fix - do not overwrite "output_config" parameter */

#define NONBE_1894_OSBA_SCALING                          /* FhG: do not scale OSBA inputs by 0.5 any more */
#define NONBE_1360_LFE_DELAY                           /* Dlb: LFE delay alignment when rendering in CLDFB domain*/

/* #################### End BASOP porting switches ############################ */

+11 −0
Original line number Diff line number Diff line
@@ -2636,8 +2636,19 @@ ivas_error ivas_init_decoder_fx(
     *-----------------------------------------------------------------*/
    test();
    IF( EQ_32( st_ivas->mc_mode, MC_MODE_MCT ) || EQ_32( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) )
    {
#ifdef NONBE_1360_LFE_DELAY
        IF ( NE_16(st_ivas->hIntSetup.index_lfe[0], -1 ))
        {
            delay_ns = st_ivas->binaural_latency_ns;
        }
        ELSE
        {
            delay_ns = 0;
        }
#else
        delay_ns = st_ivas->binaural_latency_ns;
#endif
        move32();
        IF( st_ivas->hBinRenderer != NULL )
        {
+30 −4
Original line number Diff line number Diff line
@@ -443,9 +443,15 @@ ivas_error ivas_create_lfe_dec_fx(
    Word16 low_pass_delay_dec_out, block_offset_s;
    Word16 filt_order, output_frame;
    LFE_DEC_HANDLE hLFE;
    Word16 lfe_addl_delay_s;
    Word16 i, j;
    Word16 add_delay_sa;
#ifndef NONBE_1360_LFE_DELAY
    int16_t add_delay_sa;
    Word16 lfe_addl_delay_s;
#else
    Word16 lfe_block_delay_s_fx;
    Word16 block_offset_samples, lfe_block_delay_samples;
    Word16 lfe_addl_delay_samples;
#endif
    Word32 output_fs_fx;

    low_pass_delay_dec_out = 0;
@@ -486,7 +492,11 @@ ivas_error ivas_create_lfe_dec_fx(
    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_fx = add( IVAS_LFE_FADE_S_Q15, ivas_lfe_lpf_delay_Q15[IVAS_FILTER_ORDER_4 - 3] ); // Q15
#else
    lfe_block_delay_s_fx = add( IVAS_LFE_FADE_S_Q15, ivas_lfe_lpf_delay_Q15[IVAS_FILTER_ORDER_4 - 3] ); // Q15
#endif
    move16();

    block_offset_s = BLOCK_OFFSET_S_Q15; // Q15
@@ -507,8 +517,12 @@ ivas_error ivas_create_lfe_dec_fx(

    hLFE->filter_state.order = filt_order;
    move16();
#ifndef NONBE_1360_LFE_DELAY
    hLFE->lfe_block_delay_s_fx = add( hLFE->lfe_block_delay_s_fx, low_pass_delay_dec_out ); // Q15
    move16();
#else
    lfe_block_delay_s_fx = add( lfe_block_delay_s_fx, low_pass_delay_dec_out );                         // Q15
#endif
    hLFE->lfe_prior_buf_len = NS2SA_FX2( output_Fs, IVAS_LFE_FADE_NS ); // Q0
    move16();

@@ -532,6 +546,17 @@ ivas_error ivas_create_lfe_dec_fx(
    }
    move32();

#ifdef NONBE_1360_LFE_DELAY
    block_offset_samples = (Word16) L_shr( imult3216( output_Fs, block_offset_s ), 15 );                                             // Q0
    block_offset_samples = add( block_offset_samples, (Word16) W_round64_L( W_mult0_32_32( L_shl( delay_ns, 1 ), output_fs_fx ) ) ); // Q0
    lfe_block_delay_samples = (Word16) L_shr( imult3216( output_Fs, lfe_block_delay_s_fx ), 15 );                                    // Q0
    lfe_addl_delay_samples = sub( block_offset_samples, lfe_block_delay_samples );
    lfe_addl_delay_samples = s_max( 0, lfe_addl_delay_samples );
    hLFE->lfe_addl_delay = lfe_addl_delay_samples;
    move16();
    hLFE->delay_ns = delay_ns;
    move32();
#else
    lfe_addl_delay_s = sub( block_offset_s, hLFE->lfe_block_delay_s_fx );                               // Q15
    lfe_addl_delay_s = s_max( 0, lfe_addl_delay_s );
#ifdef NONBE_FIX_MC_LFE_LPF
@@ -551,6 +576,7 @@ ivas_error ivas_create_lfe_dec_fx(
        hLFE->lfe_block_delay_s_fx = add( hLFE->lfe_block_delay_s_fx, add( lfe_addl_delay_s, idiv1616( add_delay_sa, extract_l( output_Fs ) ) ) );
    }
    move16();
#endif

    IF( hLFE->lfe_addl_delay > 0 )
    {
+26 −10
Original line number Diff line number Diff line
@@ -960,22 +960,38 @@ static void ivas_mc_paramupmix_dec_sf(
        {
            FOR( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ )
            {
#ifdef NONBE_1360_LFE_DELAY
                /*delay is handled within LFE decoder*/
                IF( NE_16( st_ivas->hIntSetup.index_lfe[0], ch ) )
                {
#endif
                    Word32 tmp_buf_fx[L_SUBFRAME5MS_48k];
                    Copy32( &output_fx[ch][n_samples_rendered - noparamupmix_delay], tmp_buf_fx, noparamupmix_delay );
                    Copy32( output_fx[ch], &output_fx[ch][noparamupmix_delay], sub( n_samples_rendered, noparamupmix_delay ) );
                    Copy32( hMCParamUpmix->pcm_delay_fx[ch], output_fx[ch], noparamupmix_delay );
                    Copy32( tmp_buf_fx, hMCParamUpmix->pcm_delay_fx[ch], noparamupmix_delay );
#ifdef NONBE_1360_LFE_DELAY
                }
#endif
            }
        }
        ELSE
        {
            FOR( ch = 0; ch < MC_PARAMUPMIX_COMBINATIONS; ch++ )
            {
#ifdef NONBE_1360_LFE_DELAY
                /*delay is handled within LFE decoder*/
                IF( NE_16( st_ivas->hIntSetup.index_lfe[0], ch ) )
                {
#endif
                    Word32 tmp_buf_fx[L_SUBFRAME5MS_48k];
                    Copy32( &output_fx[ch][0], tmp_buf_fx, n_samples_rendered );
                    Copy32( hMCParamUpmix->pcm_delay_fx[ch], output_fx[ch], n_samples_rendered );
                    Copy32( &hMCParamUpmix->pcm_delay_fx[ch][n_samples_rendered], &hMCParamUpmix->pcm_delay_fx[ch][0], sub( noparamupmix_delay, n_samples_rendered ) );
                    Copy32( tmp_buf_fx, &hMCParamUpmix->pcm_delay_fx[ch][noparamupmix_delay - n_samples_rendered], n_samples_rendered );
#ifdef NONBE_1360_LFE_DELAY
                }
#endif
            }
        }
    }
+96 −0
Original line number Diff line number Diff line
@@ -1332,6 +1332,8 @@ static ivas_error ivas_mc_dec_reconfig_fx(
    {
        return error;
    }

#ifndef NONBE_1360_LFE_DELAY
    /*-----------------------------------------------------------------*
     * Allocate the LFE handle that is coded separately after the allocation of the core coders
     *-----------------------------------------------------------------*/
@@ -1389,6 +1391,7 @@ static ivas_error ivas_mc_dec_reconfig_fx(
        set32_fx( st_ivas->hLFE->prevsynth_buf_fx, 0, LFE_PLC_BUFLEN );
        set32_fx( st_ivas->hLFE->prior_out_buffer_fx, 0, L_FRAME48k );
    }
#endif

    /*-----------------------------------------------------------------*
     * Reconfigure renderers
@@ -1546,6 +1549,99 @@ static ivas_error ivas_mc_dec_reconfig_fx(
        return error;
    }

#ifdef NONBE_1360_LFE_DELAY
    /*-----------------------------------------------------------------*
     * Allocate the LFE handle that is coded separately after the allocation of the core coders
     *-----------------------------------------------------------------*/
#ifdef NONBE_1360_LFE_DELAY
    test();
    IF( ( EQ_16( st_ivas->mc_mode, MC_MODE_MCT ) || EQ_16( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) )
#else
    test();
    test();
    IF( ( EQ_16( st_ivas->mc_mode, MC_MODE_MCT ) || EQ_16( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) ) && st_ivas->hLFE == NULL )
#endif
    {
#ifdef NONBE_FIX_MC_LFE_LPF
#ifdef NONBE_1360_LFE_DELAY
        Word32 delay_ns;
        IF( NE_16( st_ivas->hIntSetup.index_lfe[0], -1 ) )
        {
            delay_ns = st_ivas->binaural_latency_ns;
        }
        ELSE
        {
            delay_ns = 0;
        }
#else
        Word32 delay_ns = st_ivas->binaural_latency_ns;
#endif
#else
        Word32 binauralization_delay_ns = st_ivas->binaural_latency_ns;
#endif
        move32();
        IF( st_ivas->hBinRenderer != NULL )
        {
            IF( st_ivas->hBinRenderer->render_lfe )
            {
                /* Account for filterbank delay */
#ifdef NONBE_FIX_MC_LFE_LPF
                delay_ns = L_add( delay_ns, IVAS_FB_DEC_DELAY_NS );
#else
                binauralization_delay_ns = L_add( binauralization_delay_ns, IVAS_FB_DEC_DELAY_NS );
#endif
            }
            ELSE
            {
#ifdef NONBE_FIX_MC_LFE_LPF
                delay_ns = 0;
#else
                binauralization_delay_ns = 0;
#endif
                move32();
            }
        }
#ifdef NONBE_FIX_MC_LFE_LPF
        ELSE
        {
            IF( EQ_16( st_ivas->mc_mode, MC_MODE_PARAMUPMIX ) && ( st_ivas->cldfbSynDec[0] != NULL ) )
            {
                delay_ns = L_add( delay_ns, IVAS_FB_DEC_DELAY_NS );
            }
        }
#endif

#ifdef NONBE_1360_LFE_DELAY
        IF( st_ivas->hLFE != NULL )
        {
            IF( NE_32( st_ivas->hLFE->delay_ns, delay_ns ) )
            {
                ivas_lfe_dec_close_fx( &( st_ivas->hLFE ) );
            }
        }
#endif

#ifdef NONBE_1360_LFE_DELAY
        IF( st_ivas->hLFE == NULL )
        {
#endif
#ifdef NONBE_FIX_MC_LFE_LPF
            IF( NE_32( ( error = ivas_create_lfe_dec_fx( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, delay_ns ) ), IVAS_ERR_OK ) )
#else
        IF( NE_32( ( error = ivas_create_lfe_dec_fx( &st_ivas->hLFE, st_ivas->hDecoderConfig->output_Fs, binauralization_delay_ns ) ), IVAS_ERR_OK ) )
#endif
            {
                return error;
            }

            set32_fx( st_ivas->hLFE->prevsynth_buf_fx, 0, LFE_PLC_BUFLEN );
            set32_fx( st_ivas->hLFE->prior_out_buffer_fx, 0, L_FRAME48k );
#ifdef NONBE_1360_LFE_DELAY
        }
#endif
    }
#endif

    /*-----------------------------------------------------------------*
     * JBM TC buffers
     *-----------------------------------------------------------------*/
Loading