Loading lib_com/ivas_pca_tools.c +8 −6 Original line number Diff line number Diff line Loading @@ -660,7 +660,9 @@ static void norm_quat( // however the detection of zero norm is done here for general code robustness set_zero( q, 4 ); q[0] = 1.f; } else { } else { norm_q = inv_sqrt( norm_q ); for ( i = 0; i < IVAS_PCA_INTERP; i++ ) { Loading lib_com/ivas_prot.h +5 −0 Original line number Diff line number Diff line Loading @@ -4364,7 +4364,12 @@ void ivas_pca_enc( BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ float *data_f[8], /* i : input/transformed audio channels */ const int16_t input_frame, /* i : input frame length */ #ifdef PCA_ENH const int16_t n_channels, /* i : number of channels */ int16_t is_transient /* i : transient detector flag */ #else const int16_t n_channels /* i : number of channels */ #endif ); void ivas_pca_read_bits( Loading lib_enc/ivas_pca_enc.c +50 −6 Original line number Diff line number Diff line Loading @@ -49,7 +49,9 @@ #define IVAS_PCA_SM_FAC 0.0234375f #define IVAS_PCA_N_ITER_QR 10 #ifdef PCA_ENH #define SILENT_CHANNEL_THRES 100 #endif /*-----------------------------------------------------------------------* * Local function definitions Loading Loading @@ -270,12 +272,19 @@ void ivas_pca_enc( BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ float *data_f[8], /* i : input/transformed audio channels */ const int16_t input_frame, /* i : input frame length */ #ifdef PCA_ENH const int16_t n_channels, /* i : number of channels */ int16_t is_transient /* i : transient detector flag */ #else const int16_t n_channels /* i : number of channels */ #endif ) { int16_t i, j, k, l; #ifndef PCA_ENH int16_t len_subfr; float r[FOA_CHANNELS * FOA_CHANNELS]; /* covariance matrix */ #endif float eigVec[FOA_CHANNELS *FOA_CHANNELS]; /* eigenvectors in current frame */ float eigVec_tmp[FOA_CHANNELS * FOA_CHANNELS]; /* transpose / tmp matrix for permutation */ float cost_mtx[FOA_CHANNELS * FOA_CHANNELS]; /* cost matrix */ Loading @@ -291,7 +300,9 @@ void ivas_pca_enc( float fac_D, sum_D; float fac_cost; float r_sm[16]; #ifndef PCA_ENH float alpha; #endif float D_tmp[FOA_CHANNELS]; int32_t ivas_total_brate; float min_dot, dotl, dotr; Loading @@ -305,10 +316,8 @@ void ivas_pca_enc( ivas_total_brate = hEncoderConfig->ivas_total_brate; #ifndef PCA_ENH /* if PCA is disabled, just pass-through */ #ifdef PCA_ENH push_next_indice( hMetaData, PCA_MODE_INACTIVE, 1 ); #else if ( hEncoderConfig->Opt_PCA_ON == 0 ) { /* write by-pass indicator */ Loading Loading @@ -363,6 +372,13 @@ void ivas_pca_enc( /*-----------------------------------------------------------------* * Covariance *-----------------------------------------------------------------*/ #ifdef PCA_ENH for ( k = 0; k < FOA_CHANNELS; k++ ) { ptr_sig[k] = &data_f[k][0]; } cov_subfr( ptr_sig, r_sm, FOA_CHANNELS, input_frame ); #else len_subfr = input_frame / 2; Loading @@ -382,7 +398,7 @@ void ivas_pca_enc( hPCA->old_r_sm[k] = r_sm[k]; } } #endif /* conditioning */ for ( k = 0; k < FOA_CHANNELS; k++ ) { Loading Loading @@ -432,7 +448,11 @@ void ivas_pca_enc( dist_alt = 0.0; for ( k = 0; k < FOA_CHANNELS; k++ ) { #ifdef PCA_ENH dist_alt += logf( r_sm[k * FOA_CHANNELS + k] * fac_D + 1e-8f ); #else dist_alt += logf( r[k * FOA_CHANNELS + k] * fac_D + 1e-8f ); #endif dist_alt -= logf( D[k] + 1e-8f ); } Loading @@ -440,7 +460,11 @@ void ivas_pca_enc( * Eigenvector alignment *-----------------------------------------------------------------*/ #ifdef PCA_ENH if ( 1 ) #else if ( hPCA->prev_bypass_decision == PCA_MODE_ACTIVE ) #endif { /* compute absolute cost matrix */ for ( k = 0; k < n_channels; k++ ) /* column */ Loading Loading @@ -544,6 +568,12 @@ void ivas_pca_enc( min_dot2 = qr[0]; bypass_decision = PCA_MODE_ACTIVE; #ifdef PCA_ENH if ( is_transient ) { bypass_decision = PCA_MODE_INACTIVE; } #endif if ( dist_alt < IVAS_PCA_THRES_DIST_ALT ) { bypass_decision = PCA_MODE_INACTIVE; Loading @@ -557,6 +587,20 @@ void ivas_pca_enc( bypass_decision = PCA_MODE_INACTIVE; } #ifdef PCA_ENH if ( hEncoderConfig->sba_planar ) { bypass_decision = PCA_MODE_INACTIVE; } for ( k = 0; k < FOA_CHANNELS; k++ ) { if ( r_sm[k * FOA_CHANNELS + k] < SILENT_CHANNEL_THRES ) { bypass_decision = PCA_MODE_INACTIVE; } } #endif /* if PCA is inactive */ if ( bypass_decision == PCA_MODE_INACTIVE ) { Loading lib_enc/ivas_spar_encoder.c +5 −0 Original line number Diff line number Diff line Loading @@ -850,7 +850,12 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hPCA != NULL ) { #ifdef PCA_ENH ivas_pca_enc( hEncoderConfig, hSpar->hPCA, hMetaData, p_pcm_tmp, input_frame, FOA_CHANNELS, transient_det[0] ); #else ivas_pca_enc( hEncoderConfig, hSpar->hPCA, hMetaData, p_pcm_tmp, input_frame, FOA_CHANNELS ); #endif } else { Loading Loading
lib_com/ivas_pca_tools.c +8 −6 Original line number Diff line number Diff line Loading @@ -660,7 +660,9 @@ static void norm_quat( // however the detection of zero norm is done here for general code robustness set_zero( q, 4 ); q[0] = 1.f; } else { } else { norm_q = inv_sqrt( norm_q ); for ( i = 0; i < IVAS_PCA_INTERP; i++ ) { Loading
lib_com/ivas_prot.h +5 −0 Original line number Diff line number Diff line Loading @@ -4364,7 +4364,12 @@ void ivas_pca_enc( BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ float *data_f[8], /* i : input/transformed audio channels */ const int16_t input_frame, /* i : input frame length */ #ifdef PCA_ENH const int16_t n_channels, /* i : number of channels */ int16_t is_transient /* i : transient detector flag */ #else const int16_t n_channels /* i : number of channels */ #endif ); void ivas_pca_read_bits( Loading
lib_enc/ivas_pca_enc.c +50 −6 Original line number Diff line number Diff line Loading @@ -49,7 +49,9 @@ #define IVAS_PCA_SM_FAC 0.0234375f #define IVAS_PCA_N_ITER_QR 10 #ifdef PCA_ENH #define SILENT_CHANNEL_THRES 100 #endif /*-----------------------------------------------------------------------* * Local function definitions Loading Loading @@ -270,12 +272,19 @@ void ivas_pca_enc( BSTR_ENC_HANDLE hMetaData, /* i/o: MetaData handle */ float *data_f[8], /* i : input/transformed audio channels */ const int16_t input_frame, /* i : input frame length */ #ifdef PCA_ENH const int16_t n_channels, /* i : number of channels */ int16_t is_transient /* i : transient detector flag */ #else const int16_t n_channels /* i : number of channels */ #endif ) { int16_t i, j, k, l; #ifndef PCA_ENH int16_t len_subfr; float r[FOA_CHANNELS * FOA_CHANNELS]; /* covariance matrix */ #endif float eigVec[FOA_CHANNELS *FOA_CHANNELS]; /* eigenvectors in current frame */ float eigVec_tmp[FOA_CHANNELS * FOA_CHANNELS]; /* transpose / tmp matrix for permutation */ float cost_mtx[FOA_CHANNELS * FOA_CHANNELS]; /* cost matrix */ Loading @@ -291,7 +300,9 @@ void ivas_pca_enc( float fac_D, sum_D; float fac_cost; float r_sm[16]; #ifndef PCA_ENH float alpha; #endif float D_tmp[FOA_CHANNELS]; int32_t ivas_total_brate; float min_dot, dotl, dotr; Loading @@ -305,10 +316,8 @@ void ivas_pca_enc( ivas_total_brate = hEncoderConfig->ivas_total_brate; #ifndef PCA_ENH /* if PCA is disabled, just pass-through */ #ifdef PCA_ENH push_next_indice( hMetaData, PCA_MODE_INACTIVE, 1 ); #else if ( hEncoderConfig->Opt_PCA_ON == 0 ) { /* write by-pass indicator */ Loading Loading @@ -363,6 +372,13 @@ void ivas_pca_enc( /*-----------------------------------------------------------------* * Covariance *-----------------------------------------------------------------*/ #ifdef PCA_ENH for ( k = 0; k < FOA_CHANNELS; k++ ) { ptr_sig[k] = &data_f[k][0]; } cov_subfr( ptr_sig, r_sm, FOA_CHANNELS, input_frame ); #else len_subfr = input_frame / 2; Loading @@ -382,7 +398,7 @@ void ivas_pca_enc( hPCA->old_r_sm[k] = r_sm[k]; } } #endif /* conditioning */ for ( k = 0; k < FOA_CHANNELS; k++ ) { Loading Loading @@ -432,7 +448,11 @@ void ivas_pca_enc( dist_alt = 0.0; for ( k = 0; k < FOA_CHANNELS; k++ ) { #ifdef PCA_ENH dist_alt += logf( r_sm[k * FOA_CHANNELS + k] * fac_D + 1e-8f ); #else dist_alt += logf( r[k * FOA_CHANNELS + k] * fac_D + 1e-8f ); #endif dist_alt -= logf( D[k] + 1e-8f ); } Loading @@ -440,7 +460,11 @@ void ivas_pca_enc( * Eigenvector alignment *-----------------------------------------------------------------*/ #ifdef PCA_ENH if ( 1 ) #else if ( hPCA->prev_bypass_decision == PCA_MODE_ACTIVE ) #endif { /* compute absolute cost matrix */ for ( k = 0; k < n_channels; k++ ) /* column */ Loading Loading @@ -544,6 +568,12 @@ void ivas_pca_enc( min_dot2 = qr[0]; bypass_decision = PCA_MODE_ACTIVE; #ifdef PCA_ENH if ( is_transient ) { bypass_decision = PCA_MODE_INACTIVE; } #endif if ( dist_alt < IVAS_PCA_THRES_DIST_ALT ) { bypass_decision = PCA_MODE_INACTIVE; Loading @@ -557,6 +587,20 @@ void ivas_pca_enc( bypass_decision = PCA_MODE_INACTIVE; } #ifdef PCA_ENH if ( hEncoderConfig->sba_planar ) { bypass_decision = PCA_MODE_INACTIVE; } for ( k = 0; k < FOA_CHANNELS; k++ ) { if ( r_sm[k * FOA_CHANNELS + k] < SILENT_CHANNEL_THRES ) { bypass_decision = PCA_MODE_INACTIVE; } } #endif /* if PCA is inactive */ if ( bypass_decision == PCA_MODE_INACTIVE ) { Loading
lib_enc/ivas_spar_encoder.c +5 −0 Original line number Diff line number Diff line Loading @@ -850,7 +850,12 @@ static ivas_error ivas_spar_enc_process( if ( hSpar->hPCA != NULL ) { #ifdef PCA_ENH ivas_pca_enc( hEncoderConfig, hSpar->hPCA, hMetaData, p_pcm_tmp, input_frame, FOA_CHANNELS, transient_det[0] ); #else ivas_pca_enc( hEncoderConfig, hSpar->hPCA, hMetaData, p_pcm_tmp, input_frame, FOA_CHANNELS ); #endif } else { Loading