Loading lib_com/cnst.h +8 −0 Original line number Diff line number Diff line Loading @@ -2240,5 +2240,13 @@ enum VOIP_RTPDUMP }; #ifdef FIX_489_COV_SMOOTHING typedef enum _COV_SMOOTHING_TYPE { COV_SMOOTH_SPAR, COV_SMOOTH_MC } COV_SMOOTHING_TYPE; #endif /* clang-format on */ #endif /* CNST_H */ lib_com/ivas_cov_smooth.c +41 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,9 @@ #ifdef DEBUGGING #include "debug.h" #endif #ifdef FIX_489_COV_SMOOTHING #include "cnst.h" #endif #include "ivas_prot.h" #include "wmc_auto.h" #include "prot.h" Loading @@ -50,7 +53,12 @@ static void ivas_set_up_cov_smoothing( ivas_cov_smooth_state_t *hCovState, ivas_filterbank_t *pFb, const float max_update_rate, const int16_t min_pool_size, const int16_t min_pool_size #ifdef FIX_489_COV_SMOOTHING , const COV_SMOOTHING_TYPE smooth_mode /* i : flag multichannel vs SPAR */ #endif , const int32_t ivas_total_brate ) { int16_t j, k; Loading Loading @@ -88,7 +96,30 @@ static void ivas_set_up_cov_smoothing( } } } #ifdef FIX_489_COV_SMOOTHING else if ( smooth_mode == COV_SMOOTH_MC ) { for ( j = 0; j < pFb->filterbank_num_bands; j++ ) { float update_factor; update_factor = 0.0f; for ( k = 0; k < pFb->fb_bin_to_band.pFb_active_bins_per_band[j]; k++ ) { update_factor += pFb->fb_bin_to_band.pFb_bin_to_band[j][k]; } hCovState->pSmoothing_factor[j] = update_factor / min_pool_size; if ( hCovState->pSmoothing_factor[j] > max_update_rate ) { hCovState->pSmoothing_factor[j] = max_update_rate; } } } #endif else { for ( j = 0; j < pFb->filterbank_num_bands; j++ ) { float update_factor; Loading @@ -108,6 +139,8 @@ static void ivas_set_up_cov_smoothing( hCovState->pSmoothing_factor[j] = max_update_rate; } } } hCovState->prior_bank_idx = -1; return; Loading @@ -126,6 +159,9 @@ ivas_error ivas_spar_covar_smooth_enc_open( ivas_filterbank_t *pFb, /* i/o: FB handle */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC */ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ) { Loading Loading @@ -155,7 +191,11 @@ ivas_error ivas_spar_covar_smooth_enc_open( } #ifdef FIX_489_COV_SMOOTHING ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, smooth_mode, ivas_total_brate ); #else ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, ivas_total_brate ); #endif *hCovState_out = hCovState; Loading lib_com/ivas_prot.h +6 −0 Original line number Diff line number Diff line Loading @@ -4733,6 +4733,9 @@ ivas_error ivas_spar_covar_enc_open( const int32_t input_Fs, /* i : input sampling rate */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC*/ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ); Loading Loading @@ -4763,6 +4766,9 @@ ivas_error ivas_spar_covar_smooth_enc_open( ivas_filterbank_t *pFb, /* i/o: FB handle */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC*/ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ); Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,8 @@ #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 */ #define FIX_489_COV_SMOOTHING /* Dlb: Fix covariance smoothing for ParamUpmix */ #define FIX_485_STATIC_BUFFERS /* FhG: move static buffers in DirAC parameter estimator to the DirAC struct */ Loading lib_enc/ivas_enc_cov_handler.c +19 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,9 @@ ivas_error ivas_spar_covar_enc_open( const int32_t input_Fs, /* i : input sampling rate */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC */ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ) { Loading @@ -85,13 +88,25 @@ ivas_error ivas_spar_covar_enc_open( cov_smooth_cfg.max_bands = IVAS_MAX_NUM_BANDS; cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE; cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE; #ifdef FIX_489_COV_SMOOTHING if ( smooth_mode == COV_SMOOTH_MC ) { cov_smooth_cfg.max_update_rate = 1.0f; cov_smooth_cfg.min_pool_size = 20; } #else if ( nchan_inp == 3 ) /* to discriminate between SPAR and mc there could be a better solution */ { cov_smooth_cfg.max_update_rate = 1.0f; cov_smooth_cfg.min_pool_size = 20; } #endif #ifdef FIX_489_COV_SMOOTHING if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_state, &cov_smooth_cfg, pFb, nchan_inp, smooth_mode, ivas_total_brate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_state, &cov_smooth_cfg, pFb, nchan_inp, ivas_total_brate ) ) != IVAS_ERR_OK ) #endif { return error; } Loading @@ -99,7 +114,11 @@ ivas_error ivas_spar_covar_enc_open( cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE_DTX; cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE_DTX; #ifdef FIX_489_COV_SMOOTHING if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_dtx_state, &cov_smooth_cfg, pFb, nchan_inp, smooth_mode, ivas_total_brate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_dtx_state, &cov_smooth_cfg, pFb, nchan_inp, ivas_total_brate ) ) != IVAS_ERR_OK ) #endif { return error; } Loading Loading
lib_com/cnst.h +8 −0 Original line number Diff line number Diff line Loading @@ -2240,5 +2240,13 @@ enum VOIP_RTPDUMP }; #ifdef FIX_489_COV_SMOOTHING typedef enum _COV_SMOOTHING_TYPE { COV_SMOOTH_SPAR, COV_SMOOTH_MC } COV_SMOOTHING_TYPE; #endif /* clang-format on */ #endif /* CNST_H */
lib_com/ivas_cov_smooth.c +41 −1 Original line number Diff line number Diff line Loading @@ -35,6 +35,9 @@ #ifdef DEBUGGING #include "debug.h" #endif #ifdef FIX_489_COV_SMOOTHING #include "cnst.h" #endif #include "ivas_prot.h" #include "wmc_auto.h" #include "prot.h" Loading @@ -50,7 +53,12 @@ static void ivas_set_up_cov_smoothing( ivas_cov_smooth_state_t *hCovState, ivas_filterbank_t *pFb, const float max_update_rate, const int16_t min_pool_size, const int16_t min_pool_size #ifdef FIX_489_COV_SMOOTHING , const COV_SMOOTHING_TYPE smooth_mode /* i : flag multichannel vs SPAR */ #endif , const int32_t ivas_total_brate ) { int16_t j, k; Loading Loading @@ -88,7 +96,30 @@ static void ivas_set_up_cov_smoothing( } } } #ifdef FIX_489_COV_SMOOTHING else if ( smooth_mode == COV_SMOOTH_MC ) { for ( j = 0; j < pFb->filterbank_num_bands; j++ ) { float update_factor; update_factor = 0.0f; for ( k = 0; k < pFb->fb_bin_to_band.pFb_active_bins_per_band[j]; k++ ) { update_factor += pFb->fb_bin_to_band.pFb_bin_to_band[j][k]; } hCovState->pSmoothing_factor[j] = update_factor / min_pool_size; if ( hCovState->pSmoothing_factor[j] > max_update_rate ) { hCovState->pSmoothing_factor[j] = max_update_rate; } } } #endif else { for ( j = 0; j < pFb->filterbank_num_bands; j++ ) { float update_factor; Loading @@ -108,6 +139,8 @@ static void ivas_set_up_cov_smoothing( hCovState->pSmoothing_factor[j] = max_update_rate; } } } hCovState->prior_bank_idx = -1; return; Loading @@ -126,6 +159,9 @@ ivas_error ivas_spar_covar_smooth_enc_open( ivas_filterbank_t *pFb, /* i/o: FB handle */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC */ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ) { Loading Loading @@ -155,7 +191,11 @@ ivas_error ivas_spar_covar_smooth_enc_open( } #ifdef FIX_489_COV_SMOOTHING ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, smooth_mode, ivas_total_brate ); #else ivas_set_up_cov_smoothing( hCovState, pFb, cov_smooth_cfg->max_update_rate, cov_smooth_cfg->min_pool_size, ivas_total_brate ); #endif *hCovState_out = hCovState; Loading
lib_com/ivas_prot.h +6 −0 Original line number Diff line number Diff line Loading @@ -4733,6 +4733,9 @@ ivas_error ivas_spar_covar_enc_open( const int32_t input_Fs, /* i : input sampling rate */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC*/ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ); Loading Loading @@ -4763,6 +4766,9 @@ ivas_error ivas_spar_covar_smooth_enc_open( ivas_filterbank_t *pFb, /* i/o: FB handle */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC*/ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ); Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,8 @@ #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 */ #define FIX_489_COV_SMOOTHING /* Dlb: Fix covariance smoothing for ParamUpmix */ #define FIX_485_STATIC_BUFFERS /* FhG: move static buffers in DirAC parameter estimator to the DirAC struct */ Loading
lib_enc/ivas_enc_cov_handler.c +19 −0 Original line number Diff line number Diff line Loading @@ -68,6 +68,9 @@ ivas_error ivas_spar_covar_enc_open( const int32_t input_Fs, /* i : input sampling rate */ const int16_t nchan_inp /* i : number of input channels */ , #ifdef FIX_489_COV_SMOOTHING COV_SMOOTHING_TYPE smooth_mode, /* i : Smooth covariance for SPAR or MC */ #endif const int32_t ivas_total_brate /* i : IVAS total bitrate */ ) { Loading @@ -85,13 +88,25 @@ ivas_error ivas_spar_covar_enc_open( cov_smooth_cfg.max_bands = IVAS_MAX_NUM_BANDS; cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE; cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE; #ifdef FIX_489_COV_SMOOTHING if ( smooth_mode == COV_SMOOTH_MC ) { cov_smooth_cfg.max_update_rate = 1.0f; cov_smooth_cfg.min_pool_size = 20; } #else if ( nchan_inp == 3 ) /* to discriminate between SPAR and mc there could be a better solution */ { cov_smooth_cfg.max_update_rate = 1.0f; cov_smooth_cfg.min_pool_size = 20; } #endif #ifdef FIX_489_COV_SMOOTHING if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_state, &cov_smooth_cfg, pFb, nchan_inp, smooth_mode, ivas_total_brate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_state, &cov_smooth_cfg, pFb, nchan_inp, ivas_total_brate ) ) != IVAS_ERR_OK ) #endif { return error; } Loading @@ -99,7 +114,11 @@ ivas_error ivas_spar_covar_enc_open( cov_smooth_cfg.max_update_rate = MAX_UPDATE_RATE_DTX; cov_smooth_cfg.min_pool_size = MIN_POOL_SIZE_DTX; #ifdef FIX_489_COV_SMOOTHING if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_dtx_state, &cov_smooth_cfg, pFb, nchan_inp, smooth_mode, ivas_total_brate ) ) != IVAS_ERR_OK ) #else if ( ( error = ivas_spar_covar_smooth_enc_open( &hCovState->pCov_dtx_state, &cov_smooth_cfg, pFb, nchan_inp, ivas_total_brate ) ) != IVAS_ERR_OK ) #endif { return error; } Loading