diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index d17732b66c8c5fbcae9829e3b961be0a50708424..2792efc1963d0578d932c6952be61d65ab88ad42 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -396,7 +396,7 @@ ivas_error ivas_dirac_sba_config( { return error; } -#ifdef HODIRAC_FIX_BR_SWITCHING_DTX +#if defined( HODIRAC_FIX_BR_SWITCHING_DTX ) && !defined( FIX_DTX_428 ) if ( sba_order > 1 && sba_total_brate > IVAS_256k ) { int16_t dir, j; diff --git a/lib_com/options.h b/lib_com/options.h old mode 100644 new mode 100755 index b5cefac8e60187ee55802e5d583ae8392cb20401..556b6f79b027a4be7bea4c59bc71d2f96a5b495c --- a/lib_com/options.h +++ b/lib_com/options.h @@ -222,6 +222,9 @@ #define VARIABLE_SPEED_DECODING /* FhG: variable speed decoding employing the JBM functioniality */ #define JBM_TSM_ON_TCS /* FhG: run the TSM part of JBM on the TCs instead of the final output pcm waveforms */ + +#define FIX_DTX_428 /* FhG: fix for issue 428, crash with DTX and bitrate switching */ + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 35d22fe461cda1a059825ee4e0bf7ee4629fb15c..d013df5f4e5d064524c42e057eda823c9ad51b4b 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -121,6 +121,10 @@ ivas_error ivas_sba_enc_reconfigure( SPAR_ENC_HANDLE hSpar; int16_t analysis_order_old; int16_t spar_reconfig_flag; +#ifdef FIX_DTX_428 + int16_t nbands_old; + int16_t ndir_old; +#endif spar_reconfig_flag = 0; nchan_transport_old = st_ivas->nchan_transport; @@ -128,6 +132,10 @@ ivas_error ivas_sba_enc_reconfigure( nSCE_old = st_ivas->nSCE; st_ivas->sba_analysis_order = ivas_sba_get_analysis_order( ivas_total_brate, hEncoderConfig->sba_order ); analysis_order_old = ivas_sba_get_analysis_order( hEncoderConfig->last_ivas_total_brate, hEncoderConfig->sba_order ); +#ifdef FIX_DTX_428 + nbands_old = st_ivas->hQMetaData->q_direction->cfg.nbands; + ndir_old = st_ivas->hQMetaData->no_directions; +#endif if ( analysis_order_old != st_ivas->sba_analysis_order ) { @@ -246,6 +254,24 @@ ivas_error ivas_sba_enc_reconfigure( { return error; } +#ifdef FIX_DTX_428 + if ( st_ivas->hQMetaData->q_direction->cfg.nbands != nbands_old || st_ivas->hQMetaData->no_directions != ndir_old ) + { + int16_t dir, j, i; + IVAS_QDIRECTION *q_direction = st_ivas->hQMetaData->q_direction; + for ( dir = 0; dir < st_ivas->hQMetaData->no_directions; dir++ ) + { + for ( j = 0; j < q_direction[dir].cfg.nbands; j++ ) + { + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + q_direction[dir].band_data[j].energy_ratio_index[i] = 0; + q_direction[dir].band_data[j].energy_ratio_index_mod[i] = 0; + } + } + } + } +#endif mvs2s( hDirAC->dirac_to_spar_md_bands, hSpar->dirac_to_spar_md_bands, DIRAC_MAX_NBANDS ); hSpar->enc_param_start_band = hDirAC->hConfig->enc_param_start_band; /*-----------------------------------------------------------------*