annotate libgsmhr1/sp_enc.c @ 630:f85ef5c4d044

libgsmhr1: provide sizes of state structures
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 12 Mar 2026 06:19:12 +0000
parents c15ae3f06ee9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /***************************************************************************
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 * File Name: sp_enc.c
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * Purpose: Contains speech encoder function. Calls are made to the
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * frame-based encoding functions (see sp_frm.c), and the subframe-
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 * based encoding function (see sp_sfrm.c)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 * Functions in this file (only 1)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * speechEncoder()
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 **************************************************************************/
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 /*_________________________________________________________________________
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 | |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 | Include Files |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 |_________________________________________________________________________|
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
19 #include <stdint.h>
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
20 #include "typedefs.h"
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
21 #include "tw_gsmhr.h"
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
22 #include "namespace.h"
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 #include "mathhalf.h"
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 #include "mathdp31.h"
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 #include "sp_rom.h"
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
26 #include "dec_func.h"
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
27 #include "dtx_rxfe.h"
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
28 #include "enc_state.h"
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "sp_frm.h"
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "sp_sfrm.h"
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
31 #include "enc_out_order.h"
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "vad.h"
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 /*_________________________________________________________________________
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 | |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 | Local Defines |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 |_________________________________________________________________________|
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 #define CG_INT_MACS 6 /* Number of Multiply-Accumulates in */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 /* one interpolation */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 #define ASCALE 0x0800
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 #define LMAX 142 /* largest lag (integer sense) */
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
44 #define LSMAX (LMAX + CG_INT_MACS/2) /* Lag Search Array Length */
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 #define NUM_CLOSED 3 /* Maximum number of lags searched */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 /* in closed loop. */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 #define LPCSTARTINDEX 25 /* Where the LPC analysis window
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 * starts */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 #define INBUFFSZ LPCSTARTINDEX + A_LEN /* Input buffer size */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 #define NUMSTARTUPSMP INBUFFSZ - F_LEN /* Number of samples needed */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 /* at start up */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 #define NUMSTARTUPSMP_P1 INBUFFSZ - F_LEN + 1
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 #define HPFSHIFT 1 /* no right shifts high pass shifts
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 * speech */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
57 static void preen_clear_3lsb(const int16_t *in, Shortword *out)
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
58 {
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
59 int i;
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
61 for (i = 0; i < F_LEN; i++)
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
62 out[i] = in[i] & 0xFFF8;
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
63 }
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
65 static int check_for_ehf(const Shortword *frame)
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
66 {
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
67 int i;
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
69 for (i = 0; i < F_LEN; i++) {
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
70 if (frame[i] != 0x0008)
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
71 return 0;
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
72 }
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
73 return 1;
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
74 }
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 /***************************************************************************
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 * FUNCTION NAME: speechEncoder
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 * PURPOSE:
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 * Performs GSM half-rate speech encoding on frame basis (160 samples).
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 * INPUTS:
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 * pswSpeechIn[0:159] - input speech samples, 160 new samples per frame
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 * OUTPUTS:
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 * pswFrmCodes[0:19] - output parameters, 18 speech parameters plus
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 * VAD and SP flags
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 * RETURN VALUE:
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 * None
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 * IMPLEMENTATION:
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 * n/a
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 * REFERENCES: Sub-clause 4.1 of GSM Recomendation 06.20
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 * KEYWORDS: speechcoder, analysis
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 *
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 *************************************************************************/
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
107 void gsmhr_encode_frame(struct gsmhr_encoder_state *st, const int16_t *pcm_in,
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
108 int16_t *param_out)
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 {
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
110 /* preened speech input, formerly input to speechEncoder() */
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
111 Shortword pswSpeechIn[F_LEN];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
112 int reset_flag;
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
114 /* former static variables, converted to automatic */
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 /* 1st point in analysis window */
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
117 Shortword *pswLpcStart = &st->pswSpeech[LPCSTARTINDEX];
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 /* 1st point of new frame other than 1st */
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
120 Shortword *pswNewSpeech = &st->pswSpeech[NUMSTARTUPSMP];
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 /* sample 0 of weighted speech */
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
123 Shortword *pswWgtSpeech = &st->pswWgtSpeechSpace[LSMAX];
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
125 struct NormSw *psnsWSfrmEng = &st->psnsWSfrmEngSpace[N_SUB];
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 /*_________________________________________________________________________
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 | |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 | Automatic Variables |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 |_________________________________________________________________________|
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 int iVoicing, /* bitAlloc */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 iR0, /* bitAlloc and aflat */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 piVq[3], /* bitAlloc */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 iSi, /* bitAlloc */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 piLagCode[N_SUB], /* bitAlloc */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 piVSCode1[N_SUB], /* bitAlloc */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 piVSCode2[N_SUB], /* bitAlloc */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 piGsp0Code[N_SUB]; /* bitAlloc */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 short int siUVCode,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 siSi,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 i,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 j;
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 Shortword swR0,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 pswLagCode[N_SUB],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 pswVSCode1[N_SUB],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 pswVSCode2[N_SUB],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 pswGsp0Code[N_SUB],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 *pswLagListPtr,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 pswFrmKs[NP],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 pswFrmAs[NP],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 pswFrmSNWCoefs[NP],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 pswLagList[N_SUB * NUM_CLOSED],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 pswNumLagList[N_SUB],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 pswPitchBuf[N_SUB],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 pswHNWCoefBuf[N_SUB],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 ppswSNWCoefAs[N_SUB][NP],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 ppswSynthAs[N_SUB][NP];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 Shortword swSP,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 pswVadLags[4], /* VAD Parameters */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 swVadFlag; /* flag indicating voice activity
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 * detector state. 1 = speech or
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 * speech/signal present */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 struct NormSw
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 psnsSqrtRs[N_SUB];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
171 int giSfrmCnt;
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
172 short siPrevLagCode;
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
173
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 /*_________________________________________________________________________
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 | |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 | Executable Code |
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 |_________________________________________________________________________|
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
180 preen_clear_3lsb(pcm_in, pswSpeechIn);
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
181 reset_flag = check_for_ehf(pswSpeechIn);
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
182
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 /* Speech frame processing */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 /* High pass filter the speech */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 /* ---------------------------- */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 filt4_2nd(psrHPFCoefs, pswSpeechIn,
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
188 st->pswHPFXState, st->pswHPFYState, F_LEN, HPFSHIFT);
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 /* copy high passed filtered speech into encoder's speech buff */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 /*-------------------------------------------------------------*/
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 for (i = 0; i < F_LEN; i++)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 pswNewSpeech[i] = pswSpeechIn[i];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 /* Calculate and quantize LPC coefficients */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 /* --------------------------------------- */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
200 aflat(st, pswLpcStart, &iR0, pswFrmKs, piVq,
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
201 st->swPtch, &swVadFlag, &swSP);
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 /* Lookup frame energy r0 */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 /* ---------------------- */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 swR0 = psrR0DecTbl[iR0 * 2]; /* lookupR0 */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 /* Generate the direct form coefs */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 /* ------------------------------ */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 if (!rcToADp(ASCALE, pswFrmKs, pswFrmAs))
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 {
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 getNWCoefs(pswFrmAs, pswFrmSNWCoefs);
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 else
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 {
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 for (i = 0; i < NP; i++)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 {
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
222 pswFrmKs[i] = st->pswOldFrmKs[i];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
223 pswFrmAs[i] = st->pswOldFrmAs[i];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
224 pswFrmSNWCoefs[i] = st->pswOldFrmSNWCoefs[i];
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 /* Interpolate, or otherwise get sfrm reflection coefs */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 /* --------------------------------------------------- */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
231 getSfrmLpcTx(st, st->swOldR0, swR0,
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
232 st->pswOldFrmKs, st->pswOldFrmAs,
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
233 st->pswOldFrmSNWCoefs,
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 pswFrmKs, pswFrmAs,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 pswFrmSNWCoefs,
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
236 st->pswSpeech,
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 &siSi,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 psnsSqrtRs,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 ppswSynthAs, ppswSNWCoefAs);
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 /* loose once bitAlloc done */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 iSi = siSi;
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 /* Weight the entire speech frame */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245 /* ------------------------------ */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
247 weightSpeechFrame(st, st->pswSpeech, ppswSynthAs[0], ppswSNWCoefAs[0],
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
248 st->pswWgtSpeechSpace);
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 /* Perform open-loop lag search, get harmonic-noise-weighting parameters */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251 /* --------------------------------------------------------------------- */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
253 openLoopLagSearch(&st->pswWgtSpeechSpace[LSMAX],
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
254 st->swOldR0Index,
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 (Shortword) iR0,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 &siUVCode,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257 pswLagList,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 pswNumLagList,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259 pswPitchBuf,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 pswHNWCoefBuf,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261 &psnsWSfrmEng[0],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 pswVadLags,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 swSP);
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 iVoicing = siUVCode;
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 /* Using open loop LTP data to calculate swPtch */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 /* parameter */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 /* -------------------------------------------- */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
272 periodicity_update(&st->vad, pswVadLags, &st->swPtch); /* DTX mode */
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 /* Subframe processing loop */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 /* ------------------------ */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 pswLagListPtr = pswLagList;
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 for (giSfrmCnt = 0; giSfrmCnt < N_SUB; giSfrmCnt++)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 {
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
283 /* DTX mode */
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
284 if (swSP == 0)
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
285 {
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
286 pswVSCode1[giSfrmCnt] = st->pswCNVSCode1[giSfrmCnt];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
287 pswVSCode2[giSfrmCnt] = st->pswCNVSCode2[giSfrmCnt];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
288 pswGsp0Code[giSfrmCnt] = st->pswCNGsp0Code[giSfrmCnt];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
289 }
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
291 sfrmAnalysis(st, &pswWgtSpeech[giSfrmCnt * S_LEN],
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 siUVCode,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
293 psnsSqrtRs[giSfrmCnt],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294 ppswSNWCoefAs[giSfrmCnt],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 pswLagListPtr,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296 pswNumLagList[giSfrmCnt],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297 pswPitchBuf[giSfrmCnt],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298 pswHNWCoefBuf[giSfrmCnt],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
299 &pswLagCode[giSfrmCnt], &pswVSCode1[giSfrmCnt],
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
300 &pswVSCode2[giSfrmCnt], &pswGsp0Code[giSfrmCnt],
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
301 swSP, giSfrmCnt, &siPrevLagCode);
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303 pswLagListPtr = &pswLagListPtr[pswNumLagList[giSfrmCnt]];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
305 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
307
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 /* copy comfort noise parameters, */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
309 /* update GS history */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 /* ------------------------------ */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 if (swSP == 0) /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
313 { /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315 /* copy comfort noise frame parameter */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 /* ---------------------------------- */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
318 iR0 = st->swCNR0; /* quantized R0 index */ /* DTX mode */
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 for (i=0; i < 3; i++) /* DTX mode */
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
320 piVq[i] = st->pswCNLpc[i]; /* DTX mode */
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 } /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 else /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324 { /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 /* if swSP != 0, then update the GS history */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 /* -----------------------------------------*/ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 for (i=0; i < N_SUB; i++){ /* DTX mode */
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
330 st->pL_GsHist[st->swTxGsHistPtr] = /* DTX mode */
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 ppLr_gsTable[siUVCode][pswGsp0Code[i]]; /* DTX mode */
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
332 st->swTxGsHistPtr++; /* DTX mode */
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
333 if (st->swTxGsHistPtr > ((OVERHANG-1)*N_SUB)-1) /* DTX mode */
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
334 st->swTxGsHistPtr=0; /* DTX mode */
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
335 } /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337 } /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340 /* End of frame processing, update frame based parameters */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341 /* ------------------------------------------------------ */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 for (i = 0; i < N_SUB; i++)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 {
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
345 piLagCode[i] = pswLagCode[i];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
346 piVSCode1[i] = pswVSCode1[i];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
347 piVSCode2[i] = pswVSCode2[i];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
348 piGsp0Code[i] = pswGsp0Code[i];
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
349 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
350
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
351 st->swOldR0Index = (Shortword) iR0;
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
352 st->swOldR0 = swR0;
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
353
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
354 for (i = 0; i < NP; i++)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
355 {
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
356 st->pswOldFrmKs[i] = pswFrmKs[i];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
357 st->pswOldFrmAs[i] = pswFrmAs[i];
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
358 st->pswOldFrmSNWCoefs[i] = pswFrmSNWCoefs[i];
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
359 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
360
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
361 /* Insert SID Codeword */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
362 /* ------------------- */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
363
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
364 if (swSP == 0) /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
365 { /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
366 iVoicing = 0x0003; /* 2 bits */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
367 iSi = 0x0001; /* 1 bit */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
368 for (i=0; i < N_SUB; i++) /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
369 { /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
370 piVSCode1[i] = 0x01ff; /* 9 bits */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
371 piGsp0Code[i] = 0x001f; /* 5 bits */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
372 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
373 piLagCode[0] = 0x00ff; /* 8 bits */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
374 piLagCode[1] = 0x000f; /* 4 bits */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
375 piLagCode[2] = 0x000f; /* 4 bits */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
376 piLagCode[3] = 0x000f; /* 4 bits */ /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
377 } /* DTX mode */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
378
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
379
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
380 /* Generate encoded parameter array */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
381 /* -------------------------------- */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
382
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
383 fillBitAlloc(iVoicing, iR0, piVq, iSi, piLagCode,
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
384 piVSCode1, piVSCode2,
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
385 piGsp0Code, swVadFlag, swSP, param_out);
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
386
626
c15ae3f06ee9 libgsmhr1: implement encoder homing logic
Mychaela Falconia <falcon@freecalypso.org>
parents: 625
diff changeset
387 /* homing logic, originally resided outside of speechEncoder() */
c15ae3f06ee9 libgsmhr1: implement encoder homing logic
Mychaela Falconia <falcon@freecalypso.org>
parents: 625
diff changeset
388 if (reset_flag)
c15ae3f06ee9 libgsmhr1: implement encoder homing logic
Mychaela Falconia <falcon@freecalypso.org>
parents: 625
diff changeset
389 {
c15ae3f06ee9 libgsmhr1: implement encoder homing logic
Mychaela Falconia <falcon@freecalypso.org>
parents: 625
diff changeset
390 gsmhr_encoder_reset(st, st->dtx_mode);
c15ae3f06ee9 libgsmhr1: implement encoder homing logic
Mychaela Falconia <falcon@freecalypso.org>
parents: 625
diff changeset
391 return;
c15ae3f06ee9 libgsmhr1: implement encoder homing logic
Mychaela Falconia <falcon@freecalypso.org>
parents: 625
diff changeset
392 }
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
393
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
394 /* delay the input speech by 1 frame */
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
395 /*-----------------------------------*/
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
396
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
397 for (i = 0, j = F_LEN; j < INBUFFSZ; i++, j++)
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
398 {
625
d46c2e4c4392 libgsmhr1: integrate sp_enc.c, encoder main function
Mychaela Falconia <falcon@freecalypso.org>
parents: 623
diff changeset
399 st->pswSpeech[i] = st->pswSpeech[j];
623
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
400 }
6366902640fd libgsmhr1/sp_enc.c: import original
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
401 }