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