From b5768aafea625f39e808520fe49fbefab77def51 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 12 May 2023 13:09:57 +0200 Subject: [PATCH 1/4] initialize DirAC MD arrays on every change of the number of bands or directions --- lib_com/ivas_dirac_com.c | 14 +++++++------- lib_com/options.h | 2 ++ lib_enc/ivas_sba_enc.c | 29 +++++++++++++++++++++++++++-- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index d17732b66c..15eb3e747b 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -197,12 +197,12 @@ ivas_error ivas_dirac_config( { ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, - (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), + ( int16_t )( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, hFbMdft ); } else { - ivas_dirac_config_bands( band_grouping, hConfig->nbands, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), + ivas_dirac_config_bands( band_grouping, hConfig->nbands, ( int16_t )( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), NULL, 0, 0, hFbMdft ); } @@ -367,7 +367,7 @@ ivas_error ivas_dirac_sba_config( } nbands_coded = nbands; - if ( sba_total_brate <= (int32_t) ( (float) IVAS_192k / (float) SPAR_DIRAC_SPLIT_START_BAND ) ) + if ( sba_total_brate <= ( int32_t )( (float) IVAS_192k / (float) SPAR_DIRAC_SPLIT_START_BAND ) ) { hQMetaData->useLowerBandRes = 1; nbands_coded = nbands / 2 + nbands % 2; @@ -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; @@ -462,7 +462,7 @@ ivas_error ivas_dirac_sba_config( } else { - hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->bits_frame_nominal = ( int16_t )( sba_total_brate / FRAMES_PER_SEC ); hQMetaData->metadata_max_bits = MAX16B; /* no limit */ } @@ -539,7 +539,7 @@ ivas_error ivas_dirac_sba_config( *nCPE = ( ( *nchan_transport + 1 ) / 2 ); *nSCE = 0; - hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->bits_frame_nominal = ( int16_t )( sba_total_brate / FRAMES_PER_SEC ); hQMetaData->metadata_max_bits = MAX16B; /* no limit */ for ( i = 0; i < hQMetaData->no_directions; i++ ) @@ -586,7 +586,7 @@ ivas_error ivas_dirac_sba_config( } else { - hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->bits_frame_nominal = ( int16_t )( sba_total_brate / FRAMES_PER_SEC ); hQMetaData->metadata_max_bits = 250; } diff --git a/lib_com/options.h b/lib_com/options.h index e68aca0ef1..c6b7e8c4e5 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -216,6 +216,8 @@ #define COMPLEXITY_LEVEL_INDICATION +#define FIX_DTX_428 + /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 35d22fe461..72e1f69985 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -84,10 +84,10 @@ void ivas_sba_getTCs( int16_t tmp[L_FRAME48k]; char file_name[50] = { 0 }; - sprintf( file_name, "./res/ivas_dirac_enc_%d.%d.pcm", n, (int16_t) ( input_frame * 0.05 ) ); + sprintf( file_name, "./res/ivas_dirac_enc_%d.%d.pcm", n, ( int16_t )( input_frame * 0.05 ) ); for ( int16_t i = 0; i < input_frame; i++ ) { - tmp[i] = (int16_t) ( sba_data[n][i] + 0.5f ); + tmp[i] = ( int16_t )( sba_data[n][i] + 0.5f ); } dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, file_name ); } @@ -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,23 @@ 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; + for ( dir = 0; dir < st_ivas->hQMetaData->no_directions; dir++ ) + { + for ( j = 0; j < st_ivas->hQMetaData->q_direction[dir].cfg.nbands; j++ ) + { + for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) + { + st_ivas->hQMetaData->q_direction[dir].band_data[j].energy_ratio_index[i] = 0; + st_ivas->hQMetaData->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; /*-----------------------------------------------------------------* -- GitLab From b3f5259a2dc00409f5efffa74adc1fc6952d8e60 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Fri, 12 May 2023 13:23:35 +0200 Subject: [PATCH 2/4] fix formatting --- lib_com/ivas_dirac_com.c | 12 ++++++------ lib_enc/ivas_sba_enc.c | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib_com/ivas_dirac_com.c b/lib_com/ivas_dirac_com.c index 15eb3e747b..2792efc196 100644 --- a/lib_com/ivas_dirac_com.c +++ b/lib_com/ivas_dirac_com.c @@ -197,12 +197,12 @@ ivas_error ivas_dirac_config( { ivas_dirac_config_bands( band_grouping, IVAS_MAX_NUM_BANDS, - ( int16_t )( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), + (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), dirac_to_spar_md_bands, hQMetaData->useLowerBandRes, hConfig->enc_param_start_band, hFbMdft ); } else { - ivas_dirac_config_bands( band_grouping, hConfig->nbands, ( int16_t )( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), + ivas_dirac_config_bands( band_grouping, hConfig->nbands, (int16_t) ( Fs * INV_CLDFB_BANDWIDTH + 0.5f ), NULL, 0, 0, hFbMdft ); } @@ -367,7 +367,7 @@ ivas_error ivas_dirac_sba_config( } nbands_coded = nbands; - if ( sba_total_brate <= ( int32_t )( (float) IVAS_192k / (float) SPAR_DIRAC_SPLIT_START_BAND ) ) + if ( sba_total_brate <= (int32_t) ( (float) IVAS_192k / (float) SPAR_DIRAC_SPLIT_START_BAND ) ) { hQMetaData->useLowerBandRes = 1; nbands_coded = nbands / 2 + nbands % 2; @@ -462,7 +462,7 @@ ivas_error ivas_dirac_sba_config( } else { - hQMetaData->bits_frame_nominal = ( int16_t )( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); hQMetaData->metadata_max_bits = MAX16B; /* no limit */ } @@ -539,7 +539,7 @@ ivas_error ivas_dirac_sba_config( *nCPE = ( ( *nchan_transport + 1 ) / 2 ); *nSCE = 0; - hQMetaData->bits_frame_nominal = ( int16_t )( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); hQMetaData->metadata_max_bits = MAX16B; /* no limit */ for ( i = 0; i < hQMetaData->no_directions; i++ ) @@ -586,7 +586,7 @@ ivas_error ivas_dirac_sba_config( } else { - hQMetaData->bits_frame_nominal = ( int16_t )( sba_total_brate / FRAMES_PER_SEC ); + hQMetaData->bits_frame_nominal = (int16_t) ( sba_total_brate / FRAMES_PER_SEC ); hQMetaData->metadata_max_bits = 250; } diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 72e1f69985..9547564d37 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -84,10 +84,10 @@ void ivas_sba_getTCs( int16_t tmp[L_FRAME48k]; char file_name[50] = { 0 }; - sprintf( file_name, "./res/ivas_dirac_enc_%d.%d.pcm", n, ( int16_t )( input_frame * 0.05 ) ); + sprintf( file_name, "./res/ivas_dirac_enc_%d.%d.pcm", n, (int16_t) ( input_frame * 0.05 ) ); for ( int16_t i = 0; i < input_frame; i++ ) { - tmp[i] = ( int16_t )( sba_data[n][i] + 0.5f ); + tmp[i] = (int16_t) ( sba_data[n][i] + 0.5f ); } dbgwrite( tmp, sizeof( int16_t ), input_frame, 1, file_name ); } -- GitLab From 2d409d26efd2d901e9c5d831b7cbcaf37b036d3e Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 May 2023 11:27:33 +0200 Subject: [PATCH 3/4] add description to the define --- lib_com/options.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib_com/options.h b/lib_com/options.h index 941aa03d65..556b6f79b0 100755 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -223,7 +223,7 @@ #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 +#define FIX_DTX_428 /* FhG: fix for issue 428, crash with DTX and bitrate switching */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ -- GitLab From 4e65c8a2a0d6862abc2e43f0e08182c29e6ee013 Mon Sep 17 00:00:00 2001 From: Dominik Weckbecker Date: Mon, 15 May 2023 11:42:35 +0200 Subject: [PATCH 4/4] optimize bugfix code --- lib_enc/ivas_sba_enc.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib_enc/ivas_sba_enc.c b/lib_enc/ivas_sba_enc.c index 9547564d37..d013df5f4e 100644 --- a/lib_enc/ivas_sba_enc.c +++ b/lib_enc/ivas_sba_enc.c @@ -258,14 +258,15 @@ ivas_error ivas_sba_enc_reconfigure( 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 < st_ivas->hQMetaData->q_direction[dir].cfg.nbands; j++ ) + for ( j = 0; j < q_direction[dir].cfg.nbands; j++ ) { for ( i = 0; i < MAX_PARAM_SPATIAL_SUBFRAMES; i++ ) { - st_ivas->hQMetaData->q_direction[dir].band_data[j].energy_ratio_index[i] = 0; - st_ivas->hQMetaData->q_direction[dir].band_data[j].energy_ratio_index_mod[i] = 0; + q_direction[dir].band_data[j].energy_ratio_index[i] = 0; + q_direction[dir].band_data[j].energy_ratio_index_mod[i] = 0; } } } -- GitLab