FreeCalypso > hg > gsm-codec-lib
changeset 615:5773e3907b86 default tip
libgsmhr1: integrate vad.c
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Thu, 05 Mar 2026 09:05:35 +0000 |
| parents | cf74197b9d4f |
| children | |
| files | libgsmhr1/Makefile libgsmhr1/namespace.list libgsmhr1/vad.c libgsmhr1/vad.h |
| diffstat | 4 files changed, 131 insertions(+), 282 deletions(-) [+] |
line wrap: on
line diff
--- a/libgsmhr1/Makefile Thu Mar 05 08:02:35 2026 +0000 +++ b/libgsmhr1/Makefile Thu Mar 05 09:05:35 2026 +0000 @@ -3,10 +3,10 @@ pack_frame.o paramval_cod.o paramval_common.o paramval_dec.o rtp_in.o \ rtp_in_direct.o rxfe.o rxfe_create.o sid_cw_params.o sid_detect.o \ sid_reset.o sp_dec.o sp_rom.o tfo.o twts002_in.o twts002_out.o \ - unpack_frame.o + unpack_frame.o vad.o HDRS= dec_func.h dec_state.h dtx_const.h dtx_dec.h dtx_enc.h dtx_rxfe.h \ enc_out_order.h enc_state.h err_conc.h mathdp31.h mathhalf.h \ - namespace.h rxfe.h sp_rom.h tw_gsmhr.h typedefs.h + namespace.h rxfe.h sp_rom.h tw_gsmhr.h typedefs.h vad.h LIB= libgsmhr1.a include ../config.defs
--- a/libgsmhr1/namespace.list Thu Mar 05 08:02:35 2026 +0000 +++ b/libgsmhr1/namespace.list Thu Mar 05 09:05:35 2026 +0000 @@ -34,3 +34,7 @@ level_calc level_estimator_det level_estimator_upd signal_conceal_sub avgCNHist swComfortNoise updateCNHist lpcCorrQntz + +vad_algorithm energy_computation average_acf predictor_values schur_recursion +step_up compute_rav1 spectral_comparison tone_detection threshold_adaptation +vad_decision vad_hangover periodicity_update
--- a/libgsmhr1/vad.c Thu Mar 05 08:02:35 2026 +0000 +++ b/libgsmhr1/vad.c Thu Mar 05 09:05:35 2026 +0000 @@ -15,8 +15,10 @@ */ #include "typedefs.h" +#include "namespace.h" #include "mathhalf.h" #include "mathdp31.h" +#include "enc_state.h" #include "vad.h" @@ -35,82 +37,6 @@ #define M_MARGIN 27343 #define E_MARGIN 27 -/*_________________________________________________________________________ - | | - | Static Variables | - |_________________________________________________________________________| -*/ - -static Shortword - pswRvad[9], - swNormRvad, - swPt_sacf, - swPt_sav0, - swE_thvad, - swM_thvad, - swAdaptCount, - swBurstCount, - swHangCount, - swOldLagCount, - swVeryOldLagCount, - swOldLag; - -static Longword - pL_sacf[27], - pL_sav0[36], - L_lastdm; - -/**************************************************************************** - * - * FUNCTION: vad_reset - * - * VERSION: 1.2 - * - * PURPOSE: Resets VAD static variables to their initial value. - * - ***************************************************************************/ - -void vad_reset(void) - -{ - -/*_________________________________________________________________________ - | | - | Automatic Variables | - |_________________________________________________________________________| -*/ - - int i; - -/*_________________________________________________________________________ - | | - | Executable Code | - |_________________________________________________________________________| -*/ - - pswRvad[0] = 24576; - swNormRvad = 7; - swPt_sacf = 0; - swPt_sav0 = 0; - L_lastdm = 0; - swE_thvad = 21; - swM_thvad = 21875; - swAdaptCount = 0; - swBurstCount = 0; - swHangCount = -1; - swOldLagCount = 0; - swVeryOldLagCount = 0; - swOldLag = 21; - - for (i = 1; i < 9; i++) - pswRvad[i] = 0; - for (i = 0; i < 27; i++) - pL_sacf[i] = 0; - for (i = 0; i < 36; i++) - pL_sav0[i] = 0; - -} - /**************************************************************************** * * FUNCTION: vad_algorithm @@ -129,11 +55,9 @@ * ***************************************************************************/ -void vad_algorithm(Longword pL_acf[9], - Shortword swScaleAcf, - Shortword pswRc[4], - Shortword swPtch, - Shortword *pswVadFlag) +void vad_algorithm(struct vad_state *vst, Longword pL_acf[9], + Shortword swScaleAcf, Shortword pswRc[4], + Shortword swPtch, Shortword *pswVadFlag) { /*_________________________________________________________________________ @@ -165,58 +89,58 @@ */ energy_computation - ( + (vst, pL_acf, swScaleAcf, - pswRvad, swNormRvad, + vst->pswRvad, vst->swNormRvad, &swM_pvad, &swE_pvad, &swM_acf0, &swE_acf0 ); average_acf - ( + (vst, pL_acf, swScaleAcf, pL_av0, pL_av1 ); predictor_values - ( + (vst, pL_av1, pswRav1, &swNormRav1 ); spectral_comparison - ( + (vst, pswRav1, swNormRav1, pL_av0, &swStat ); tone_detection - ( + (vst, pswRc, &swTone ); threshold_adaptation - ( + (vst, swStat, swPtch, swTone, pswRav1, swNormRav1, swM_pvad, swE_pvad, swM_acf0, swE_acf0, - pswRvad, &swNormRvad, - &swM_thvad, &swE_thvad + vst->pswRvad, &vst->swNormRvad, + &vst->swM_thvad, &vst->swE_thvad ); vad_decision - ( + (vst, swM_pvad, swE_pvad, - swM_thvad, swE_thvad, + vst->swM_thvad, vst->swE_thvad, &swVvad ); vad_hangover - ( + (vst, swVvad, pswVadFlag ); @@ -244,14 +168,11 @@ * ***************************************************************************/ -void energy_computation(Longword pL_acf[], - Shortword swScaleAcf, - Shortword pswRvad[], - Shortword swNormRvad, - Shortword *pswM_pvad, - Shortword *pswE_pvad, - Shortword *pswM_acf0, - Shortword *pswE_acf0) +void energy_computation(struct vad_state *vst, Longword pL_acf[], + Shortword swScaleAcf, Shortword pswRvad[], + Shortword swNormRvad, Shortword *pswM_pvad, + Shortword *pswE_pvad, Shortword *pswM_acf0, + Shortword *pswE_acf0) { /*_________________________________________________________________________ @@ -344,10 +265,8 @@ * ***************************************************************************/ -void average_acf(Longword pL_acf[], - Shortword swScaleAcf, - Longword pL_av0[], - Longword pL_av1[]) +void average_acf(struct vad_state *vst, Longword pL_acf[], + Shortword swScaleAcf, Longword pL_av0[], Longword pL_av1[]) { /*_________________________________________________________________________ @@ -378,26 +297,26 @@ for (i = 0; i <= 8; i++) { L_temp = L_shr(pL_acf[i], swScale); - pL_av0[i] = L_add(pL_sacf[i], L_temp); - pL_av0[i] = L_add(pL_sacf[i + 9], pL_av0[i]); - pL_av0[i] = L_add(pL_sacf[i + 18], pL_av0[i]); - pL_sacf[swPt_sacf + i] = L_temp; - pL_av1[i] = pL_sav0[swPt_sav0 + i]; - pL_sav0[swPt_sav0 + i] = pL_av0[i]; + pL_av0[i] = L_add(vst->pL_sacf[i], L_temp); + pL_av0[i] = L_add(vst->pL_sacf[i + 9], pL_av0[i]); + pL_av0[i] = L_add(vst->pL_sacf[i + 18], pL_av0[i]); + vst->pL_sacf[vst->swPt_sacf + i] = L_temp; + pL_av1[i] = vst->pL_sav0[vst->swPt_sav0 + i]; + vst->pL_sav0[vst->swPt_sav0 + i] = pL_av0[i]; } /*** Update the array pointers ***/ - if (swPt_sacf == 18) - swPt_sacf = 0; + if (vst->swPt_sacf == 18) + vst->swPt_sacf = 0; else - swPt_sacf = add(swPt_sacf, 9); + vst->swPt_sacf = add(vst->swPt_sacf, 9); - if (swPt_sav0 == 27) - swPt_sav0 = 0; + if (vst->swPt_sav0 == 27) + vst->swPt_sav0 = 0; else - swPt_sav0 = add(swPt_sav0, 9); + vst->swPt_sav0 = add(vst->swPt_sav0, 9); } @@ -417,9 +336,8 @@ * ***************************************************************************/ -void predictor_values(Longword pL_av1[], - Shortword pswRav1[], - Shortword *pswNormRav1) +void predictor_values(struct vad_state *vst, Longword pL_av1[], + Shortword pswRav1[], Shortword *pswNormRav1) { /*_________________________________________________________________________ @@ -438,9 +356,9 @@ |_________________________________________________________________________| */ - schur_recursion(pL_av1, pswVpar); - step_up(8, pswVpar, pswAav1); - compute_rav1(pswAav1, pswRav1, pswNormRav1); + schur_recursion(vst, pL_av1, pswVpar); + step_up(vst, 8, pswVpar, pswAav1); + compute_rav1(vst, pswAav1, pswRav1, pswNormRav1); } @@ -459,8 +377,8 @@ * ***************************************************************************/ -void schur_recursion(Longword pL_av1[], - Shortword pswVpar[]) +void schur_recursion(struct vad_state *vst, Longword pL_av1[], + Shortword pswVpar[]) { /*_________________________________________________________________________ @@ -558,9 +476,8 @@ * ***************************************************************************/ -void step_up(Shortword swNp, - Shortword pswVpar[], - Shortword pswAav1[]) +void step_up(struct vad_state *vst, Shortword swNp, Shortword pswVpar[], + Shortword pswAav1[]) { /*_________________________________________________________________________ @@ -631,9 +548,8 @@ * ***************************************************************************/ -void compute_rav1(Shortword pswAav1[], - Shortword pswRav1[], - Shortword *pswNormRav1) +void compute_rav1(struct vad_state *vst, Shortword pswAav1[], + Shortword pswRav1[], Shortword *pswNormRav1) { /*_________________________________________________________________________ @@ -693,10 +609,9 @@ * ***************************************************************************/ -void spectral_comparison(Shortword pswRav1[], - Shortword swNormRav1, - Longword pL_av0[], - Shortword *pswStat) +void spectral_comparison(struct vad_state *vst, Shortword pswRav1[], + Shortword swNormRav1, Longword pL_av0[], + Shortword *pswStat) { /*_________________________________________________________________________ @@ -799,8 +714,8 @@ /*** Compute the difference and save L_dm ***/ - L_temp = L_sub(L_dm, L_lastdm); - L_lastdm = L_dm; + L_temp = L_sub(L_dm, vst->L_lastdm); + vst->L_lastdm = L_dm; if (L_temp < 0L) L_temp = L_negate(L_temp); @@ -833,8 +748,8 @@ * ***************************************************************************/ -void tone_detection(Shortword pswRc[4], - Shortword *pswTone) +void tone_detection(struct vad_state *vst, Shortword pswRc[4], + Shortword *pswTone) { /*_________________________________________________________________________ @@ -867,7 +782,7 @@ /*** Calculate filter coefficients ***/ - step_up(2, pswRc, pswA); + step_up(vst, 2, pswRc, pswA); /*** Calculate ( a[1] * a[1] ) ***/ @@ -945,19 +860,13 @@ * ***************************************************************************/ -void threshold_adaptation(Shortword swStat, - Shortword swPtch, - Shortword swTone, - Shortword pswRav1[], - Shortword swNormRav1, - Shortword swM_pvad, - Shortword swE_pvad, - Shortword swM_acf0, - Shortword swE_acf0, - Shortword pswRvad[], - Shortword *pswNormRvad, - Shortword *pswM_thvad, - Shortword *pswE_thvad) +void threshold_adaptation(struct vad_state *vst, Shortword swStat, + Shortword swPtch, Shortword swTone, + Shortword pswRav1[], Shortword swNormRav1, + Shortword swM_pvad, Shortword swE_pvad, + Shortword swM_acf0, Shortword swE_acf0, + Shortword pswRvad[], Shortword *pswNormRvad, + Shortword *pswM_thvad, Shortword *pswE_thvad) { /*_________________________________________________________________________ @@ -1015,15 +924,15 @@ if (swComp == 1) { - swAdaptCount = 0; + vst->swAdaptCount = 0; return; } /*** Increment adaptcount ***/ - swAdaptCount = add(swAdaptCount, 1); - if (swAdaptCount <= 8) + vst->swAdaptCount = add(vst->swAdaptCount, 1); + if (vst->swAdaptCount <= 8) return; @@ -1165,7 +1074,7 @@ /*** Set adaptcount to adp + 1 ***/ - swAdaptCount = 9; + vst->swAdaptCount = 9; } @@ -1187,11 +1096,9 @@ * ***************************************************************************/ -void vad_decision(Shortword swM_pvad, - Shortword swE_pvad, - Shortword swM_thvad, - Shortword swE_thvad, - Shortword *pswVvad) +void vad_decision(struct vad_state *vst, Shortword swM_pvad, + Shortword swE_pvad, Shortword swM_thvad, + Shortword swE_thvad, Shortword *pswVvad) { /*_________________________________________________________________________ @@ -1224,8 +1131,8 @@ * ***************************************************************************/ -void vad_hangover(Shortword swVvad, - Shortword *pswVadFlag) +void vad_hangover(struct vad_state *vst, Shortword swVvad, + Shortword *pswVadFlag) { /*_________________________________________________________________________ @@ -1235,22 +1142,22 @@ */ if (swVvad == 1) - swBurstCount = add(swBurstCount, 1); + vst->swBurstCount = add(vst->swBurstCount, 1); else - swBurstCount = 0; + vst->swBurstCount = 0; - if (swBurstCount >= 3) + if (vst->swBurstCount >= 3) { - swHangCount = 5; - swBurstCount = 3; + vst->swHangCount = 5; + vst->swBurstCount = 3; } *pswVadFlag = swVvad; - if (swHangCount >= 0) + if (vst->swHangCount >= 0) { *pswVadFlag = 1; - swHangCount = sub(swHangCount, 1); + vst->swHangCount = sub(vst->swHangCount, 1); } } @@ -1270,8 +1177,8 @@ * ***************************************************************************/ -void periodicity_update(Shortword pswLags[4], - Shortword *pswPtch) +void periodicity_update(struct vad_state *vst, Shortword pswLags[4], + Shortword *pswPtch) { /*_________________________________________________________________________ @@ -1305,14 +1212,14 @@ { /*** Search the maximum and minimum of consecutive lags ***/ - if (swOldLag > pswLags[i]) + if (vst->swOldLag > pswLags[i]) { swMinLag = pswLags[i]; - swMaxLag = swOldLag; + swMaxLag = vst->swOldLag; } else { - swMinLag = swOldLag; + swMinLag = vst->swOldLag; swMaxLag = pswLags[i]; } @@ -1341,19 +1248,19 @@ /*** Save the current LTP lag ***/ - swOldLag = pswLags[i]; + vst->swOldLag = pswLags[i]; } /*** Update the veryoldlagcount and oldlagcount ***/ - swVeryOldLagCount = swOldLagCount; - swOldLagCount = swLagCount; + vst->swVeryOldLagCount = vst->swOldLagCount; + vst->swOldLagCount = swLagCount; /*** Make ptch decision ready for next frame ***/ - swTemp = add(swOldLagCount, swVeryOldLagCount); + swTemp = add(vst->swOldLagCount, vst->swVeryOldLagCount); if (swTemp >= 7) *pswPtch = 1;
--- a/libgsmhr1/vad.h Thu Mar 05 08:02:35 2026 +0000 +++ b/libgsmhr1/vad.h Thu Mar 05 09:05:35 2026 +0000 @@ -10,116 +10,54 @@ |_________________________________________________________________________| */ -void vad_reset(void); - -void vad_algorithm - ( - Longword pL_acf[9], - Shortword swScaleAcf, - Shortword pswRc[4], - Shortword swPtch, - Shortword *pswVadFlag -); +void vad_algorithm(struct vad_state *vst, Longword pL_acf[9], + Shortword swScaleAcf, Shortword pswRc[4], + Shortword swPtch, Shortword *pswVadFlag); -void energy_computation - ( - Longword pL_acf[], - Shortword swScaleAcf, - Shortword pswRvad[], - Shortword swNormRvad, - Shortword *pswM_pvad, - Shortword *pswE_pvad, - Shortword *pswM_acf0, - Shortword *pswE_acf0 -); - +void energy_computation(struct vad_state *vst, Longword pL_acf[], + Shortword swScaleAcf, Shortword pswRvad[], + Shortword swNormRvad, Shortword *pswM_pvad, + Shortword *pswE_pvad, Shortword *pswM_acf0, + Shortword *pswE_acf0); -void average_acf - ( - Longword pL_acf[], - Shortword swScaleAcf, - Longword pL_av0[], - Longword pL_av1[] -); +void average_acf(struct vad_state *vst, Longword pL_acf[], + Shortword swScaleAcf, Longword pL_av0[], Longword pL_av1[]); + +void predictor_values(struct vad_state *vst, Longword pL_av1[], + Shortword pswRav1[], Shortword *pswNormRav1); -void predictor_values - ( - Longword pL_av1[], - Shortword pswRav1[], - Shortword *pswNormRav1 -); +void schur_recursion(struct vad_state *vst, Longword pL_av1[], + Shortword pswVpar[]); -void schur_recursion - ( - Longword pL_av1[], - Shortword pswVpar[] -); +void step_up(struct vad_state *vst, Shortword swNp, Shortword pswVpar[], + Shortword pswAav1[]); -void step_up - ( - Shortword swNp, - Shortword pswVpar[], - Shortword pswAav1[] -); +void compute_rav1(struct vad_state *vst, Shortword pswAav1[], + Shortword pswRav1[], Shortword *pswNormRav1); -void compute_rav1 - ( - Shortword pswAav1[], - Shortword pswRav1[], - Shortword *pswNormRav1 -); +void spectral_comparison(struct vad_state *vst, Shortword pswRav1[], + Shortword swNormRav1, Longword pL_av0[], + Shortword *pswStat); -void spectral_comparison - ( - Shortword pswRav1[], - Shortword swNormRav1, - Longword pL_av0[], - Shortword *pswStat -); - -void tone_detection - ( - Shortword pswRc[4], - Shortword *pswTone -); - +void tone_detection(struct vad_state *vst, Shortword pswRc[4], + Shortword *pswTone); -void threshold_adaptation - ( - Shortword swStat, - Shortword swPtch, - Shortword swTone, - Shortword pswRav1[], - Shortword swNormRav1, - Shortword swM_pvad, - Shortword swE_pvad, - Shortword swM_acf0, - Shortword swE_acf0, - Shortword pswRvad[], - Shortword *pswNormRvad, - Shortword *pswM_thvad, - Shortword *pswE_thvad -); +void threshold_adaptation(struct vad_state *vst, Shortword swStat, + Shortword swPtch, Shortword swTone, + Shortword pswRav1[], Shortword swNormRav1, + Shortword swM_pvad, Shortword swE_pvad, + Shortword swM_acf0, Shortword swE_acf0, + Shortword pswRvad[], Shortword *pswNormRvad, + Shortword *pswM_thvad, Shortword *pswE_thvad); -void vad_decision - ( - Shortword swM_pvad, - Shortword swE_pvad, - Shortword swM_thvad, - Shortword swE_thvad, - Shortword *pswVvad -); +void vad_decision(struct vad_state *vst, Shortword swM_pvad, + Shortword swE_pvad, Shortword swM_thvad, + Shortword swE_thvad, Shortword *pswVvad); -void vad_hangover - ( - Shortword swVvad, - Shortword *pswVadFlag -); +void vad_hangover(struct vad_state *vst, Shortword swVvad, + Shortword *pswVadFlag); -void periodicity_update - ( - Shortword pswLags[4], - Shortword *pswPtch -); +void periodicity_update(struct vad_state *vst, Shortword pswLags[4], + Shortword *pswPtch); #endif
