diff --git a/lib_com/ivas_prot_fx.h b/lib_com/ivas_prot_fx.h index 6fb6181ba8381f9c2ba8b8d42c53b62b118832a8..68133ea6ecb379e73db3ea05fc477ffe1c9ac9cd 100644 --- a/lib_com/ivas_prot_fx.h +++ b/lib_com/ivas_prot_fx.h @@ -1879,6 +1879,7 @@ void TonalMDCTConceal_Detect_ivas_fx( ); +#ifndef HARMONIZE_FUNC void ivas_DetectTonalComponents_fx( Word16 indexOfTonalPeak[], Word16 lowerIndex[], @@ -1899,7 +1900,7 @@ void ivas_DetectTonalComponents_fx( const PsychoacousticParameters *psychParamsCurrent, Word16 element_mode ); - +#endif ivas_error stereo_dft_dec_create_fx( STEREO_DFT_DEC_DATA_HANDLE *hStereoDft, /* i/o: decoder DFT stereo handle */ const Word32 element_brate, /* i : element bitrate */ diff --git a/lib_com/options.h b/lib_com/options.h index 8db1debfcd1a819e55d54ffe483e29ad0c935f15..dc97044464fc2b1df69877b7ed824e9b34b04c85 100644 --- a/lib_com/options.h +++ b/lib_com/options.h @@ -92,6 +92,7 @@ #define HARM_2454_TCX_RES_Q_SPEC /* FhG: harmonization of tcx_res_Q_spec_fx() and tcx_res_Q_spec_ivas_fx() */ #define FIX_FLOAT_1535_ARI_RES_Q_CLEANUP /* FhG: remove dead code from tcx_ari_res_Q_spec() */ #define FIX_2467_RENAME_GSC_FUNCTION /* VA: basop issue 2467: Removal of unused function/table and renaming of _ivas_fx versions to default ones. */ +#define HARMONIZE_FUNC /* VA: basop issue 2460: Remove duplicated code: various functions */ /* #################### End BE switches ################################## */ diff --git a/lib_com/prot_fx.h b/lib_com/prot_fx.h index 76a9a3e472595e3b16a5b5b6d56ad76433bbf5a1..7ec2fdc57498235475a7dbe41e40c7d2afd047fc 100644 --- a/lib_com/prot_fx.h +++ b/lib_com/prot_fx.h @@ -2308,6 +2308,7 @@ void E_UTIL_synthesis_fx( const Word16 update, const Word16 m ); +#ifndef HARMONIZE_FUNC void synth_mem_updt2( const Word16 L_frame, /* i : frame length */ const Word16 last_L_frame, /* i : frame length */ @@ -2317,15 +2318,18 @@ void synth_mem_updt2( Word16 mem_syn[], /* o : synthesis filter memory for find_target */ const Word16 dec /* i : flag for decoder indication */ ); - void ivas_synth_mem_updt2_fx( +#else +void synth_mem_updt2_fx( +#endif const Word16 L_frame, /* i : frame length */ const Word16 last_L_frame, /* i : frame length */ Word16 old_exc[], /* i/o: excitation buffer */ Word16 mem_syn_r[], /* i/o: synthesis filter memory */ Word16 mem_syn2[], /* o : synthesis filter memory for find_target */ Word16 mem_syn[], /* o : synthesis filter memory for find_target */ - const Word16 dec ); + const Word16 dec /* i : flag for decoder indication */ +); void lerp( const Word16 *f, @@ -5821,6 +5825,27 @@ void concealment_signal_tuning_fx( Word16 *outx_new_fx /*Qoutx_new_fx*/, const Word16 past_core ); +#ifdef HARMONIZE_FUNC +void DetectTonalComponents_fx( + Word16 indexOfTonalPeak[], + Word16 lowerIndex[], + Word16 upperIndex[], + Word16 *pNumIndexes, + const Word32 lastPitchLag, + const Word32 currentPitchLag, + const Word16 lastMDCTSpectrum[], + const Word16 lastMDCTSpectrum_exp, + const Word16 scaleFactors[], + const Word16 scaleFactors_exp[], + const Word16 scaleFactors_max_e, + const Word32 secondLastPowerSpectrum[], + const Word16 secondLastPowerSpectrum_e, + const Word16 nSamples, + const Word16 nSamplesCore, + Word16 floorPowerSpectrum, /* i : lower limit for power spectrum bins */ + const PsychoacousticParameters *psychParamsCurrent, + const Word16 element_mode ); +#else void DetectTonalComponents( Word16 indexOfTonalPeak[], Word16 lowerIndex[], @@ -5858,8 +5883,13 @@ void RefineTonalComponents( const Word16 nSamplesCore, const Word16 floorPowerSpectrum, /* i: lower limit for power spectrum bins */ Word16 element_mode ); +#endif +#ifdef HARMONIZE_FUNC +void RefineTonalComponents_fx( +#else void ivas_RefineTonalComponents_fx( +#endif Word16 indexOfTonalPeak[], Word16 lowerIndex[], Word16 upperIndex[], @@ -5878,9 +5908,10 @@ void ivas_RefineTonalComponents_fx( const Word16 nSamples, const Word16 nSamplesCore, const Word16 floorPowerSpectrum, /* i: lower limit for power spectrum bins */ - Word16 element_mode, + const Word16 element_mode, const PsychoacousticParameters *psychParamsCurrent ); +#ifndef HARMONIZE_FUNC ivas_error PsychoacousticParameters_Init( const Word32 sr_core, /* i : sampling rate of core-coder */ const Word16 nBins, /* i : Number of bins (spectral lines) */ @@ -5888,8 +5919,8 @@ ivas_error PsychoacousticParameters_Init( const Word16 isTCX20, /* i : Flag indicating if the subband division is for TCX20 or TCX10 */ const Word16 isWarped, /* i : Flag indicating if the scale is linear or warped */ PsychoacousticParameters *pPsychParams ); - -ivas_error TonalMDCTConceal_Init( +#endif +ivas_error TonalMDCTConceal_Init_fx( TonalMDCTConcealPtr self, const Word16 nSamples, const Word16 nSamplesCore, @@ -5906,7 +5937,7 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( ); /* Must be called only when a good frame is recieved - concealment is inactive */ -void TonalMDCTConceal_SaveFreqSignal( +void TonalMDCTConceal_SaveFreqSignal_fx( TonalMDCTConcealPtr self, const Word32 *mdctSpectrum, const Word16 mdctSpectrum_exp, @@ -5927,21 +5958,21 @@ void TonalMDCTConceal_SaveFreqSignal_ivas_fx( const Word16 gain_tcx_exp, const Word16 infoIGFStartLine ); -void TonalMDCTConceal_UpdateState( +void TonalMDCTConceal_UpdateState_fx( TonalMDCTConcealPtr self, - Word16 nNewSamples, - Word32 pitchLag, - Word16 badBlock, - Word8 tonalConcealmentActive ); + const Word16 nNewSamples, + const Word32 pitchLag, + const Word16 badBlock, + const Word8 tonalConcealmentActive ); -void TonalMDCTConceal_Detect( +void TonalMDCTConceal_Detect_fx( const TonalMDCTConcealPtr self, /*IN */ const Word32 pitchLag, /*IN */ Word16 *umIndices, /*OUT*/ - Word16 element_mode /* IN */ + const Word16 element_mode /* IN */ ); -void TonalMDCTConceal_Apply( +void TonalMDCTConceal_Apply_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, /*IN/OUT*/ Word16 *mdctSpectrum_exp /*IN */ @@ -5967,7 +5998,7 @@ void TonalMDCTConceal_InsertNoise_ivas_fx( const Word16 cngLevelBackgroundTrace_e, const Word16 crossOverFreq ); -void TonalMDCTConceal_InsertNoise( +void TonalMDCTConceal_InsertNoise_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, /*OUT*/ Word16 *mdctSpectrum_exp, /*OUT*/ @@ -5977,7 +6008,7 @@ void TonalMDCTConceal_InsertNoise( Word16 crossfadeGain, const Word16 crossOverFreq ); -void TonalMDCTConceal_SaveTimeSignal( +void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, Word16 nNewSamples ); @@ -10597,7 +10628,6 @@ void UnmapIndex_fx( Word32 *Lag /* Q0 */ ); -// #define GET_ADJ2( T, L, F ) ( ( ( L ) << ( F ) ) - ( T ) ) #define GET_ADJ2( T, L, F ) ( sub( shl( L, F ), T ) ) Word32 tcx_hm_render_fx( diff --git a/lib_com/syn_filt_fx.c b/lib_com/syn_filt_fx.c index 08d040662b5285d9ab95e507d6498ad3cfc07b20..f04688bd7a1142216061d08dd966966dd2765dd0 100644 --- a/lib_com/syn_filt_fx.c +++ b/lib_com/syn_filt_fx.c @@ -548,14 +548,19 @@ void E_UTIL_synthesis_fx( * Update of synthesis filter memories in case of ACELP@12k8 <-> ACELP@16k switching *--------------------------------------------------------------------*/ +#ifdef HARMONIZE_FUNC +void synth_mem_updt2_fx( +#else void ivas_synth_mem_updt2_fx( +#endif const Word16 L_frame, /* i : frame length */ const Word16 last_L_frame, /* i : frame length */ Word16 old_exc[], /* i/o: excitation buffer st->Q_syn */ Word16 mem_syn_r[], /* i/o: synthesis filter memory st->Q_syn */ Word16 mem_syn2[], /* o : synthesis filter memory for find_target st->Q_syn */ Word16 mem_syn[], /* o : synthesis filter memory for find_target st->Q_syn */ - const Word16 dec ) + const Word16 dec /* i : flag for decoder indication */ +) { Word16 mem_syn_r_size_old, mem_syn_r_size_new; Word32 en1, en2; @@ -622,7 +627,11 @@ void ivas_synth_mem_updt2_fx( { Copy( mem_syn2, mem_syn, M ); } + + return; } +#ifndef HARMONIZE_FUNC + void synth_mem_updt2( const Word16 L_frame, /* i : frame length */ const Word16 last_L_frame, /* i : frame length */ @@ -660,3 +669,4 @@ void synth_mem_updt2( Copy( mem_syn2, mem_syn, M ); } } +#endif diff --git a/lib_dec/TonalComponentDetection_fx.c b/lib_dec/TonalComponentDetection_fx.c index e0fd08107fdc8938f00079eb2559cbdeefc5c6e3..1b09f98d2f45240bbaff58865aaef770503e0bd0 100644 --- a/lib_dec/TonalComponentDetection_fx.c +++ b/lib_dec/TonalComponentDetection_fx.c @@ -2,8 +2,6 @@ EVS Codec 3GPP TS26.452 Nov 04, 2021. Version 16.4.0 ====================================================================================*/ -#define _USE_MATH_DEFINES - #include #include #include "options.h" @@ -14,23 +12,35 @@ #include "prot_fx.h" #include "ivas_prot_fx.h" + /*---------------------------------------------------------------------* * Local function prototypes *---------------------------------------------------------------------*/ + static void calcPseudoSpec( const Word32 *mdctSpec, const Word16 mdctSpec_exp, const Word16 nSamples, Word16 floorPowerSpectrum, Word32 *powerSpec, Word16 *powerSpec_exp ); static void getEnvelope( const Word16 nSamples, const Word32 *powerSpec, Word16 F0, Word32 *envelope, Word32 *smoothedSpectrum ); static void GetF0( Word16 const nSamples, Word16 const nSamplesCore, Word32 const *const powerSpectrum, Word32 const pitchLag, Word16 *const pOrigF0, Word16 *const pF0 ); +#ifndef HARMONIZE_FUNC static void ivas_GetF0_fx( Word16 const nSamples, Word16 const nSamplesCore, Word32 const *const powerSpectrum, Word32 const pitchLag, Word16 *const pOrigF0, Word16 *const pF0 ); +#endif static void findStrongestHarmonics( const Word16 nSamples, const Word32 *powerSpectrum, const Word16 F0, const Word16 nTotalHarmonics, Word16 *pHarmonicIndexes, Word16 *pnHarmonics ); static void CorrectF0( const Word16 *pHarmonicIndexes, const Word16 nHarmonics, Word16 *pF0 ); +#ifndef HARMONIZE_FUNC static void ivas_CorrectF0_fx( const Word16 *pHarmonicIndexes, const Word16 nHarmonics, Word16 *pF0 ); +#endif static void findCandidates( const Word16 nSamples, const Word32 *MDCTSpectrum, const Word16 MDCTSpectrum_exp, Word16 *thresholdModificationNew, Word16 floorPowerSpectrum ); static void modifyThreshold( Word16 i, Word16 F0, Word16 threshold, Word16 *thresholdModification ); static void modifyThresholds( Word16 F0, Word16 origF0, Word16 *thresholdModification ); +#ifdef HARMONIZE_FUNC +static void RefineThresholdsUsingPitch_fx( const Word16 nSamples, const Word16 nSamplesCore, const Word32 powerSpectrum[], const Word32 lastPitchLag, const Word32 currentPitchLag, Word16 *pF0, Word16 *thresholdModification ); +static void findTonalComponents_fx( Word16 *indexOfTonalPeak, Word16 *lowerIndex, Word16 *upperIndex, Word16 *numIndexes, Word16 nSamples, const Word32 *powerSpectrum, const Word16 powerSpectrum_e, Word16 F0, Word16 *thresholdModification, Word16 element_mode ); +#else static void RefineThresholdsUsingPitch( const Word16 nSamples, const Word16 nSamplesCore, const Word32 powerSpectrum[], const Word32 lastPitchLag, const Word32 currentPitchLag, Word16 *pF0, Word16 *thresholdModification ); static void ivas_RefineThresholdsUsingPitch_fx( const Word16 nSamples, const Word16 nSamplesCore, const Word32 powerSpectrum[], const Word32 lastPitchLag, const Word32 currentPitchLag, Word16 *pF0, Word16 *thresholdModification ); static void findTonalComponents( Word16 *indexOfTonalPeak, Word16 *lowerIndex, Word16 *upperIndex, Word16 *numIndexes, Word16 nSamples, const Word32 *powerSpectrum, Word16 F0, Word16 *thresholdModification, Word16 element_mode ); static void ivas_findTonalComponents_fx( Word16 *indexOfTonalPeak, Word16 *lowerIndex, Word16 *upperIndex, Word16 *numIndexes, Word16 nSamples, const Word32 *powerSpectrum, const Word16 powerSpectrum_e, Word16 F0, Word16 *thresholdModification, Word16 element_mode ); +#endif + /*-------------------------------------------------------------------* * DetectTonalComponents() @@ -41,7 +51,11 @@ static void ivas_findTonalComponents_fx( Word16 *indexOfTonalPeak, Word16 *lower * pNumIndexes accordingly. *-------------------------------------------------------------------*/ +#ifdef HARMONIZE_FUNC +void DetectTonalComponents_fx( +#else void ivas_DetectTonalComponents_fx( +#endif Word16 indexOfTonalPeak[], /*Q0*/ Word16 lowerIndex[], /*Q0*/ Word16 upperIndex[], /*Q0*/ @@ -59,7 +73,11 @@ void ivas_DetectTonalComponents_fx( const Word16 nSamplesCore, Word16 floorPowerSpectrum, /* i : lower limit for power spectrum bins Q0*/ const PsychoacousticParameters *psychParamsCurrent, +#ifdef HARMONIZE_FUNC + const Word16 element_mode /* i : element mode */ +#else Word16 element_mode /* i : element mode */ +#endif ) { Word16 F0; @@ -71,60 +89,93 @@ void ivas_DetectTonalComponents_fx( set32_fx( pScaledMdctSpectrum, 0, L_FRAME_MAX ); - FOR( Word16 i = 0; i < nSamples; i++ ) - { - pScaledMdctSpectrum[i] = L_shl( lastMDCTSpectrum[i], 16 ); /*15-lastMDCTSpectrum_exp+16 -> 31 - lastMDCTSpectrum_exp*/ - move32(); - } - FOR( Word16 i = 0; i < FDNS_NPTS; i++ ) - { - sns_int_scf_fx[i] = L_shl_sat( scaleFactors[i], add( 1, scaleFactors_exp[i] ) ); // Q16 - move32(); - } - IF( psychParamsCurrent == NULL ) +#ifdef HARMONIZE_FUNC + IF( element_mode == EVS_MONO ) { - nBands = FDNS_NPTS; - move16(); - mdct_shaping_16( lastMDCTSpectrum, nSamplesCore, nSamples, scaleFactors, scaleFactors_exp, scaleFactors_max_e, pScaledMdctSpectrum ); + lastMDCTSpect_exp = add( lastMDCTSpectrum_exp, scaleFactors_max_e ); } ELSE { - q_pScaledMdctSpectrum = sub( 31, lastMDCTSpectrum_exp ); - sns_shape_spectrum_fx( pScaledMdctSpectrum, &q_pScaledMdctSpectrum, psychParamsCurrent, sns_int_scf_fx, 16, nSamplesCore, NULL ); - q_pScaledMdctSpectrum = add( q_pScaledMdctSpectrum, 1 ); - Word16 tmp_e = sub( 31, q_pScaledMdctSpectrum ); - nBands = psychParamsCurrent->nBands; - move16(); - // till nSamplesCore different Q and nSamples - nSamplesCore in different Q - Scale_sig32( pScaledMdctSpectrum + nSamplesCore, sub( nSamples, nSamplesCore ), sub( lastMDCTSpectrum_exp, tmp_e ) ); /*q_pScaledMdctSpectrum+lastMDCTSpectrum_exp-tmp_e*/ - lastMDCTSpect_exp = sub( 31, q_pScaledMdctSpectrum ); +#endif + FOR( Word16 i = 0; i < nSamples; i++ ) + { + pScaledMdctSpectrum[i] = L_shl( lastMDCTSpectrum[i], 16 ); /*15-lastMDCTSpectrum_exp+16 -> 31 - lastMDCTSpectrum_exp*/ + move32(); + } - FOR( Word16 i = nSamplesCore; i < nSamples; ++i ) +#ifndef HARMONIZE_FUNC + FOR( Word16 i = 0; i < FDNS_NPTS; i++ ) { - Word64 tmp = W_mult_32_32( pScaledMdctSpectrum[i], sns_int_scf_fx[nBands - 1] ); /*q_pScaledMdctSpectrum+16+1*/ - pScaledMdctSpectrum[i] = W_extract_h( W_shl( tmp, Q15 ) ); /*q_pScaledMdctSpectrum*/ + sns_int_scf_fx[i] = L_shl_sat( scaleFactors[i], add( 1, scaleFactors_exp[i] ) ); // Q16 move32(); } - } +#endif + IF( psychParamsCurrent == NULL ) + { + nBands = FDNS_NPTS; + move16(); + + mdct_shaping_16( lastMDCTSpectrum, nSamplesCore, nSamples, scaleFactors, scaleFactors_exp, scaleFactors_max_e, pScaledMdctSpectrum ); + lastMDCTSpect_exp = add( lastMDCTSpectrum_exp, scaleFactors_max_e ); + } + ELSE + { +#ifdef HARMONIZE_FUNC + FOR( Word16 i = 0; i < FDNS_NPTS; i++ ) + { + sns_int_scf_fx[i] = L_shl_sat( scaleFactors[i], add( 1, scaleFactors_exp[i] ) ); // Q16 + move32(); + } +#endif + + q_pScaledMdctSpectrum = sub( 31, lastMDCTSpectrum_exp ); + sns_shape_spectrum_fx( pScaledMdctSpectrum, &q_pScaledMdctSpectrum, psychParamsCurrent, sns_int_scf_fx, 16, nSamplesCore, NULL ); + q_pScaledMdctSpectrum = add( q_pScaledMdctSpectrum, 1 ); + Word16 tmp_e = sub( 31, q_pScaledMdctSpectrum ); + nBands = psychParamsCurrent->nBands; + move16(); + // till nSamplesCore different Q and nSamples - nSamplesCore in different Q + Scale_sig32( pScaledMdctSpectrum + nSamplesCore, sub( nSamples, nSamplesCore ), sub( lastMDCTSpectrum_exp, tmp_e ) ); /*q_pScaledMdctSpectrum+lastMDCTSpectrum_exp-tmp_e*/ + lastMDCTSpect_exp = sub( 31, q_pScaledMdctSpectrum ); + + FOR( Word16 i = nSamplesCore; i < nSamples; ++i ) + { + Word64 tmp = W_mult_32_32( pScaledMdctSpectrum[i], sns_int_scf_fx[nBands - 1] ); /*q_pScaledMdctSpectrum+16+1*/ + pScaledMdctSpectrum[i] = W_extract_h( W_shl( tmp, Q15 ) ); /*q_pScaledMdctSpectrum*/ + move32(); + } + } - /* Guard bit */ - lastMDCTSpect_exp = add( lastMDCTSpect_exp, 1 ); - scale_sig32( pScaledMdctSpectrum, nSamples, -1 ); /*q_pScaledMdctSpectrum - 1*/ + /* Guard bit */ + lastMDCTSpect_exp = add( lastMDCTSpect_exp, 1 ); + scale_sig32( pScaledMdctSpectrum, nSamples, -1 ); /*q_pScaledMdctSpectrum - 1*/ +#ifdef HARMONIZE_FUNC + } +#endif /* Find peak candidates in the last frame. */ findCandidates( nSamples, pScaledMdctSpectrum, lastMDCTSpect_exp, thresholdModification, floorPowerSpectrum ); /* Refine peak candidates using the pitch information */ +#ifdef HARMONIZE_FUNC + RefineThresholdsUsingPitch_fx( nSamples, nSamplesCore, secondLastPowerSpectrum, lastPitchLag, currentPitchLag, &F0, thresholdModification ); +#else ivas_RefineThresholdsUsingPitch_fx( nSamples, nSamplesCore, secondLastPowerSpectrum, lastPitchLag, currentPitchLag, &F0, thresholdModification ); +#endif /* Find peaks in the second last frame */ +#ifdef HARMONIZE_FUNC + findTonalComponents_fx( indexOfTonalPeak, lowerIndex, upperIndex, pNumIndexes, nSamples, secondLastPowerSpectrum, secondLastPowerSpectrum_e, F0, thresholdModification, element_mode ); +#else ivas_findTonalComponents_fx( indexOfTonalPeak, lowerIndex, upperIndex, pNumIndexes, nSamples, secondLastPowerSpectrum, secondLastPowerSpectrum_e, F0, thresholdModification, element_mode ); +#endif return; } +#ifndef HARMONIZE_FUNC void DetectTonalComponents( Word16 indexOfTonalPeak[], /*Q0*/ Word16 lowerIndex[], /*Q0*/ @@ -162,6 +213,7 @@ void DetectTonalComponents( return; } +#endif /*-------------------------------------------------------------------* * RefineTonalComponents() @@ -173,6 +225,7 @@ void DetectTonalComponents( * then keep in indexOfTonalPeak only the tonal components that are * again detected Updates indexOfTonalPeak, lowerIndex, upperIndex, * phaseDiff, phases, pNumIndexes accordingly. */ +#ifndef HARMONIZE_FUNC void RefineTonalComponents( Word16 indexOfTonalPeak[], /*Q0*/ Word16 lowerIndex[], /*Q0*/ @@ -258,8 +311,13 @@ void RefineTonalComponents( return; } +#endif +#ifdef HARMONIZE_FUNC +void RefineTonalComponents_fx( +#else void ivas_RefineTonalComponents_fx( +#endif Word16 indexOfTonalPeak[], /*Q0*/ Word16 lowerIndex[], /*Q0*/ Word16 upperIndex[], /*Q0*/ @@ -278,7 +336,7 @@ void ivas_RefineTonalComponents_fx( const Word16 nSamples, const Word16 nSamplesCore, const Word16 floorPowerSpectrum, /* i : lower limit for power spectrum bins Q0*/ - Word16 element_mode, + const Word16 element_mode, const PsychoacousticParameters *psychParamsCurrent ) { Word16 newIndexOfTonalPeak[MAX_NUMBER_OF_IDX]; /*Q0*/ @@ -288,9 +346,15 @@ void ivas_RefineTonalComponents_fx( Word16 iNew, iOld, j; Word16 *pOldPhase, *pNewPhase; +#ifdef HARMONIZE_FUNC + DetectTonalComponents_fx( newIndexOfTonalPeak, newLowerIndex, newUpperIndex, &newNumIndexes, lastPitchLag, currentPitchLag, lastMDCTSpectrum, + lastMDCTSpectrum_exp, scaleFactors, scaleFactors_exp, scaleFactors_max_e, secondLastPowerSpectrum, secondLastPowerSpectrum_e, nSamples, nSamplesCore, floorPowerSpectrum, + psychParamsCurrent, element_mode ); +#else ivas_DetectTonalComponents_fx( newIndexOfTonalPeak, newLowerIndex, newUpperIndex, &newNumIndexes, lastPitchLag, currentPitchLag, lastMDCTSpectrum, lastMDCTSpectrum_exp, scaleFactors, scaleFactors_exp, scaleFactors_max_e, secondLastPowerSpectrum, secondLastPowerSpectrum_e, nSamples, nSamplesCore, floorPowerSpectrum, psychParamsCurrent, element_mode ); +#endif nPreservedPeaks = 0; move16(); @@ -561,7 +625,7 @@ static void GetF0( return; } - +#ifndef HARMONIZE_FUNC static void ivas_GetF0_fx( Word16 /*short*/ const nSamples, /*i - Q0 */ Word16 /*short*/ const nSamplesCore, /*i - Q0 */ @@ -620,7 +684,7 @@ static void ivas_GetF0_fx( return; } - +#endif static void findStrongestHarmonics( const Word16 nSamples, @@ -703,11 +767,13 @@ static void findStrongestHarmonics( *pnHarmonics = nPeaks; /*Q0*/ move16(); + return; } /* Use new F0, for which harmonics are most common in pHarmonicIndexes */ static void CorrectF0( +#ifndef HARMONIZE_FUNC const Word16 /*short*/ *pHarmonicIndexes, /*I - Q0 */ const Word16 /*short*/ nHarmonics, /*I - Q0 */ Word16 /*short*/ *pF0 ) /*I/O - Q10 range: {0}, [4..18) */ @@ -853,8 +919,8 @@ static void CorrectF0( return; } - static void ivas_CorrectF0_fx( +#endif const Word16 /*short*/ *pHarmonicIndexes, /*I - Q0 */ const Word16 /*short*/ nHarmonics, /*I - Q0 */ Word16 /*short*/ *pF0 ) /*I/O - Q10 range: {0}, [4..18) */ @@ -1211,7 +1277,7 @@ static void findCandidates( return; } - +#ifndef HARMONIZE_FUNC static void RefineThresholdsUsingPitch( const Word16 nSamples, const Word16 nSamplesCore, @@ -1252,9 +1318,13 @@ static void RefineThresholdsUsingPitch( return; } +#endif - +#ifdef HARMONIZE_FUNC +static void findTonalComponents_fx( +#else static void ivas_findTonalComponents_fx( +#endif Word16 *indexOfTonalPeak, /* OUT Q0*/ Word16 *lowerIndex, /* OUT Q0*/ Word16 *upperIndex, /* OUT Q0*/ @@ -1287,11 +1357,27 @@ static void ivas_findTonalComponents_fx( tmp_loop2 = sub( nSamples, 1 ); WHILE( LE_16( k, tmp_loop1 ) ) { - Word64 mult_64 = W_mult_32_16( envelope[k], thresholdModification[k] ); // (Q31-(powerSpectrum_e+LEVEL_EXP))+1+10 - Word16 lshift = W_norm( mult_64 ); - Word32 mult_32 = W_extract_h( W_shl( mult_64, lshift ) ); //(Q31-(powerSpectrum_e+LEVEL_EXP) + lshift )+11 -32 - Word16 mult_exp = sub( Q31, sub( add( sub( Q31, add( powerSpectrum_e, LEVEL_EXP ) ), add( 10, lshift ) ), 31 ) ); +#ifdef HARMONIZE_FUNC + Word16 flag = 0; + IF( element_mode == EVS_MONO && GT_32( L_shr( smoothedSpectrum[k], 1 ), L_shl( Mpy_32_16_1( envelope[k] /*Q28,powerSpec_exp*/, thresholdModification[k] /*Q10*/ ), 4 ) ) ) + { + flag = 1; + move16(); + } + ELSE + { +#endif + Word64 mult_64 = W_mult_32_16( envelope[k], thresholdModification[k] ); // (Q31-(powerSpectrum_e+LEVEL_EXP))+1+10 + Word16 lshift = W_norm( mult_64 ); + Word32 mult_32 = W_extract_h( W_shl( mult_64, lshift ) ); //(Q31-(powerSpectrum_e+LEVEL_EXP) + lshift )+11 -32 + Word16 mult_exp = sub( Q31, sub( add( sub( Q31, add( powerSpectrum_e, LEVEL_EXP ) ), add( 10, lshift ) ), 31 ) ); +#ifdef HARMONIZE_FUNC + flag = BASOP_Util_Cmp_Mant32Exp( smoothedSpectrum[k], ( powerSpectrum_e + LEVEL_EXP ), mult_32, mult_exp ); + } +#else Word16 flag = BASOP_Util_Cmp_Mant32Exp( smoothedSpectrum[k], ( powerSpectrum_e + LEVEL_EXP ), mult_32, mult_exp ); +#endif + /* There is 3 bits headroom in envelope and max of thresholdModification is 16384, so shifting left for 4 would produce overflow only when the result is anyhow close to 1 */ IF( EQ_16( flag, 1 ) ) { @@ -1418,8 +1504,11 @@ static void ivas_findTonalComponents_fx( return; } - +#ifdef HARMONIZE_FUNC +static void RefineThresholdsUsingPitch_fx( +#else static void ivas_RefineThresholdsUsingPitch_fx( +#endif const Word16 nSamples, const Word16 nSamplesCore, const Word32 powerSpectrum[], /*Qx*/ @@ -1445,9 +1534,13 @@ static void ivas_RefineThresholdsUsingPitch_fx( IF( pitchIsStable ) { +#ifdef HARMONIZE_FUNC + GetF0( nSamples, nSamplesCore, powerSpectrum, lastPitchLag, &origF0, pF0 ); +#else ivas_GetF0_fx( nSamples, nSamplesCore, powerSpectrum, lastPitchLag, &origF0, pF0 ); +#endif modifyThresholds( *pF0, origF0, thresholdModification ); } @@ -1459,7 +1552,7 @@ static void ivas_RefineThresholdsUsingPitch_fx( return; } - +#ifndef HARMONIZE_FUNC static void findTonalComponents( Word16 *indexOfTonalPeak, /* OUT Q0*/ @@ -1618,3 +1711,4 @@ static void findTonalComponents( return; } +#endif diff --git a/lib_dec/acelp_core_dec_fx.c b/lib_dec/acelp_core_dec_fx.c index 73ff775afed46ec7dc5e813d31ee27d0b5aa4a0c..40b8be983c5482258884b36f2904bbf86f6a1acc 100644 --- a/lib_dec/acelp_core_dec_fx.c +++ b/lib_dec/acelp_core_dec_fx.c @@ -448,7 +448,11 @@ ivas_error acelp_core_dec_fx( dec = DEC_IVAS; move16(); } +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, st->last_L_frame, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, dec ); +#else ivas_synth_mem_updt2_fx( st->L_frame, st->last_L_frame, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, dec ); +#endif Copy( st->old_exc_fx, old_exc_fx, L_EXC_MEM_DEC ); /*Q_exc*/ Copy_Scale_sig( st->mem_syn2_fx, st->mem_syn1_fx, M, sub( -1, st->Q_syn ) ); /*Q-1*/ Copy( st->mem_syn2_fx, st->mem_syn3_fx, M ); /*Q_syn*/ diff --git a/lib_dec/amr_wb_dec_fx.c b/lib_dec/amr_wb_dec_fx.c index b8515e399a7295b860f692c97c728634fb763c35..3993288e33bdca76482500c783531436fe24a262 100644 --- a/lib_dec/amr_wb_dec_fx.c +++ b/lib_dec/amr_wb_dec_fx.c @@ -272,7 +272,11 @@ ivas_error amr_wb_dec_fx( set16_fx( st_fx->mem_MA_fx, 0, M ); /* update synthesis filter memories */ +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( L_FRAME, st_fx->last_L_frame, st_fx->old_exc_fx, st_fx->mem_syn_r, st_fx->mem_syn2_fx, NULL, DEC ); +#else synth_mem_updt2( L_FRAME, st_fx->last_L_frame, st_fx->old_exc_fx, st_fx->mem_syn_r, st_fx->mem_syn2_fx, NULL, DEC ); +#endif Copy( st_fx->old_exc_fx, old_exc_fx, L_EXC_MEM_DEC ); /*Q_exc*/ Copy_Scale_sig( st_fx->mem_syn2_fx, st_fx->mem_syn1_fx, M, sub( -1, st_fx->Q_syn ) ); /*Q-1*/ Copy( st_fx->mem_syn2_fx, st_fx->mem_syn3_fx, M ); /*Q_syn*/ diff --git a/lib_dec/core_dec_init_fx.c b/lib_dec/core_dec_init_fx.c index e73fce2bc1fe3394d54cc38259e5b8d74271b1f5..c2236a845ccabc018d9b768e6561d59592cbe0ca 100644 --- a/lib_dec/core_dec_init_fx.c +++ b/lib_dec/core_dec_init_fx.c @@ -529,7 +529,11 @@ void open_decoder_LPD_fx( IF( !st->last_con_tcx ) { +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, st->last_L_frame, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#else synth_mem_updt2( st->L_frame, st->last_L_frame, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#endif } /*mem of deemphasis stayed unchanged.*/ @@ -948,7 +952,7 @@ void open_decoder_LPD_fx( st->hTonalMDCTConc->lastBlockData.nSamples = 0; move16(); - TonalMDCTConceal_Init( st->hTonalMDCTConc, hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); + TonalMDCTConceal_Init_fx( st->hTonalMDCTConc, hTcxDec->L_frameTCX, st->L_frame, FDNS_NPTS, st->hTcxCfg ); } st->last_tns_active = 0; move16(); @@ -1565,7 +1569,11 @@ void open_decoder_LPD_ivas_fx( move16(); IF( !st->last_con_tcx ) { +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, st->last_L_frame, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#else ivas_synth_mem_updt2_fx( st->L_frame, st->last_L_frame, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#endif } /*mem of deemphasis stayed unchanged.*/ diff --git a/lib_dec/core_switching_dec_fx.c b/lib_dec/core_switching_dec_fx.c index 2eab8f473a48006755fe8567e3b7485fb0497e7c..dc43ccae0820aa8204a42229d96c253f09680bfe 100644 --- a/lib_dec/core_switching_dec_fx.c +++ b/lib_dec/core_switching_dec_fx.c @@ -1663,7 +1663,11 @@ ivas_error core_switching_pre_dec_fx( ELSE IF( LT_16( st->L_frame, L_FRAME16k ) ) { /* resample from 16kHz to 12.8kHZ */ +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, L_FRAME16k, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#else synth_mem_updt2( st->L_frame, L_FRAME16k, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#endif } IF( hBWE_TD != NULL ) diff --git a/lib_dec/dec_LPD_fx.c b/lib_dec/dec_LPD_fx.c index 4cafdfed749b2120f56ac0721731e29b78be8eec..35dcf12b8583d272750f6ab79bcc7bd62acd7778 100644 --- a/lib_dec/dec_LPD_fx.c +++ b/lib_dec/dec_LPD_fx.c @@ -631,7 +631,7 @@ void decoder_LPD_fx( /* PLC: [TCX: Tonal Concealment] */ /* Signal that this frame is not TCX */ - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, 0, 0, 0, 0 ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, 0, 0, 0, 0 ); IF( bfi == 0 ) { @@ -768,7 +768,7 @@ void decoder_LPD_fx( IF( !bfi ) { - TonalMDCTConceal_SaveTimeSignal( st->hTonalMDCTConc, synthFB, L_frameTCX ); + TonalMDCTConceal_SaveTimeSignal_fx( st->hTonalMDCTConc, synthFB, L_frameTCX ); } decoder_tcx_post_fx( st, synth, synthFB, Aq, bfi ); IF( EQ_16( st->core, TCX_20_CORE ) ) diff --git a/lib_dec/dec_ace_fx.c b/lib_dec/dec_ace_fx.c index ac137b37c99be1174fcc91f5a549d265eeeff808..c78697921b1dde8e4723081d30d0b1ed7f32cffd 100644 --- a/lib_dec/dec_ace_fx.c +++ b/lib_dec/dec_ace_fx.c @@ -174,7 +174,11 @@ void decoder_acelp_fx( test(); IF( st->prev_bfi && st->last_con_tcx && LT_16( st->L_frame, L_FRAME16k ) ) { +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, L_FRAME16k, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#else synth_mem_updt2( st->L_frame, L_FRAME16k, st->old_exc_fx, st->mem_syn_r, st->mem_syn2_fx, NULL, DEC ); +#endif } test(); diff --git a/lib_dec/dec_tcx_fx.c b/lib_dec/dec_tcx_fx.c index 0f5f1ec579886b1a3bb94e76a6a530ce12b099ff..0b98d4eac579ab7e5ff103ef92ca6ec8a49681c3 100644 --- a/lib_dec/dec_tcx_fx.c +++ b/lib_dec/dec_tcx_fx.c @@ -814,7 +814,7 @@ void decoder_tcx_fx( IF( bfi == 0 ) { - TonalMDCTConceal_SaveFreqSignal( st->hTonalMDCTConc, x, x_e, L_frameTCX, L_frame, gainlpc2, gainlpc2_e, gain_tcx_e ); + TonalMDCTConceal_SaveFreqSignal_fx( st->hTonalMDCTConc, x, x_e, L_frameTCX, L_frame, gainlpc2, gainlpc2_e, gain_tcx_e ); } ELSE { @@ -884,9 +884,9 @@ void decoder_tcx_fx( tcxGetNoiseFillingTilt( A, M, L_frame, tmp, &noiseTiltFactor ); - TonalMDCTConceal_InsertNoise( st->hTonalMDCTConc, x, &x_e, st->tonal_mdct_plc_active, &st->seed_tcx_plc, - noiseTiltFactor, f, - infoIGFStartLine ); + TonalMDCTConceal_InsertNoise_fx( st->hTonalMDCTConc, x, &x_e, st->tonal_mdct_plc_active, &st->seed_tcx_plc, + noiseTiltFactor, f, + infoIGFStartLine ); } } @@ -969,7 +969,7 @@ void decoder_tcx_fx( test(); IF( bfi && st->tonal_mdct_plc_active ) { - TonalMDCTConceal_Apply( st->hTonalMDCTConc, x, &x_e ); + TonalMDCTConceal_Apply_fx( st->hTonalMDCTConc, x, &x_e ); } tmp32 = L_deposit_h( 0 ); @@ -986,7 +986,7 @@ void decoder_tcx_fx( move16(); } - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX, tmp32, bfi, tmp8 ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, L_frameTCX, tmp32, bfi, tmp8 ); IF( st->enablePlcWaveadjust ) { @@ -5221,11 +5221,11 @@ void decoder_tcx_noiseshaping_igf_fx( move16(); } - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, - L_frameTCX, - tmp32, - bfi, - tmp8 ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, + L_frameTCX, + tmp32, + bfi, + tmp8 ); } *x_len = L_frameTCX; diff --git a/lib_dec/er_util_fx.c b/lib_dec/er_util_fx.c index f1cb9a60a2d6eee0170d14d99dddca9ec58e3f63..5632e52affb7735a4058431b672612b1cda9a0a4 100644 --- a/lib_dec/er_util_fx.c +++ b/lib_dec/er_util_fx.c @@ -455,7 +455,7 @@ Word16 GetPLCModeDecision_fx( } ELSE { - TonalMDCTConceal_Detect( st->hTonalMDCTConc, pitch, &numIndices, st->element_mode ); + TonalMDCTConceal_Detect_fx( st->hTonalMDCTConc, pitch, &numIndices, st->element_mode ); } test(); diff --git a/lib_dec/ivas_mdct_core_dec_fx.c b/lib_dec/ivas_mdct_core_dec_fx.c index 65479c7a1b584968e0b38d739c9030223952f17a..f1e1ebaad17ca637de86ecb5908840d3e9cfb011 100644 --- a/lib_dec/ivas_mdct_core_dec_fx.c +++ b/lib_dec/ivas_mdct_core_dec_fx.c @@ -1345,7 +1345,7 @@ void ivas_mdct_core_reconstruct_fx( /* Signal that this frame is not TCX */ IF( st->hTonalMDCTConc != NULL ) { - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, 0, 0, 0, 0 ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, 0, 0, 0, 0 ); } Scale_sig( st->mem_syn2_fx, M, st->Q_syn ); Scale_sig( st->mem_syn_r, M, st->Q_syn ); @@ -1556,7 +1556,7 @@ void ivas_mdct_core_tns_ns_fx( { IF( st->hTonalMDCTConc != NULL ) { - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, 0, bfi, 0 ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, st->hTcxDec->L_frameTCX, 0, bfi, 0 ); } /* nothing to do for missing LFE */ @@ -1725,11 +1725,11 @@ void ivas_mdct_core_tns_ns_fx( { IF( st->hTcxDec->tcxltp_last_gain_unmodified > 0 ) { - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX[ch], st->old_fpitch, bfi, (Word8) s_and( bfi, st->tonal_mdct_plc_active ) ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, L_frameTCX[ch], st->old_fpitch, bfi, (Word8) s_and( bfi, st->tonal_mdct_plc_active ) ); } ELSE { - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX[ch], 0, bfi, (Word8) s_and( bfi, st->tonal_mdct_plc_active ) ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, L_frameTCX[ch], 0, bfi, (Word8) s_and( bfi, st->tonal_mdct_plc_active ) ); } } } diff --git a/lib_dec/ivas_stereo_mdct_core_dec_fx.c b/lib_dec/ivas_stereo_mdct_core_dec_fx.c index 2915159181aff3684a650b5aae992d4849350d73..d40505a358e6ba5a4fb84e2ef093ec710863b333 100644 --- a/lib_dec/ivas_stereo_mdct_core_dec_fx.c +++ b/lib_dec/ivas_stereo_mdct_core_dec_fx.c @@ -433,8 +433,7 @@ void stereo_mdct_core_dec_fx( } move32(); - // TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX[ch], ( st->hTcxDec->tcxltp_last_gain_unmodified > 0 ) ? st->old_fpitch : 0, bfi, bfi && st->tonal_mdct_plc_active ); - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, L_frameTCX[ch], L_tmp, bfi, bfi && st->tonal_mdct_plc_active ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, L_frameTCX[ch], L_tmp, bfi, bfi && st->tonal_mdct_plc_active ); } Copy( ms_mask[0], hCPE->hStereoMdct->prev_ms_mask[0], MAX_SFB ); /* Q0 */ diff --git a/lib_dec/ivas_tcx_core_dec_fx.c b/lib_dec/ivas_tcx_core_dec_fx.c index cdb2b6061fb3b35c2067d3e7dcc799a8ce62ce62..be54caeff7e775fd2108a66ad05543fc89623934 100644 --- a/lib_dec/ivas_tcx_core_dec_fx.c +++ b/lib_dec/ivas_tcx_core_dec_fx.c @@ -518,7 +518,7 @@ void stereo_tcx_core_dec_fx( /* Signal that this frame is not TCX */ IF( st->hTonalMDCTConc != NULL ) { - TonalMDCTConceal_UpdateState( st->hTonalMDCTConc, 0, 0, 0, 0 ); + TonalMDCTConceal_UpdateState_fx( st->hTonalMDCTConc, 0, 0, 0, 0 ); } } diff --git a/lib_dec/tonalMDCTconcealment_fx.c b/lib_dec/tonalMDCTconcealment_fx.c index 0a8892dba66e3c48550589467d92630990a2aa8f..4d290e72ab486f8ece5b0164a3733b03c012236c 100644 --- a/lib_dec/tonalMDCTconcealment_fx.c +++ b/lib_dec/tonalMDCTconcealment_fx.c @@ -21,7 +21,11 @@ static void CalcMDXT( const TonalMDCTConcealPtr hTonalMDCTConc, const Word16 type, const Word16 *timeSignal, Word32 *mdxtOutput, Word16 *mdxtOutput_e ); static void CalcPowerSpec( const Word32 *mdctSpec, const Word16 mdctSpec_exp, const Word32 *mdstSpec, const Word16 mdstSpec_exp, const Word16 nSamples, const Word16 floorPowerSpectrum, Word32 *powerSpec, Word16 *powerSpec_exp ); +#ifdef HARMONIZE_FUNC +static void CalcPowerSpecAndDetectTonalComponents_fx( TonalMDCTConcealPtr const hTonalMDCTConc, Word32 secondLastMDST[], Word16 secondLastMDST_exp, Word32 secondLastMDCT[], Word16 secondLastMDCT_exp, Word32 const pitchLag, const PsychoacousticParameters *psychParamsCurrent, Word16 element_mode ); +#else static void CalcPowerSpecAndDetectTonalComponents( TonalMDCTConcealPtr const hTonalMDCTConc, Word32 secondLastMDST[], Word16 secondLastMDST_exp, Word32 secondLastMDCT[], Word16 secondLastMDCT_exp, Word32 const pitchLag, Word16 element_mode ); +#endif static void FindPhases( TonalMDCTConcealPtr const hTonalMDCTConc, Word32 secondLastMDCT[], Word32 secondLastMDST[], Word16 diff_exp ); static void FindPhaseDifferences( TonalMDCTConcealPtr const hTonalMDCTConc, Word32 powerSpectrum[] ); @@ -30,7 +34,7 @@ static void FindPhaseDifferences( TonalMDCTConcealPtr const hTonalMDCTConc, Word /*-------------- public functions -------------------- */ /*******************************************************/ -ivas_error TonalMDCTConceal_Init( +ivas_error TonalMDCTConceal_Init_fx( TonalMDCTConcealPtr hTonalMDCTConc, const Word16 nSamples, const Word16 nSamplesCore, @@ -82,7 +86,6 @@ ivas_error TonalMDCTConceal_Init( hTonalMDCTConc->pTCI = (TonalComponentsInfo *) hTonalMDCTConc->timeDataBuffer; move16(); - hTonalMDCTConc->lastPitchLag = L_deposit_l( 0 ); IF( NE_16( hTonalMDCTConc->nSamples, nSamples ) ) @@ -113,6 +116,8 @@ ivas_error TonalMDCTConceal_Init( return IVAS_ERR_OK; } + + ivas_error TonalMDCTConceal_Init_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, const UWord16 nSamples, @@ -216,7 +221,9 @@ ivas_error TonalMDCTConceal_Init_ivas_fx( return IVAS_ERR_OK; } -void TonalMDCTConceal_SaveFreqSignal( + + +void TonalMDCTConceal_SaveFreqSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, const Word32 *mdctSpectrum, // Q31-mdctSpectrum_exp const Word16 mdctSpectrum_exp, @@ -229,7 +236,6 @@ void TonalMDCTConceal_SaveFreqSignal( Word16 *temp; Word16 nOldSamples, tmp_exp, s, i, max_exp; - assert( nNewSamples > 0 && nNewSamples <= 2 * L_FRAME_MAX ); /* Avoid overwriting hTonalMDCTConc->secondLastPowerSpectrum stored in spectralData, @@ -343,9 +349,11 @@ void TonalMDCTConceal_SaveFreqSignal( Copy( scaleFactors, hTonalMDCTConc->lastBlockData.scaleFactors, hTonalMDCTConc->nScaleFactors ); } + return; } + void TonalMDCTConceal_SaveFreqSignal_ivas_fx( TonalMDCTConcealPtr hTonalMDCTConc, const Word32 *mdctSpectrum, // Q31-mdctSpectrum_exp @@ -505,12 +513,12 @@ void TonalMDCTConceal_SaveFreqSignal_ivas_fx( } -void TonalMDCTConceal_UpdateState( +void TonalMDCTConceal_UpdateState_fx( TonalMDCTConcealPtr hTonalMDCTConc, - Word16 nNewSamples, // Q0 - Word32 pitchLag, // Qx - Word16 badBlock, // Q0 - Word8 tonalConcealmentActive ) + const Word16 nNewSamples, // Q0 + const Word32 pitchLag, // Qx + const Word16 badBlock, // Q0 + const Word8 tonalConcealmentActive ) { Word8 newBlockIsValid; @@ -565,7 +573,6 @@ static void FindPhases( Word16 l; Word16 *pCurrentPhase; - pCurrentPhase = hTonalMDCTConc->pTCI->phase_currentFramePredicted; /* for each index/index group */ FOR( i = 0; i < hTonalMDCTConc->pTCI->numIndexes; i++ ) @@ -583,6 +590,7 @@ static void FindPhases( return; } + /*#define BANDWIDTH 7.0f*/ #define G 789516047l /*1.0/(2*1.36) Q31*/ #define MAXRATIO 22938 /*44.8f Q9*/ /* Maximum ratio |ODFT[k-1]|/|ODFT[k+1]| is 16.5 dB, that is maximum ratio (for fractional = 0) is (cos(PI/bandwidth)/cos(3PI/bandwidth))^1.36 */ @@ -702,9 +710,16 @@ static void FindPhaseDifferences( } } } + + return; } + +#ifdef HARMONIZE_FUNC +static void CalcPowerSpecAndDetectTonalComponents_fx( +#else static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( +#endif TonalMDCTConcealPtr const hTonalMDCTConc, Word32 secondLastMDST[], // Q31 - secondLastMDST_exp Word16 secondLastMDST_exp, @@ -732,7 +747,16 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( move16(); /* It is taken into account that the MDCT is not normalized. */ - floorPowerSpectrum /*Q0*/ = extract_l( Mpy_32_32( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 5368709 ) ); /*1/400 = 5368709 Q31*/ +#ifdef HARMONIZE_FUNC + IF( element_mode == EVS_MONO ) + { + floorPowerSpectrum /*Q0*/ = extract_l( Mpy_32_16_1( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 82 ) ); /*1/400 = 82 Q15*/ + } + ELSE +#endif + { + floorPowerSpectrum /*Q0*/ = extract_l( Mpy_32_32( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 5368709 ) ); /*1/400 = 5368709 Q31*/ + } powerSpectrum_exp = 0; move16(); @@ -756,6 +780,31 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( set32_fx( powerSpectrum + hTonalMDCTConc->nSamples, 0, sub( hTonalMDCTConc->nSamplesCore, hTonalMDCTConc->nSamples ) ); } +#ifdef HARMONIZE_FUNC + Word16 spectralData_exp = hTonalMDCTConc->lastBlockData.spectralData_exp; + move16(); + if ( element_mode == EVS_MONO ) + { + spectralData_exp = add( hTonalMDCTConc->lastBlockData.spectralData_exp, hTonalMDCTConc->lastBlockData.gain_tcx_exp ); + } + + DetectTonalComponents_fx( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak, + (Word16 *) hTonalMDCTConc->pTCI->lowerIndex, + (Word16 *) hTonalMDCTConc->pTCI->upperIndex, + (Word16 *) &hTonalMDCTConc->pTCI->numIndexes, + hTonalMDCTConc->lastPitchLag, + pitchLag, + hTonalMDCTConc->lastBlockData.spectralData, + spectralData_exp, + hTonalMDCTConc->lastBlockData.scaleFactors, + hTonalMDCTConc->lastBlockData.scaleFactors_exp, + hTonalMDCTConc->lastBlockData.scaleFactors_max_e, + powerSpectrum, + powerSpectrum_exp, + nSamples, + hTonalMDCTConc->nSamplesCore, + floorPowerSpectrum, psychParamsCurrent, element_mode ); +#else ivas_DetectTonalComponents_fx( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak, (Word16 *) hTonalMDCTConc->pTCI->lowerIndex, (Word16 *) hTonalMDCTConc->pTCI->upperIndex, @@ -772,6 +821,8 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( nSamples, hTonalMDCTConc->nSamplesCore, floorPowerSpectrum, psychParamsCurrent, element_mode ); +#endif + FindPhases( hTonalMDCTConc, secondLastMDCT, secondLastMDST, sub( secondLastMDST_exp, secondLastMDCT_exp ) ); FindPhaseDifferences( hTonalMDCTConc, powerSpectrum ); @@ -807,6 +858,7 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( move16(); Word16 length = 0; move16(); + /* here mdct_shaping() is intentionally used rather then mdct_shaping_16() */ IF( psychParamsCurrent == NULL ) { @@ -826,26 +878,46 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( nBands = psychParamsCurrent->nBands; move16(); } - IF( LT_16( old_power_spectrum_q, power_spectrum_q ) ) - { - Scale_sig32( powerSpectrum, length, sub( old_power_spectrum_q, power_spectrum_q ) ); // Q(old_power_spectrum_q-power_spectrum_q) - } - ELSE + +#ifdef HARMONIZE_FUNC + IF( element_mode != EVS_MONO ) { - Scale_sig32( powerSpectrum + length, sub( nSamples, length ), sub( power_spectrum_q, old_power_spectrum_q ) ); // Q(power_spectrum_q - old_power_spectrum_q) - powerSpectrum_exp = sub( 31, power_spectrum_q ); +#endif + IF( LT_16( old_power_spectrum_q, power_spectrum_q ) ) + { + Scale_sig32( powerSpectrum, length, sub( old_power_spectrum_q, power_spectrum_q ) ); // Q(old_power_spectrum_q-power_spectrum_q) + } + ELSE + { + Scale_sig32( powerSpectrum + length, sub( nSamples, length ), sub( power_spectrum_q, old_power_spectrum_q ) ); // Q(power_spectrum_q - old_power_spectrum_q) + powerSpectrum_exp = sub( 31, power_spectrum_q ); + } + Scale_sig32( powerSpectrum, nSamples, -3 ); /*Adding guard bits*/ // Q(31 - powerSpectrum_exp )-3 + powerSpectrum_exp = add( powerSpectrum_exp, 3 ); +#ifdef HARMONIZE_FUNC } - Scale_sig32( powerSpectrum, nSamples, -3 ); /*Adding guard bits*/ // Q(31 - powerSpectrum_exp )-3 - powerSpectrum_exp = add( powerSpectrum_exp, 3 ); +#endif + FOR( i = hTonalMDCTConc->nSamplesCore; i < nSamples; i++ ) { powerSpectrum[i] = L_shl_sat( Mpy_32_16_1( powerSpectrum[i], invScaleFactors[nBands - 1] ), invScaleFactors_exp[nBands - 1] ); // Q(31 - powerSpectrum_exp) move32(); } - Word16 shift = Find_Max_Norm32( powerSpectrum, nSamples ); - scale_sig32( powerSpectrum, nSamples, shift ); - powerSpectrum_exp = sub( powerSpectrum_exp, shift ); +#ifdef HARMONIZE_FUNC + IF( element_mode == EVS_MONO ) + { + powerSpectrum_exp = sub( powerSpectrum_exp, hTonalMDCTConc->secondLastBlockData.gain_tcx_exp ); + } + ELSE + { +#endif + Word16 shift = Find_Max_Norm32( powerSpectrum, nSamples ); + scale_sig32( powerSpectrum, nSamples, shift ); + powerSpectrum_exp = sub( powerSpectrum_exp, shift ); +#ifdef HARMONIZE_FUNC + } +#endif /* 16 bits are now enough for storing the power spectrum */ FOR( i = 0; i < nSamples; i++ ) @@ -857,8 +929,11 @@ static void ivas_CalcPowerSpecAndDetectTonalComponents_fx( hTonalMDCTConc->secondLastPowerSpectrum_exp = powerSpectrum_exp; move16(); } + + return; } +#ifndef HARMONIZE_FUNC static void CalcPowerSpecAndDetectTonalComponents( TonalMDCTConcealPtr const hTonalMDCTConc, Word32 secondLastMDST[], // Q31-secondLastMDST_exp @@ -920,6 +995,7 @@ static void CalcPowerSpecAndDetectTonalComponents( nSamples, hTonalMDCTConc->nSamplesCore, floorPowerSpectrum, element_mode ); + FindPhases( hTonalMDCTConc, secondLastMDCT, secondLastMDST, sub( secondLastMDST_exp, secondLastMDCT_exp ) ); FindPhaseDifferences( hTonalMDCTConc, powerSpectrum ); @@ -973,7 +1049,7 @@ static void CalcPowerSpecAndDetectTonalComponents( move16(); } } - +#endif static void CalcMDXT( const TonalMDCTConcealPtr hTonalMDCTConc, @@ -1001,13 +1077,15 @@ static void CalcMDXT( TCX_MDCT( windowedTimeSignal, mdxtOutput, mdxtOutput_e, left_overlap, sub( L_frame, shr( add( left_overlap, right_overlap ), 1 ) ), right_overlap, EVS_MONO ); } + + return; } -void TonalMDCTConceal_Detect( +void TonalMDCTConceal_Detect_fx( const TonalMDCTConcealPtr hTonalMDCTConc, const Word32 pitchLag, /*15Q16*/ Word16 *numIndices, - Word16 element_mode ) + const Word16 element_mode ) { Word32 secondLastMDST[L_FRAME_MAX]; Word32 secondLastMDCT[L_FRAME_MAX]; @@ -1016,7 +1094,6 @@ void TonalMDCTConceal_Detect( Word16 i, powerSpectrum_exp, secondLastMDST_exp, s; Word16 nSamples; - nSamples = hTonalMDCTConc->nSamples; move16(); secondLastMDST_exp = 16; /*time signal Q-1*/ @@ -1073,7 +1150,11 @@ void TonalMDCTConceal_Detect( } secondLastMDCT_exp = sub( secondLastMDCT_exp, s ); move16(); +#ifdef HARMONIZE_FUNC + CalcPowerSpecAndDetectTonalComponents_fx( hTonalMDCTConc, secondLastMDST, secondLastMDST_exp, secondLastMDCT, secondLastMDCT_exp, pitchLag, NULL, element_mode ); +#else CalcPowerSpecAndDetectTonalComponents( hTonalMDCTConc, secondLastMDST, secondLastMDST_exp, secondLastMDCT, secondLastMDCT_exp, pitchLag, element_mode ); +#endif } ELSE { @@ -1097,23 +1178,34 @@ void TonalMDCTConceal_Detect( move32(); } +#ifdef HARMONIZE_FUNC + RefineTonalComponents_fx( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak, +#else RefineTonalComponents( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak, - (Word16 *) hTonalMDCTConc->pTCI->lowerIndex, - (Word16 *) hTonalMDCTConc->pTCI->upperIndex, - hTonalMDCTConc->pTCI->phaseDiff, - hTonalMDCTConc->pTCI->phase_currentFramePredicted, - (Word16 *) &hTonalMDCTConc->pTCI->numIndexes, - hTonalMDCTConc->lastPitchLag, - pitchLag, - hTonalMDCTConc->lastBlockData.spectralData, - add( hTonalMDCTConc->lastBlockData.spectralData_exp, hTonalMDCTConc->lastBlockData.gain_tcx_exp ), - hTonalMDCTConc->lastBlockData.scaleFactors, - hTonalMDCTConc->lastBlockData.scaleFactors_exp, - hTonalMDCTConc->lastBlockData.scaleFactors_max_e, - powerSpectrum, - nSamples, - hTonalMDCTConc->nSamplesCore, +#endif + (Word16 *) hTonalMDCTConc->pTCI->lowerIndex, + (Word16 *) hTonalMDCTConc->pTCI->upperIndex, + hTonalMDCTConc->pTCI->phaseDiff, + hTonalMDCTConc->pTCI->phase_currentFramePredicted, + (Word16 *) &hTonalMDCTConc->pTCI->numIndexes, + hTonalMDCTConc->lastPitchLag, + pitchLag, + hTonalMDCTConc->lastBlockData.spectralData, + add( hTonalMDCTConc->lastBlockData.spectralData_exp, hTonalMDCTConc->lastBlockData.gain_tcx_exp ), + hTonalMDCTConc->lastBlockData.scaleFactors, + hTonalMDCTConc->lastBlockData.scaleFactors_exp, + hTonalMDCTConc->lastBlockData.scaleFactors_max_e, + powerSpectrum, +#ifdef HARMONIZE_FUNC + -1, +#endif + nSamples, + hTonalMDCTConc->nSamplesCore, +#ifdef HARMONIZE_FUNC + extract_l( Mpy_32_16_1( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 82 ) ), element_mode, NULL ); +#else extract_l( Mpy_32_16_1( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 82 ) ), element_mode ); /* floorPowerSpectrum */ +#endif } } } @@ -1126,7 +1218,6 @@ void TonalMDCTConceal_Detect( *numIndices = hTonalMDCTConc->pTCI->numIndexes; move16(); - return; } @@ -1204,7 +1295,11 @@ void TonalMDCTConceal_Detect_ivas_fx( } secondLastMDCT_exp = sub( secondLastMDCT_exp, s ); move16(); +#ifdef HARMONIZE_FUNC + CalcPowerSpecAndDetectTonalComponents_fx( hTonalMDCTConc, secondLastMDST, secondLastMDST_exp, secondLastMDCT, secondLastMDCT_exp, pitchLag, psychParamsCurrent, element_mode ); +#else ivas_CalcPowerSpecAndDetectTonalComponents_fx( hTonalMDCTConc, secondLastMDST, secondLastMDST_exp, secondLastMDCT, secondLastMDCT_exp, pitchLag, psychParamsCurrent, element_mode ); +#endif } ELSE { @@ -1253,24 +1348,28 @@ void TonalMDCTConceal_Detect_ivas_fx( powerSpectrum_exp = sub( 31, sub( shl( sub( Q31 - 3, powerSpectrum_exp ), 1 ), 31 ) ); } +#ifdef HARMONIZE_FUNC + RefineTonalComponents_fx( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak, +#else ivas_RefineTonalComponents_fx( (Word16 *) hTonalMDCTConc->pTCI->indexOfTonalPeak, - (Word16 *) hTonalMDCTConc->pTCI->lowerIndex, - (Word16 *) hTonalMDCTConc->pTCI->upperIndex, - hTonalMDCTConc->pTCI->phaseDiff, - hTonalMDCTConc->pTCI->phase_currentFramePredicted, - (Word16 *) &hTonalMDCTConc->pTCI->numIndexes, - hTonalMDCTConc->lastPitchLag, - pitchLag, - hTonalMDCTConc->lastBlockData.spectralData, - add( hTonalMDCTConc->lastBlockData.spectralData_exp, hTonalMDCTConc->lastBlockData.gain_tcx_exp ), - hTonalMDCTConc->lastBlockData.scaleFactors, - hTonalMDCTConc->lastBlockData.scaleFactors_exp, - hTonalMDCTConc->lastBlockData.scaleFactors_max_e, - powerSpectrum, - powerSpectrum_exp, - nSamples, - hTonalMDCTConc->nSamplesCore, - extract_l( Mpy_32_16_1( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 82 ) ), element_mode, psychParamsCurrent ); /* floorPowerSpectrum */ +#endif + (Word16 *) hTonalMDCTConc->pTCI->lowerIndex, + (Word16 *) hTonalMDCTConc->pTCI->upperIndex, + hTonalMDCTConc->pTCI->phaseDiff, + hTonalMDCTConc->pTCI->phase_currentFramePredicted, + (Word16 *) &hTonalMDCTConc->pTCI->numIndexes, + hTonalMDCTConc->lastPitchLag, + pitchLag, + hTonalMDCTConc->lastBlockData.spectralData, + add( hTonalMDCTConc->lastBlockData.spectralData_exp, hTonalMDCTConc->lastBlockData.gain_tcx_exp ), + hTonalMDCTConc->lastBlockData.scaleFactors, + hTonalMDCTConc->lastBlockData.scaleFactors_exp, + hTonalMDCTConc->lastBlockData.scaleFactors_max_e, + powerSpectrum, + powerSpectrum_exp, + nSamples, + hTonalMDCTConc->nSamplesCore, + extract_l( Mpy_32_16_1( L_mult0( hTonalMDCTConc->nSamples, hTonalMDCTConc->nSamples ), 82 ) ), element_mode, psychParamsCurrent ); /* floorPowerSpectrum */ } } } @@ -2105,7 +2204,7 @@ return; } -void TonalMDCTConceal_InsertNoise( +void TonalMDCTConceal_InsertNoise_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, // Q31- *mdctSpectrum_exp /*OUT*/ Word16 *mdctSpectrum_exp, /*OUT*/ @@ -2401,7 +2500,6 @@ void TonalMDCTConceal_InsertNoise( /*make a headroom for mdct_shaping*/ exp = sub( *mdctSpectrum_exp, SPEC_EXP_DEC ); - IF( exp < 0 ) { *mdctSpectrum_exp = SPEC_EXP_DEC; @@ -2507,7 +2605,7 @@ void TonalMDCTConceal_InsertNoise( return; } -void TonalMDCTConceal_Apply( +void TonalMDCTConceal_Apply_fx( const TonalMDCTConcealPtr hTonalMDCTConc, /*IN */ Word32 *mdctSpectrum, // Q31-*mdctSpectrum_exp /*IN/OUT*/ Word16 *mdctSpectrum_exp /*IN */ @@ -2776,7 +2874,7 @@ void TonalMDCTConceal_Apply_ivas_fx( return; } -void TonalMDCTConceal_SaveTimeSignal( +void TonalMDCTConceal_SaveTimeSignal_fx( TonalMDCTConcealPtr hTonalMDCTConc, Word16 *timeSignal, // Qx Word16 nNewSamples @@ -2873,6 +2971,8 @@ static void CalcPowerSpec( move32(); powerSpec[nSamples - 1] = L_shr( powerSpec[nSamples - 2], 1 ); move32(); + + return; } @@ -3283,4 +3383,6 @@ void TonalMdctConceal_whiten_noise_shape_ivas_fx( } pop_wmops(); + + return; } diff --git a/lib_enc/acelp_core_enc_fx.c b/lib_enc/acelp_core_enc_fx.c index 2168e0e3ac7bb1c27aed46a24252b174116bb3cf..7a7b4ef59d11c970274a9eaa1baf8b1cbfddec07 100644 --- a/lib_enc/acelp_core_enc_fx.c +++ b/lib_enc/acelp_core_enc_fx.c @@ -309,7 +309,11 @@ ivas_error acelp_core_enc_fx( set16_fx( st->mem_MA_fx, 0, M ); /* update synthesis filter memories */ +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); +#else synth_mem_updt2( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); +#endif Copy( hLPDmem->old_exc, old_exc_fx, L_EXC_MEM ); // Q_new Copy( hLPDmem->mem_syn2, hLPDmem->mem_syn1_fx, M ); /* hLPDmem->q_mem_syn */ Copy( hLPDmem->mem_syn2, hLPDmem->mem_syn3, M ); /* hLPDmem->q_mem_syn */ diff --git a/lib_enc/amr_wb_enc_fx.c b/lib_enc/amr_wb_enc_fx.c index 5f14a9b661c6657d491ccde80e3e7f31a5eaaf2c..ca617fec215f42c803a80f11e8674a0e32413835 100644 --- a/lib_enc/amr_wb_enc_fx.c +++ b/lib_enc/amr_wb_enc_fx.c @@ -207,7 +207,11 @@ void amr_wb_enc_fx( set16_fx( st->mem_MA_fx, 0, M ); /* update synthesis filter memories */ +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( L_FRAME, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn1_fx, hLPDmem->mem_syn, ENC ); +#else synth_mem_updt2( L_FRAME, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn1_fx, hLPDmem->mem_syn, ENC ); +#endif Copy( hLPDmem->mem_syn1_fx, hLPDmem->mem_syn2, M ); /* q_mem_syn */ Copy( hLPDmem->old_exc, old_exc, L_EXC_MEM ); /* q_lpd_old_exc */ diff --git a/lib_enc/core_enc_init_fx.c b/lib_enc/core_enc_init_fx.c index 3661adf8a2b67b414b1596779b245a267fbb5d1b..bd95e97bada2b918269d414363c1382a994561c6 100644 --- a/lib_enc/core_enc_init_fx.c +++ b/lib_enc/core_enc_init_fx.c @@ -712,7 +712,11 @@ static void init_acelp_fx( Encoder_State *st, Word16 L_frame_old, const Word16 s Copy( st->lsp_old1_fx, st->lspold_enc_fx, M ); } +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); +#else synth_mem_updt2( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); +#endif /*Mem of deemphasis stay unchanged : hLPDmem->syn*/ { @@ -1689,7 +1693,11 @@ static void init_acelp_ivas_fx( Encoder_State *st, Word16 L_frame_old, Word16 sh /*Mem of deemphasis stay unchanged : hLPDmem->syn*/ IF( hLPDmem != NULL ) { - synth_mem_updt2( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); +#ifdef HARMONIZE_FUNC + synth_mem_updt2_fx( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); +#else + ivas_synth_mem_updt2_fx( st->L_frame, st->last_L_frame, hLPDmem->old_exc, hLPDmem->mem_syn_r, hLPDmem->mem_syn2, hLPDmem->mem_syn, ENC ); +#endif Word16 tmp, A[M + 1], Ap[M + 1], tmp_buf[M + 1]; /* Update wsyn */ /* lsp2a_stab( st->lsp_old, A, M ); */ diff --git a/lib_enc/pit_enc_fx.c b/lib_enc/pit_enc_fx.c index 404e35dd7dd4aef72f80523052297e1a242f1264..30c2b493d43a45c0aeabf6c2d06e60dc6886dfc4 100644 --- a/lib_enc/pit_enc_fx.c +++ b/lib_enc/pit_enc_fx.c @@ -17,6 +17,10 @@ #define inv_T0_res InvIntTable static void limit_T0_voiced2( Word16 res, const Word16 *T_op, Word16 *T0_min, Word16 *T0_min_frac, Word16 *T0_max, Word16 *T0_max_frac, Word16 pit_min, Word16 pit_max, Word16 i_subfr ); +#ifdef HARMONIZE_FUNC +static void norm_corr_ivas_fx( const Word16 exc[], const Word16 xn[], const Word16 h[], const Word16 t_min, const Word16 t_max, Word16 ncorr[], const Word16 L_subfr, Word16 Q_new ); +#endif + /*==============================================================================*/ /* FUNCTION : pit_encode_fx() */ @@ -951,7 +955,11 @@ Word16 pitch_fr4_fx( * excitation) *---------------------------------------------------------------------*/ +#ifdef HARMONIZE_FUNC +static void norm_corr_ivas_fx( +#else void norm_corr_ivas_fx( +#endif const Word16 exc[], /* i : excitation buffer Q_new */ const Word16 xn[], /* i : target signal Q_new-1 */ const Word16 h[], /* i : weighted synthesis filter impulse response Q(14 - norm_s(h[0])) */ diff --git a/lib_enc/prot_fx_enc.h b/lib_enc/prot_fx_enc.h index ab96335fcdccbc2f54a83cacc8ad3d3892c195c0..d4b0dfbb1ee119d90cceb2bcb3e62b144f005e28 100644 --- a/lib_enc/prot_fx_enc.h +++ b/lib_enc/prot_fx_enc.h @@ -789,6 +789,7 @@ void norm_corr_fx( const Word16 L_subfr /* i : subframe size */ ); +#ifndef HARMONIZE_FUNC void norm_corr_ivas_fx( const Word16 exc[], /* i : excitation buffer Q_new */ const Word16 xn[], /* i : target signal Q_new-1 */ @@ -799,7 +800,7 @@ void norm_corr_ivas_fx( const Word16 L_subfr, /* i : subframe size */ Word16 Q_new /* i */ ); - +#endif Word16 peak_avrg_ratio_fx( const Word32 total_brate, /* Q0 */ const Word32 *input_hi_fx, /* i : i signal Q_coeff*/