Loading lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -4455,6 +4455,10 @@ ivas_error ivas_spar_md_enc_process( const int16_t nchan_inp, const int16_t sba_order, /* i : Ambisonic (SBA) order */ float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i : prior mixer_matrix */ #ifdef FIX_527_MONO_HEURISTICS , int16_t *dirac_mono_flag #endif ); void ivas_compute_spar_params( Loading lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -159,7 +159,7 @@ #define FIX_527_SBA_MONO_INPUT /* FhG: fix issue 527, artifacts in mono signals coded in SBA mode */ /*#define FIX_527_MONO_HEURISTICS*/ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading lib_enc/ivas_spar_encoder.c +175 −164 Original line number Diff line number Diff line Loading @@ -518,6 +518,7 @@ static ivas_error ivas_spar_enc_process( hodirac_flag = ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ); ivas_dirac_enc( st_ivas->hDirAC, hQMetaData, hMetaData, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, dtx_vad, hEncoderConfig->ivas_format, hodirac_flag ); #ifdef FIX_527_SBA_MONO_INPUT if ( hQMetaData->dirac_mono_flag ) { Loading Loading @@ -576,7 +577,12 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag == 0 ) { ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer ); ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer #ifdef FIX_527_MONO_HEURISTICS , &hQMetaData->dirac_mono_flag #endif ); } if ( hSpar->hMdEnc->spar_hoa_dirac2spar_md_flag ) Loading Loading @@ -624,7 +630,12 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag ) { ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer ); ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer #ifdef FIX_527_MONO_HEURISTICS , &hQMetaData->dirac_mono_flag #endif ); } #ifdef DEBUG_LBR_SBA Loading lib_enc/ivas_spar_md_enc.c +44 −2 Original line number Diff line number Diff line Loading @@ -566,6 +566,10 @@ ivas_error ivas_spar_md_enc_process( const int16_t nchan_inp, const int16_t sba_order, /* i : Ambisonic (SBA) order */ float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i : prior mixer_matrix */ #ifdef FIX_527_MONO_HEURISTICS , int16_t *dirac_mono_flag #endif ) { float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; Loading Loading @@ -1005,6 +1009,44 @@ ivas_error ivas_spar_md_enc_process( } } #ifdef FIX_527_MONO_HEURISTICS { *dirac_mono_flag = 1; for ( b = 0; b < SPAR_DIRAC_SPLIT_START_BAND; b++ ) { ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[b * bands_bw]; for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) { if ( hMdEnc->spar_md.band_coeffs[b].pred_quant_re[i] != 0.0f ) { *dirac_mono_flag = 0; } } for ( i = 0; i < num_ch - ndm; i++ ) { for ( j = 0; j < ndm - 1; j++ ) { if ( hMdEnc->spar_md.band_coeffs[0].C_quant_re[i][j] != 0.f ) { *dirac_mono_flag = 0; } } } for ( i = ndm; i < num_ch; i++ ) { if ( hMdEnc->spar_md.band_coeffs[0].P_re[i] != 0.f ) { *dirac_mono_flag = 0; } } } } #endif #ifdef DEBUGGING if ( dtx_vad == 1 ) { Loading Loading
lib_com/ivas_prot.h +4 −0 Original line number Diff line number Diff line Loading @@ -4455,6 +4455,10 @@ ivas_error ivas_spar_md_enc_process( const int16_t nchan_inp, const int16_t sba_order, /* i : Ambisonic (SBA) order */ float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i : prior mixer_matrix */ #ifdef FIX_527_MONO_HEURISTICS , int16_t *dirac_mono_flag #endif ); void ivas_compute_spar_params( Loading
lib_com/options.h +1 −1 Original line number Diff line number Diff line Loading @@ -159,7 +159,7 @@ #define FIX_527_SBA_MONO_INPUT /* FhG: fix issue 527, artifacts in mono signals coded in SBA mode */ /*#define FIX_527_MONO_HEURISTICS*/ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ Loading
lib_enc/ivas_spar_encoder.c +175 −164 Original line number Diff line number Diff line Loading @@ -518,6 +518,7 @@ static ivas_error ivas_spar_enc_process( hodirac_flag = ivas_get_hodirac_flag( ivas_total_brate, st_ivas->sba_analysis_order ); ivas_dirac_enc( st_ivas->hDirAC, hQMetaData, hMetaData, data_f, ppIn_FR_real, ppIn_FR_imag, input_frame, dtx_vad, hEncoderConfig->ivas_format, hodirac_flag ); #ifdef FIX_527_SBA_MONO_INPUT if ( hQMetaData->dirac_mono_flag ) { Loading Loading @@ -576,7 +577,12 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag == 0 ) { ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer ); ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer #ifdef FIX_527_MONO_HEURISTICS , &hQMetaData->dirac_mono_flag #endif ); } if ( hSpar->hMdEnc->spar_hoa_dirac2spar_md_flag ) Loading Loading @@ -624,7 +630,12 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hMdEnc->spar_hoa_md_flag ) { ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer ); ivas_spar_md_enc_process( hSpar->hMdEnc, hEncoderConfig, cov_real, cov_dtx_real, hMetaData, dtx_vad, nchan_inp, sba_order, hSpar->hFbMixer->prior_mixer #ifdef FIX_527_MONO_HEURISTICS , &hQMetaData->dirac_mono_flag #endif ); } #ifdef DEBUG_LBR_SBA Loading
lib_enc/ivas_spar_md_enc.c +44 −2 Original line number Diff line number Diff line Loading @@ -566,6 +566,10 @@ ivas_error ivas_spar_md_enc_process( const int16_t nchan_inp, const int16_t sba_order, /* i : Ambisonic (SBA) order */ float *prior_mixer[IVAS_MAX_FB_MIXER_OUT_CH][IVAS_MAX_SPAR_FB_MIXER_IN_CH] /* i : prior mixer_matrix */ #ifdef FIX_527_MONO_HEURISTICS , int16_t *dirac_mono_flag #endif ) { float pred_coeffs_re[IVAS_SPAR_MAX_CH - 1][IVAS_MAX_NUM_BANDS]; Loading Loading @@ -1005,6 +1009,44 @@ ivas_error ivas_spar_md_enc_process( } } #ifdef FIX_527_MONO_HEURISTICS { *dirac_mono_flag = 1; for ( b = 0; b < SPAR_DIRAC_SPLIT_START_BAND; b++ ) { ndm = hMdEnc->spar_md_cfg.num_dmx_chans_per_band[b * bands_bw]; ndec = hMdEnc->spar_md_cfg.num_decorr_per_band[b * bands_bw]; for ( i = 0; i < DIRAC_TO_SPAR_HBR_PRED_CHS; i++ ) { if ( hMdEnc->spar_md.band_coeffs[b].pred_quant_re[i] != 0.0f ) { *dirac_mono_flag = 0; } } for ( i = 0; i < num_ch - ndm; i++ ) { for ( j = 0; j < ndm - 1; j++ ) { if ( hMdEnc->spar_md.band_coeffs[0].C_quant_re[i][j] != 0.f ) { *dirac_mono_flag = 0; } } } for ( i = ndm; i < num_ch; i++ ) { if ( hMdEnc->spar_md.band_coeffs[0].P_re[i] != 0.f ) { *dirac_mono_flag = 0; } } } } #endif #ifdef DEBUGGING if ( dtx_vad == 1 ) { Loading