diff libtwamr/inter_36.c @ 383:838ed426bb76

libtwamr: integrate inter_36.c
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 06 May 2024 05:49:47 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libtwamr/inter_36.c	Mon May 06 05:49:47 2024 +0000
@@ -0,0 +1,93 @@
+/*
+********************************************************************************
+*
+*      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             : inter_36.c
+*      Purpose          : Interpolating the normalized correlation
+*                       : with 1/3 or 1/6 resolution.
+*
+********************************************************************************
+*/
+/*
+********************************************************************************
+*                         MODULE INCLUDE FILE AND VERSION ID
+********************************************************************************
+*/
+#include "namespace.h"
+#include "inter_36.h"
+ 
+/*
+********************************************************************************
+*                         INCLUDE FILES
+********************************************************************************
+*/
+#include "typedef.h"
+#include "basic_op.h"
+#include "no_count.h"
+#include "cnst.h"
+
+/*
+********************************************************************************
+*                         LOCAL VARIABLES AND TABLES
+********************************************************************************
+*/
+#define UP_SAMP_MAX  6
+
+#include "inter_36.tab"
+
+/*
+********************************************************************************
+*                         PUBLIC PROGRAM CODE
+********************************************************************************
+*/
+/*************************************************************************
+ *
+ *  FUNCTION:  Interpol_3or6()
+ *
+ *  PURPOSE:  Interpolating the normalized correlation with 1/3 or 1/6
+ *            resolution.
+ *
+ *************************************************************************/
+Word16 Interpol_3or6 (  /* o : interpolated value                        */
+    Word16 *x,          /* i : input vector                              */
+    Word16 frac,        /* i : fraction  (-2..2 for 3*, -3..3 for 6*)    */
+    Word16 flag3        /* i : if set, upsampling rate = 3 (6 otherwise) */
+)
+{
+    Word16 i, k;
+    Word16 *x1, *x2;
+    const Word16 *c1, *c2;
+    Word32 s;
+
+    test();
+    if (flag3 != 0)
+    {
+      frac = shl (frac, 1);   /* inter_3[k] = inter_6[2*k] -> k' = 2*k */
+    }
+    
+    test (); 
+    if (frac < 0)
+    {
+        frac = add (frac, UP_SAMP_MAX);
+        x--;
+    }
+    
+    x1 = &x[0];                         move16 (); 
+    x2 = &x[1];                         move16 (); 
+    c1 = &inter_6[frac];                move16 (); 
+    c2 = &inter_6[sub (UP_SAMP_MAX, frac)]; move16 (); 
+
+    s = 0;                              move32 (); 
+    for (i = 0, k = 0; i < L_INTER_SRCH; i++, k += UP_SAMP_MAX)
+    {
+        s = L_mac (s, x1[-i], c1[k]);
+        s = L_mac (s, x2[i], c2[k]);
+    }
+
+    return round (s);
+}