Loading lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -153,6 +153,8 @@ #define SBA2MONO /* FhG: Issue 365: Adapt processing of SBA mono output to be in line with stereo output (less delay, lower complexity) */ #define NOKIA_PARAMBIN_REQULARIZATION /* Nokia: Contribution - Configured reqularization factor for parametric binauralizer. */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif lib_rend/ivas_dirac_dec_binaural_functions.c +94 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,9 @@ static void matrixMul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Ai static void matrixTransp2Mul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); #ifdef NOKIA_PARAMBIN_REQULARIZATION static float configure_reqularization_factor( const IVAS_FORMAT ivas_format, const int32_t ivas_brate ); #endif /*------------------------------------------------------------------------- * ivas_dirac_dec_init_binaural_data() Loading Loading @@ -268,6 +271,10 @@ ivas_error ivas_dirac_dec_init_binaural_data( ivas_td_decorr_dec_close( &( hBinaural->hTdDecorr ) ); } #ifdef NOKIA_PARAMBIN_REQULARIZATION hBinaural->reqularizationFactor = configure_reqularization_factor( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); #endif st_ivas->hDiracDecBin = hBinaural; return IVAS_ERR_OK; Loading Loading @@ -1064,11 +1071,19 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( CrEneR = 0.0f; /* Formulate main processing matrix M */ #ifdef NOKIA_PARAMBIN_REQULARIZATION formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], h->ChCrossRe[bin], h->ChCrossIm[bin], h->ChEneOut[0][bin], h->ChEneOut[1][bin], h->ChCrossReOut[bin], h->ChCrossImOut[bin], prototypeMtx, Mre, Mim, h->reqularizationFactor ); #else formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], h->ChCrossRe[bin], h->ChCrossIm[bin], h->ChEneOut[0][bin], h->ChEneOut[1][bin], h->ChCrossReOut[bin], h->ChCrossImOut[bin], prototypeMtx, Mre, Mim, 1.0f ); #endif /* Load estimated covariance matrix to the [2][2] matrix form */ CxRe[0][0] = h->ChEne[0][bin]; Loading Loading @@ -1854,3 +1869,82 @@ static void hrtfShGetHrtf( return; } #ifdef NOKIA_PARAMBIN_REQULARIZATION /*------------------------------------------------------------------------- * configure_reqularization_factor() * * Configure regularization factor for the mixing matrix generation of the * parametric binauralizer using IVAS codec format and current bitrate. *------------------------------------------------------------------------*/ /*! r: Configured reqularization factor value to be set. */ static float configure_reqularization_factor( const IVAS_FORMAT ivas_format, /* i: IVAS codec format in use */ const int32_t ivas_brate ) /* i: Current IVAS bitrate */ { float reqularizationFactor; reqularizationFactor = 1.0f; /* Default value */ if ( ivas_format == MASA_FORMAT ) { if ( ivas_brate >= IVAS_256k ) { reqularizationFactor = 0.2f; } else if ( ivas_brate == IVAS_192k ) { reqularizationFactor = 0.3f; } else if ( ivas_brate == IVAS_160k ) { reqularizationFactor = 0.4f; } else if ( ivas_brate == IVAS_128k ) { reqularizationFactor = 0.5f; } else if ( ivas_brate == IVAS_96k ) { reqularizationFactor = 0.6f; } else if ( ivas_brate >= IVAS_64k ) { reqularizationFactor = 0.8f; } else { reqularizationFactor = 1.0f; } } if ( ivas_format == MC_FORMAT ) /* This is always McMASA for parametric binauralizer. */ { if ( ivas_brate >= IVAS_96k ) { reqularizationFactor = 0.3f; } else if ( ivas_brate >= IVAS_80k ) { reqularizationFactor = 0.5f; } else if ( ivas_brate >= IVAS_64k ) { reqularizationFactor = 0.7f; } else if ( ivas_brate >= IVAS_48k ) { reqularizationFactor = 0.8f; } else { reqularizationFactor = 1.0f; } } /* For SBA and parametric ISM, currently in default value of 1.0f. */ return reqularizationFactor; } #endif lib_rend/ivas_stat_rend.h +3 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,9 @@ typedef struct ivas_dirac_dec_binaural_data_structure uint16_t useSubframeMode; /* 0 = process in 20 ms frames, 1 = process in 5 ms subframes */ uint16_t useTdDecorr; ivas_td_decorr_state_t *hTdDecorr; #ifdef NOKIA_PARAMBIN_REQULARIZATION float reqularizationFactor; #endif } DIRAC_DEC_BIN_DATA, *DIRAC_DEC_BIN_HANDLE; Loading Loading
lib_com/options.h +2 −0 Original line number Diff line number Diff line Loading @@ -153,6 +153,8 @@ #define SBA2MONO /* FhG: Issue 365: Adapt processing of SBA mono output to be in line with stereo output (less delay, lower complexity) */ #define NOKIA_PARAMBIN_REQULARIZATION /* Nokia: Contribution - Configured reqularization factor for parametric binauralizer. */ /* ################## End DEVELOPMENT switches ######################### */ /* clang-format on */ #endif
lib_rend/ivas_dirac_dec_binaural_functions.c +94 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,9 @@ static void matrixMul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Ai static void matrixTransp2Mul( float Are[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Aim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bre[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float Bim[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outRe[BINAURAL_CHANNELS][BINAURAL_CHANNELS], float outIm[BINAURAL_CHANNELS][BINAURAL_CHANNELS] ); #ifdef NOKIA_PARAMBIN_REQULARIZATION static float configure_reqularization_factor( const IVAS_FORMAT ivas_format, const int32_t ivas_brate ); #endif /*------------------------------------------------------------------------- * ivas_dirac_dec_init_binaural_data() Loading Loading @@ -268,6 +271,10 @@ ivas_error ivas_dirac_dec_init_binaural_data( ivas_td_decorr_dec_close( &( hBinaural->hTdDecorr ) ); } #ifdef NOKIA_PARAMBIN_REQULARIZATION hBinaural->reqularizationFactor = configure_reqularization_factor( st_ivas->ivas_format, st_ivas->hDecoderConfig->ivas_total_brate ); #endif st_ivas->hDiracDecBin = hBinaural; return IVAS_ERR_OK; Loading Loading @@ -1064,11 +1071,19 @@ static void ivas_dirac_dec_binaural_determine_processing_matrices( CrEneR = 0.0f; /* Formulate main processing matrix M */ #ifdef NOKIA_PARAMBIN_REQULARIZATION formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], h->ChCrossRe[bin], h->ChCrossIm[bin], h->ChEneOut[0][bin], h->ChEneOut[1][bin], h->ChCrossReOut[bin], h->ChCrossImOut[bin], prototypeMtx, Mre, Mim, h->reqularizationFactor ); #else formulate2x2MixingMatrix( h->ChEne[0][bin], h->ChEne[1][bin], h->ChCrossRe[bin], h->ChCrossIm[bin], h->ChEneOut[0][bin], h->ChEneOut[1][bin], h->ChCrossReOut[bin], h->ChCrossImOut[bin], prototypeMtx, Mre, Mim, 1.0f ); #endif /* Load estimated covariance matrix to the [2][2] matrix form */ CxRe[0][0] = h->ChEne[0][bin]; Loading Loading @@ -1854,3 +1869,82 @@ static void hrtfShGetHrtf( return; } #ifdef NOKIA_PARAMBIN_REQULARIZATION /*------------------------------------------------------------------------- * configure_reqularization_factor() * * Configure regularization factor for the mixing matrix generation of the * parametric binauralizer using IVAS codec format and current bitrate. *------------------------------------------------------------------------*/ /*! r: Configured reqularization factor value to be set. */ static float configure_reqularization_factor( const IVAS_FORMAT ivas_format, /* i: IVAS codec format in use */ const int32_t ivas_brate ) /* i: Current IVAS bitrate */ { float reqularizationFactor; reqularizationFactor = 1.0f; /* Default value */ if ( ivas_format == MASA_FORMAT ) { if ( ivas_brate >= IVAS_256k ) { reqularizationFactor = 0.2f; } else if ( ivas_brate == IVAS_192k ) { reqularizationFactor = 0.3f; } else if ( ivas_brate == IVAS_160k ) { reqularizationFactor = 0.4f; } else if ( ivas_brate == IVAS_128k ) { reqularizationFactor = 0.5f; } else if ( ivas_brate == IVAS_96k ) { reqularizationFactor = 0.6f; } else if ( ivas_brate >= IVAS_64k ) { reqularizationFactor = 0.8f; } else { reqularizationFactor = 1.0f; } } if ( ivas_format == MC_FORMAT ) /* This is always McMASA for parametric binauralizer. */ { if ( ivas_brate >= IVAS_96k ) { reqularizationFactor = 0.3f; } else if ( ivas_brate >= IVAS_80k ) { reqularizationFactor = 0.5f; } else if ( ivas_brate >= IVAS_64k ) { reqularizationFactor = 0.7f; } else if ( ivas_brate >= IVAS_48k ) { reqularizationFactor = 0.8f; } else { reqularizationFactor = 1.0f; } } /* For SBA and parametric ISM, currently in default value of 1.0f. */ return reqularizationFactor; } #endif
lib_rend/ivas_stat_rend.h +3 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,9 @@ typedef struct ivas_dirac_dec_binaural_data_structure uint16_t useSubframeMode; /* 0 = process in 20 ms frames, 1 = process in 5 ms subframes */ uint16_t useTdDecorr; ivas_td_decorr_state_t *hTdDecorr; #ifdef NOKIA_PARAMBIN_REQULARIZATION float reqularizationFactor; #endif } DIRAC_DEC_BIN_DATA, *DIRAC_DEC_BIN_HANDLE; Loading