00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "config.h"
00010
00011 #ifdef HAS_STRING_H
00012 #include <string.h>
00013 #else
00014 # include "proto.h"
00015 extern char * memcpy P((char *, char *, int));
00016 #endif
00017
00018 #include "private.h"
00019 #include "gsm.h"
00020 #include "proto.h"
00021
00022
00023
00024
00025
00026 void Gsm_Coder P8((S,s,LARc,Nc,bc,Mc,xmaxc,xMc),
00027
00028 struct gsm_state * S,
00029
00030 word * s,
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 word * LARc,
00043
00044
00045
00046
00047
00048
00049
00050 word * Nc,
00051 word * bc,
00052 word * Mc,
00053 word * xmaxc,
00054 word * xMc
00055 )
00056 {
00057 int k;
00058 word * dp = S->dp0 + 120;
00059 word * dpp = dp;
00060
00061 static word e[50];
00062
00063 word so[160];
00064
00065 #if !(defined(__GNUC__) && defined(__i386__))
00066 longword ltmp;
00067 #endif
00068
00069 Gsm_Preprocess (S, s, so);
00070 Gsm_LPC_Analysis (S, so, LARc);
00071 Gsm_Short_Term_Analysis_Filter (S, LARc, so);
00072
00073 for (k = 0; k <= 3; k++, xMc += 13) {
00074
00075 Gsm_Long_Term_Predictor ( S,
00076 so+k*40,
00077 dp,
00078 e + 5,
00079 dpp,
00080 Nc++,
00081 bc++);
00082
00083 Gsm_RPE_Encoding ( S,
00084 e + 5,
00085 xmaxc++, Mc++, xMc );
00086
00087
00088
00089
00090
00091 { register int i;
00092 for (i = 0; i <= 39; i++)
00093 dp[ i ] = GSM_ADD( e[5 + i], dpp[i] );
00094 }
00095 dp += 40;
00096 dpp += 40;
00097
00098 }
00099 (void)memcpy( (char *)S->dp0, (char *)(S->dp0 + 160),
00100 120 * sizeof(*S->dp0) );
00101 }