diff libtwamr/lflg_upd.c @ 411:bd5614fc780a

libtwamr: integrate VAD2 lflg_upd.c
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 07 May 2024 01:18:25 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/lflg_upd.c	Tue May 07 01:18:25 2024 +0000
@@ -0,0 +1,85 @@
+/*
+*****************************************************************************
+*
+*      GSM AMR-NB speech codec   R98   Version 7.6.0   December 12, 2001
+*                                R99   Version 3.3.0                
+*                                REL-4 Version 4.1.0                
+*
+*****************************************************************************
+*
+*      File             : lflg_upd.c
+*      Purpose          : LTP_flag update for AMR VAD option 2
+*
+*****************************************************************************
+*/
+
+#include "tw_amr.h"
+#include "namespace.h"
+#include "typedef.h"
+#include "cnst.h"
+#include "basic_op.h"
+#include "oper_32b.h"
+#include "no_count.h"
+#include "vad2.h"
+
+/***************************************************************************
+ *
+ *   FUNCTION NAME: LTP_flag_update
+ *
+ *   PURPOSE:
+ *     Set LTP_flag if the LTP gain > LTP_THRESHOLD, where the value of
+ *     LTP_THRESHOLD depends on the LTP analysis window length.
+ *
+ *   INPUTS:
+ *
+ *     mode
+ *                     AMR mode
+ *     vadState->L_R0
+ *                     LTP energy
+ *     vadState->L_Rmax
+ *                     LTP maximum autocorrelation
+ *   OUTPUTS:
+ *
+ *     vadState->LTP_flag
+ *                     Set if LTP gain > LTP_THRESHOLD
+ *
+ *   RETURN VALUE:
+ *
+ *     none
+ *
+ *************************************************************************/
+
+void LTP_flag_update (vadState2 * st, Word16 mode)
+{
+	Word16 thresh;
+	Word16 hi1;
+	Word16 lo1;
+	Word32 Ltmp;
+
+									test(); test();
+	if ((sub(mode, MR475) == 0) || (sub(mode, MR515) == 0))
+	{
+		thresh = (Word16)(32768.0*0.55);			move16();
+	}
+	else if (sub(mode, MR102) == 0)
+	{
+		thresh = (Word16)(32768.0*0.60);			move16();
+	}
+	else
+	{
+		thresh = (Word16)(32768.0*0.65);			move16();
+	}
+
+	L_Extract (st->L_R0, &hi1, &lo1);
+	Ltmp = Mpy_32_16(hi1, lo1, thresh);				test();
+	if (L_sub(st->L_Rmax, Ltmp) > 0)
+	{
+		st->LTP_flag = TRUE;					move16();
+	}
+	else
+	{
+		st->LTP_flag = FALSE;					move16();
+	}
+
+	return;
+}