aboutsummaryrefslogtreecommitdiffstats
path: root/codecs/gsm/src/lpc.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2001-04-24 02:02:21 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2001-04-24 02:02:21 +0000
commita87669fead1172ebff3c68b4f436e3e829efdcdd (patch)
treeab0754a7aeb97b46d7fb9eabb78f87805b980b19 /codecs/gsm/src/lpc.c
parent1f9a30535942c9b35212651b7346f33824eaf55c (diff)
Version 0.1.8 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@295 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'codecs/gsm/src/lpc.c')
-rwxr-xr-xcodecs/gsm/src/lpc.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/codecs/gsm/src/lpc.c b/codecs/gsm/src/lpc.c
index ac2b8a9eb..4ec52ee01 100755
--- a/codecs/gsm/src/lpc.c
+++ b/codecs/gsm/src/lpc.c
@@ -14,6 +14,10 @@
#include "gsm.h"
#include "proto.h"
+#ifdef K6OPT
+#include "k6opt.h"
+#endif
+
#undef P
/*
@@ -44,12 +48,19 @@ static void Autocorrelation P2((s, L_ACF),
/* Search for the maximum.
*/
+#ifndef K6OPT
smax = 0;
for (k = 0; k <= 159; k++) {
temp = GSM_ABS( s[k] );
if (temp > smax) smax = temp;
}
-
+#else
+ {
+ longword lmax;
+ lmax = k6maxmin(s,160,NULL);
+ smax = (lmax > MAX_WORD) ? MAX_WORD : lmax;
+ }
+#endif
/* Computation of the scaling factor.
*/
if (smax == 0) scalauto = 0;
@@ -62,6 +73,7 @@ static void Autocorrelation P2((s, L_ACF),
*/
if (scalauto > 0) {
+# ifndef K6OPT
# ifdef USE_FLOAT_MUL
# define SCALE(n) \
@@ -83,6 +95,10 @@ static void Autocorrelation P2((s, L_ACF),
SCALE(4)
}
# undef SCALE
+
+# else /* K6OPT */
+ k6vsraw(s,160,scalauto);
+# endif
}
# ifdef USE_FLOAT_MUL
else for (k = 0; k <= 159; k++) float_s[k] = (float) s[k];
@@ -90,6 +106,7 @@ static void Autocorrelation P2((s, L_ACF),
/* Compute the L_ACF[..].
*/
+#ifndef K6OPT
{
# ifdef USE_FLOAT_MUL
register float * sp = float_s;
@@ -136,11 +153,24 @@ static void Autocorrelation P2((s, L_ACF),
for (k = 9; k--; L_ACF[k] <<= 1) ;
}
+
+#else
+ {
+ int k;
+ for (k=0; k<9; k++) {
+ L_ACF[k] = 2*k6iprod(s,s+k,160-k);
+ }
+ }
+#endif
/* Rescaling of the array s[0..159]
*/
if (scalauto > 0) {
assert(scalauto <= 4);
+#ifndef K6OPT
for (k = 160; k--; *s++ <<= scalauto) ;
+# else /* K6OPT */
+ k6vsllw(s,160,scalauto);
+# endif
}
}