Commit c71dde49 authored by Rivukanta Bhattacharya's avatar Rivukanta Bhattacharya
Browse files

Merge branch 'main' into dlb/low-bitrate-sba-cleanup

parents 6e55737e 59f47a87
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -201,6 +201,8 @@
#define FIX_487_LOWRATE_SBA_TUNING_FIX                  /* Dlb: TUning fix for low bitrate cases to match theoretical longest SPAR MD bitstream */
#define FIX_490_MASA_2TC_LBR_DTX                        /* Nokia: Fixes issue 490 by correcting condition. */

#define FIX_163_SBA_TD_DECORR_OPT                       /* Dlb : Issue 163 : TD decorr state optimization in SBA for certain output formats */

#define FIX_HBR_MASAMETA                                /* Nokia: Fixes to HBR MASA metadata at 384 and 512 kbps. Addresses issues 438 and 477 as well. */
#define FIX_482_DUMMYDEC_INIT                           /* Nokia: fix issue #428: missing inits for dummyDec in IVAS_rend */
#define FIX_468_16KHZ_PUPMIX                            /* Dlb: Fix issue 468 for Param Upmix at 16kHz sampling rate */
@@ -221,6 +223,7 @@

#define FIX_483                                         /* FhG: fix issue 483, division by zero in nois_est */
#define FIX_483b                                        /* FhG: fix issue 483, uninitialized values in ivas_mct_core_enc */
#define FIX_170_DTX_MASA                                /* Nokia: Fix issue 170, relaxing the use of DTX in MASA format */

                                                        /* ################## End DEVELOPMENT switches ######################### */
/* clang-format on */
+8 −1
Original line number Diff line number Diff line
@@ -480,7 +480,14 @@ ivas_error ivas_sba_dec_digest_tc(
        while ( nSamplesLeftForTD )
        {
            int16_t nSamplesToDecorr = min( nSamplesLeftForTD, default_frame );
#ifdef FIX_163_SBA_TD_DECORR_OPT
            if ( st_ivas->hDiracDecBin->hTdDecorr )
            {
#endif
                ivas_td_decorr_process( st_ivas->hDiracDecBin->hTdDecorr, p_tc, decorr_signal, nSamplesToDecorr );
#ifdef FIX_163_SBA_TD_DECORR_OPT
            }
#endif
            for ( ch_idx = 0; ch_idx < BINAURAL_CHANNELS; ch_idx++ )
            {
                decorr_signal[ch_idx] += nSamplesToDecorr;
+61 −29
Original line number Diff line number Diff line
@@ -101,10 +101,21 @@ ivas_error ivas_spar_dec_open(
    }

    /* TD decorr. */
#ifdef FIX_163_SBA_TD_DECORR_OPT
    if ( ( st_ivas->ivas_format == SBA_FORMAT ) && ( ( st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_MONO || st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_STEREO ) || ( st_ivas->hDecoderConfig->ivas_total_brate >= IVAS_256k && st_ivas->hDecoderConfig->output_config == AUDIO_CONFIG_FOA ) ) )
    {
        hSpar->hTdDecorr = NULL;
    }
    else
    {
#endif
        if ( ( error = ivas_td_decorr_dec_open( &hSpar->hTdDecorr, output_Fs, num_decor_chs + 1, 1 ) ) != IVAS_ERR_OK )
        {
            return error;
        }
#ifdef FIX_163_SBA_TD_DECORR_OPT
    }
#endif

    /* MD handle */
    if ( ( error = ivas_spar_md_dec_open( &hSpar->hMdDec, st_ivas->hDecoderConfig, num_channels_internal, sba_order_internal, st_ivas->sid_format ) ) != IVAS_ERR_OK )
@@ -736,8 +747,15 @@ static void ivas_spar_dec_MD(
            if ( hSpar->hMdDec->table_idx != table_idx )
            {
                hSpar->hMdDec->table_idx = table_idx;
#ifdef FIX_163_SBA_TD_DECORR_OPT
                if ( hSpar->hTdDecorr )
                {
#endif
                    hSpar->hTdDecorr->ducking_flag = ivas_spar_br_table_consts[table_idx].td_ducking;
#ifdef FIX_163_SBA_TD_DECORR_OPT
                }

#endif
                ivas_spar_md_dec_init( hSpar->hMdDec, hDecoderConfig, num_channels, sba_order );
            }
        }
@@ -1236,6 +1254,10 @@ void ivas_spar_dec_digest_tc(
        {
            int16_t nSamplesToDecorr = min( nSamplesLeftForTD, default_frame );

#ifdef FIX_163_SBA_TD_DECORR_OPT
            if ( hSpar->hTdDecorr )
            {
#endif
                ivas_td_decorr_process( hSpar->hTdDecorr, p_tc, pPcm_tmp, nSamplesToDecorr );
                if ( hSpar->hTdDecorr->num_apd_outputs >= ( nchan_internal - nchan_transport ) )
                {
@@ -1255,6 +1277,9 @@ void ivas_spar_dec_digest_tc(
                        mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - ch], p_tc[nchan_internal - 1 - ch], nSamplesToDecorr );
                    }
                }
#ifdef FIX_163_SBA_TD_DECORR_OPT
            }
#endif
            for ( ch = 0; ch < nchan_internal; ch++ )
            {
                p_tc[ch] += nSamplesToDecorr;
@@ -1317,6 +1342,10 @@ void ivas_spar_dec_upmixer(

    if ( hSpar->hMdDec->td_decorr_flag )
    {
#ifdef FIX_163_SBA_TD_DECORR_OPT
        if ( hSpar->hTdDecorr )
        {
#endif
            ivas_td_decorr_process( hSpar->hTdDecorr, st_ivas->hTcBuffer->tc, pPcm_tmp, output_frame );
            if ( hSpar->hTdDecorr->num_apd_outputs >= ( nchan_internal - nchan_transport ) )
            {
@@ -1336,6 +1365,9 @@ void ivas_spar_dec_upmixer(
                    mvr2r( pPcm_tmp[hSpar->hTdDecorr->num_apd_outputs - 1 - i], st_ivas->hTcBuffer->tc[nchan_internal - 1 - i], output_frame );
                }
            }
#ifdef FIX_163_SBA_TD_DECORR_OPT
        }
#endif
    }

    ivas_spar_dec_set_render_params( st_ivas, DEFAULT_JBM_CLDFB_TIMESLOTS );

lib_dec/ivas_spar_md_dec.c

100644 → 100755
+0 −0

File mode changed from 100644 to 100755.

+7 −0
Original line number Diff line number Diff line
@@ -897,11 +897,18 @@ static ivas_error configureEncoder(
        return IVAS_ERROR( IVAS_ERR_INVALID_SAMPLING_RATE, "8kHz input sampling rate is not supported in IVAS." );
    }

#ifdef FIX_170_DTX_MASA
    if ( hEncoderConfig->Opt_DTX_ON && hEncoderConfig->ivas_format != MONO_FORMAT &&
         ( ( hEncoderConfig->ivas_format == SBA_FORMAT && ivas_get_sba_num_TCs( hEncoderConfig->ivas_total_brate, 1 ) > 2 ) || // ToDo: support for 3+ TCs to be done
           hEncoderConfig->ivas_format == MC_FORMAT                                                                            // ToDo: TBD
           ) )
#else
    if ( hEncoderConfig->Opt_DTX_ON && hEncoderConfig->ivas_format != MONO_FORMAT &&
         ( ( hEncoderConfig->ivas_format == MASA_FORMAT && hEncoderConfig->ivas_total_brate > IVAS_128k ) ||                   // ToDo: remove the bitrate limitation
           ( hEncoderConfig->ivas_format == SBA_FORMAT && ivas_get_sba_num_TCs( hEncoderConfig->ivas_total_brate, 1 ) > 2 ) || // ToDo: support for 3+ TCs to be done
           hEncoderConfig->ivas_format == MC_FORMAT                                                                            // ToDo: TBD
           ) )
#endif
    {
        return IVAS_ERROR( IVAS_ERR_DTX_NOT_SUPPORTED, "DTX is not supported in this IVAS format and element mode." );
    }