mer feb 12 14:56:57 CET 2003
[asterisk/asterisk.git] / codecs / lpc10 / lpcenc.c
1 /*
2
3 $Log$
4 Revision 1.14  2003/02/12 13:59:15  matteo
5 mer feb 12 14:56:57 CET 2003
6
7 Revision 1.1.1.1  2003/02/12 13:59:15  matteo
8 mer feb 12 14:56:57 CET 2003
9
10 Revision 1.2  2000/01/05 08:20:39  markster
11 Some OSS fixes and a few lpc changes to make it actually work
12
13  * Revision 1.2  1996/08/20  20:31:21  jaf
14  * Removed all static local variables that were SAVE'd in the Fortran
15  * code, and put them in struct lpc10_encoder_state that is passed as an
16  * argument.
17  *
18  * Removed init function, since all initialization is now done in
19  * init_lpc10_encoder_state().
20  *
21  * Changed name of function from lpcenc_ to lpc10_encode, simply to make
22  * all lpc10 functions have more consistent naming with each other.
23  *
24  * Revision 1.1  1996/08/19  22:31:44  jaf
25  * Initial revision
26  *
27
28 */
29
30 #ifdef P_R_O_T_O_T_Y_P_E_S
31 extern int lpcenc_(real *speech, integer *bits);
32 extern int initlpcenc_(void);
33 /*:ref: prepro_ 14 2 6 4 */
34 /*:ref: analys_ 14 5 6 4 4 6 6 */
35 /*:ref: encode_ 14 7 4 4 6 6 4 4 4 */
36 /*:ref: chanwr_ 14 5 4 4 4 4 4 */
37 /*:ref: initprepro_ 14 0 */
38 /*:ref: initanalys_ 14 0 */
39 #endif
40
41 /*  -- translated by f2c (version 19951025).
42    You must link the resulting object file with the libraries:
43         -lf2c -lm   (in that order)
44 */
45
46 #include "f2c.h"
47
48 /* Table of constant values */
49
50 static integer c__180 = 180;
51 static integer c__10 = 10;
52
53 /* ***************************************************************** */
54
55 /* $Log$
56  * Revision 1.14  2003/02/12 13:59:15  matteo
57  * mer feb 12 14:56:57 CET 2003
58  *
59 /* Revision 1.1.1.1  2003/02/12 13:59:15  matteo
60 /* mer feb 12 14:56:57 CET 2003
61 /*
62 /* Revision 1.2  2000/01/05 08:20:39  markster
63 /* Some OSS fixes and a few lpc changes to make it actually work
64 /*
65  * Revision 1.2  1996/08/20  20:31:21  jaf
66  * Removed all static local variables that were SAVE'd in the Fortran
67  * code, and put them in struct lpc10_encoder_state that is passed as an
68  * argument.
69  *
70  * Removed init function, since all initialization is now done in
71  * init_lpc10_encoder_state().
72  *
73  * Changed name of function from lpcenc_ to lpc10_encode, simply to make
74  * all lpc10 functions have more consistent naming with each other.
75  *
76  * Revision 1.1  1996/08/19  22:31:44  jaf
77  * Initial revision
78  * */
79 /* Revision 1.2  1996/03/28  00:01:22  jaf */
80 /* Commented out some trace statements. */
81
82 /* Revision 1.1  1996/03/28  00:00:27  jaf */
83 /* Initial revision */
84
85
86 /* ***************************************************************** */
87
88 /* Encode one frame of 180 speech samples to 54 bits. */
89
90 /* Input: */
91 /*  SPEECH - Speech encoded as real values in the range [-1,+1]. */
92 /*           Indices 1 through 180 read, and modified (by PREPRO). */
93 /* Output: */
94 /*  BITS   - 54 encoded bits, stored 1 per array element. */
95 /*           Indices 1 through 54 written. */
96
97 /* This subroutine maintains local state from one call to the next.  If */
98 /* you want to switch to using a new audio stream for this filter, or */
99 /* reinitialize its state for any other reason, call the ENTRY */
100 /* INITLPCENC. */
101
102 /* Subroutine */ int lpc10_encode(real *speech, integer *bits,
103                                   struct lpc10_encoder_state *st)
104 {
105     integer irms, voice[2], pitch, ipitv;
106     real rc[10];
107     extern /* Subroutine */ int encode_(integer *, integer *, real *, real *, 
108             integer *, integer *, integer *), chanwr_(integer *, integer *, 
109             integer *, integer *, integer *, struct lpc10_encoder_state *),
110             analys_(real *, integer *, 
111             integer *, real *, real *, struct lpc10_encoder_state *),
112             prepro_(real *, integer *, struct lpc10_encoder_state *);
113     integer irc[10];
114     real rms;
115
116 /*       Arguments */
117 /* $Log$
118  * Revision 1.14  2003/02/12 13:59:15  matteo
119  * mer feb 12 14:56:57 CET 2003
120  *
121 /* Revision 1.1.1.1  2003/02/12 13:59:15  matteo
122 /* mer feb 12 14:56:57 CET 2003
123 /*
124 /* Revision 1.2  2000/01/05 08:20:39  markster
125 /* Some OSS fixes and a few lpc changes to make it actually work
126 /*
127  * Revision 1.2  1996/08/20  20:31:21  jaf
128  * Removed all static local variables that were SAVE'd in the Fortran
129  * code, and put them in struct lpc10_encoder_state that is passed as an
130  * argument.
131  *
132  * Removed init function, since all initialization is now done in
133  * init_lpc10_encoder_state().
134  *
135  * Changed name of function from lpcenc_ to lpc10_encode, simply to make
136  * all lpc10 functions have more consistent naming with each other.
137  *
138  * Revision 1.1  1996/08/19  22:31:44  jaf
139  * Initial revision
140  * */
141 /* Revision 1.3  1996/03/29  22:03:47  jaf */
142 /* Removed definitions for any constants that were no longer used. */
143
144 /* Revision 1.2  1996/03/26  19:34:33  jaf */
145 /* Added comments indicating which constants are not needed in an */
146 /* application that uses the LPC-10 coder. */
147
148 /* Revision 1.1  1996/02/07  14:43:51  jaf */
149 /* Initial revision */
150
151 /*   LPC Configuration parameters: */
152 /* Frame size, Prediction order, Pitch period */
153 /*       Local variables that need not be saved */
154 /*       Uncoded speech parameters */
155 /*       Coded speech parameters */
156 /*       Local state */
157 /*       None */
158     /* Parameter adjustments */
159     if (speech) {
160         --speech;
161         }
162     if (bits) {
163         --bits;
164         }
165
166     /* Function Body */
167     prepro_(&speech[1], &c__180, st);
168     analys_(&speech[1], voice, &pitch, &rms, rc, st);
169     encode_(voice, &pitch, &rms, rc, &ipitv, &irms, irc);
170     chanwr_(&c__10, &ipitv, &irms, irc, &bits[1], st);
171     return 0;
172 } /* lpcenc_ */