annotate libtwamr/cod_amr.c @ 585:3c6bf0d26ee7 default tip

TW-TS-005 reader: fix maximum line length bug TW-TS-005 section 4.1 states: The maximum allowed length of each line is 80 characters, not including the OS-specific newline encoding. The implementation of this line length limit in the TW-TS-005 hex file reader function in the present suite was wrong, such that lines of the full maximum length could not be read. Fix it. Note that this bug affects comment lines too, not just actual RTP payloads. Neither Annex A nor Annex B features an RTP payload format that goes to the maximum of 40 bytes, but if a comment line goes to the maximum allowed length of 80 characters not including the terminating newline, the bug will be triggered, necessitating the present fix.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 25 Feb 2025 07:49:28 +0000
parents 93d6c6960a46
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
418
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * R99 Version 3.3.0
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * REL-4 Version 4.1.0
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * File : cod_amr.c
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * Purpose : Main encoder routine operating on a frame basis.
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 #include "namespace.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 #include "cod_amr.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 /*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 * INCLUDE FILES
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 #include "typedef.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 #include "basic_op.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 #include "no_count.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 #include "cnst.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 #include "memops.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "qua_gain.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "lpc.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "lsp.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 #include "pre_big.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 #include "ol_ltp.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 #include "p_ol_wgh.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 #include "spreproc.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 #include "cl_ltp.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 #include "pred_lt.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 #include "spstproc.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 #include "cbsearch.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 #include "gain_q.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 #include "convolve.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 #include "ton_stab.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 #include "vad.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 #include "dtx_enc.h"
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 /*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 * LOCAL VARIABLES AND TABLES
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 /*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 * PUBLIC VARIABLES AND TABLES
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 /* Spectral expansion factors */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 static const Word16 gamma1[M] =
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 30802, 28954, 27217, 25584, 24049,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 22606, 21250, 19975, 18777, 17650
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 };
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 /* gamma1 differs for the 12k2 coder */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 static const Word16 gamma1_12k2[M] =
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 29491, 26542, 23888, 21499, 19349,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 17414, 15672, 14105, 12694, 11425
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 };
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 static const Word16 gamma2[M] =
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 19661, 11797, 7078, 4247, 2548,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 1529, 917, 550, 330, 198
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 };
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 /*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 * PUBLIC PROGRAM CODE
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 *****************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 /*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 **************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 * Function : cod_amr_reset
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 * Purpose : Resets state memory
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 **************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 void cod_amr_reset (cod_amrState *st, Flag dtx, Flag use_vad2)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 Word16 i;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 /* save DTX flag */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 st->dtx = dtx;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 /*-----------------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 * Initialize pointers to speech vector. *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 *-----------------------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 st->new_speech = st->old_speech + L_TOTAL - L_FRAME; /* New speech */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 st->speech = st->new_speech - L_NEXT; /* Present frame */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 st->p_window = st->old_speech + L_TOTAL - L_WINDOW; /* For LPC window */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 st->p_window_12k2 = st->p_window - L_NEXT; /* EFR LPC window: no lookahead */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 /* Initialize static pointers */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 st->wsp = st->old_wsp + PIT_MAX;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114 st->exc = st->old_exc + PIT_MAX + L_INTERPOL;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 st->zero = st->ai_zero + MP1;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 st->error = st->mem_err + M;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 st->h1 = &st->hvec[L_SUBFR];
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 /* Static vectors to zero */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 Set_zero(st->old_speech, L_TOTAL);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 Set_zero(st->old_exc, PIT_MAX + L_INTERPOL);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 Set_zero(st->old_wsp, PIT_MAX);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 Set_zero(st->mem_syn, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 Set_zero(st->mem_w, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 Set_zero(st->mem_w0, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 Set_zero(st->mem_err, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 Set_zero(st->zero, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 Set_zero(st->hvec, L_SUBFR); /* set to zero "h1[-L_SUBFR..-1]" */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 /* OL LTP states */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 for (i = 0; i < 5; i++)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 st->old_lags[i] = 40;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 /* Reset lpc states */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 lpc_reset(&st->lpcSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 /* Reset lsp states */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 lsp_reset(&st->lspSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 /* Reset clLtp states */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 cl_ltp_reset(&st->clLtpSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 gainQuant_reset(&st->gainQuantSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 p_ol_wgh_reset(&st->pitchOLWghtSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 ton_stab_reset(&st->tonStabSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 vad_reset(&st->vadSt, use_vad2);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 dtx_enc_reset(&st->dtx_encSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 st->sharp = SHARPMIN;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 /***************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 * FUNCTION: cod_amr_first
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 * PURPOSE: Copes with look-ahead.
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 * INPUTS:
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 * No input argument are passed to this function. However, before
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 * calling this function, 40 new speech data should be copied to the
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 * vector new_speech[]. This is a global pointer which is declared in
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 * this file (it points to the end of speech buffer minus 200).
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 ***************************************************************************/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 int cod_amr_first(cod_amrState *st, /* i/o : State struct */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 Word16 new_speech[]) /* i : speech input (L_FRAME) */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 Copy(new_speech,&st->new_speech[-L_NEXT], L_NEXT);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 /* Copy(new_speech,st->new_speech,L_FRAME); */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 return 0;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 /***************************************************************************
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 * FUNCTION: cod_amr
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 * PURPOSE: Main encoder routine.
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 * DESCRIPTION: This function is called every 20 ms speech frame,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 * operating on the newly read 160 speech samples. It performs the
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 * principle encoding functions to produce the set of encoded parameters
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 * which include the LSP, adaptive codebook, and fixed codebook
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 * quantization indices (addresses and gains).
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 * INPUTS:
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 * No input argument are passed to this function. However, before
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 * calling this function, 160 new speech data should be copied to the
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196 * vector new_speech[]. This is a global pointer which is declared in
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 * this file (it points to the end of speech buffer minus 160).
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 * OUTPUTS:
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 * ana[]: vector of analysis parameters.
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 * synth[]: Local synthesis speech (for debugging purposes)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 ***************************************************************************/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 int cod_amr(
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 cod_amrState *st, /* i/o : State struct */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 enum Mode mode, /* i : AMR mode */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 Word16 new_speech[], /* i : speech input (L_FRAME) */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 Word16 ana[], /* o : Analysis parameters */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 enum Mode *usedMode, /* o : used mode */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 Word16 synth[] /* o : Local synthesis */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 )
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 /* LPC coefficients */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 Word16 A_t[(MP1) * 4]; /* A(z) unquantized for the 4 subframes */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 Word16 Aq_t[(MP1) * 4]; /* A(z) quantized for the 4 subframes */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 Word16 *A, *Aq; /* Pointer on A_t and Aq_t */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 Word16 lsp_new[M];
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 /* Other vectors */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 Word16 xn[L_SUBFR]; /* Target vector for pitch search */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 Word16 xn2[L_SUBFR]; /* Target vector for codebook search */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 Word16 code[L_SUBFR]; /* Fixed codebook excitation */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 Word16 y1[L_SUBFR]; /* Filtered adaptive excitation */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 Word16 y2[L_SUBFR]; /* Filtered fixed codebook excitation */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 Word16 gCoeff[6]; /* Correlations between xn, y1, & y2: */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 Word16 res[L_SUBFR]; /* Short term (LPC) prediction residual */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 Word16 res2[L_SUBFR]; /* Long term (LTP) prediction residual */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230 /* Vector and scalars needed for the MR475 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 Word16 xn_sf0[L_SUBFR]; /* Target vector for pitch search */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 Word16 y2_sf0[L_SUBFR]; /* Filtered codebook innovation */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
233 Word16 code_sf0[L_SUBFR]; /* Fixed codebook excitation */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
234 Word16 h1_sf0[L_SUBFR]; /* The impulse response of sf0 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
235 Word16 mem_syn_save[M]; /* Filter memory */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
236 Word16 mem_w0_save[M]; /* Filter memory */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
237 Word16 mem_err_save[M]; /* Filter memory */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
238 Word16 sharp_save; /* Sharpening */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
239 Word16 evenSubfr; /* Even subframe indicator */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
240 Word16 T0_sf0 = 0; /* Integer pitch lag of sf0 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
241 Word16 T0_frac_sf0 = 0; /* Fractional pitch lag of sf0 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
242 Word16 i_subfr_sf0 = 0; /* Position in exc[] for sf0 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
243 Word16 gain_pit_sf0; /* Quantized pitch gain for sf0 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
244 Word16 gain_code_sf0; /* Quantized codebook gain for sf0 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
245
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
246 /* Scalars */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
247 Word16 i_subfr, subfrNr;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
248 Word16 T_op[L_FRAME/L_FRAME_BY2];
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
249 Word16 T0, T0_frac;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
250 Word16 gain_pit, gain_code;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
251
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
252 /* Flags */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
253 Word16 lsp_flag = 0; /* indicates resonance in LPC filter */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
254 Word16 gp_limit; /* pitch gain limit value */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
255 Word16 vad_flag; /* VAD decision flag */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
256 Word16 compute_sid_flag; /* SID analysis flag */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
257
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
258 Copy(new_speech, st->new_speech, L_FRAME);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
259
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
260 *usedMode = mode; move16 ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
261
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
262 /* DTX processing */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
263 if (st->dtx)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
264 { /* no test() call since this if is only in simulation env */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
265 /* Find VAD decision */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
266
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
267 if (st->vadSt.use_vad2) {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
268 vad_flag = vad2(st->new_speech, &st->vadSt.u.v2);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
269 vad_flag = vad2(st->new_speech+80, &st->vadSt.u.v2) || vad_flag;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
270 } else {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
271 vad_flag = vad1(&st->vadSt.u.v1, st->new_speech);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
272 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
273
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
274 /* NB! usedMode may change here */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
275 compute_sid_flag = tx_dtx_handler(&st->dtx_encSt,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
276 vad_flag,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
277 usedMode);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
278 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
279 else
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
280 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
281 compute_sid_flag = 0; move16 ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
282 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
283
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
284 /*------------------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
285 * - Perform LPC analysis: *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
286 * * autocorrelation + lag windowing *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
287 * * Levinson-durbin algorithm to find a[] *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
288 * * convert a[] to lsp[] *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
289 * * quantize and code the LSPs *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
290 * * find the interpolated LSPs and convert to a[] for all *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
291 * subframes (both quantized and unquantized) *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
292 *------------------------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
293
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
294 /* LP analysis */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
295 lpc(&st->lpcSt, mode, st->p_window, st->p_window_12k2, A_t);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
296
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
297 /* From A(z) to lsp. LSP quantization and interpolation */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
298 lsp(&st->lspSt, mode, *usedMode, A_t, Aq_t, lsp_new, &ana);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
299
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
300 /* Buffer lsp's and energy */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
301 dtx_buffer(&st->dtx_encSt,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
302 lsp_new,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
303 st->new_speech);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
304
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
305 /* Check if in DTX mode */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
306 test();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
307 if (sub(*usedMode, MRDTX) == 0)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
308 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
309 dtx_enc(&st->dtx_encSt,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
310 compute_sid_flag,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
311 &st->lspSt.qSt,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
312 &st->gainQuantSt.gc_predSt,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
313 &ana);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
314
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
315 Set_zero(st->old_exc, PIT_MAX + L_INTERPOL);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
316 Set_zero(st->mem_w0, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
317 Set_zero(st->mem_err, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
318 Set_zero(st->zero, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
319 Set_zero(st->hvec, L_SUBFR); /* set to zero "h1[-L_SUBFR..-1]" */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
320 /* Reset lsp states */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
321 lsp_reset(&st->lspSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
322 Copy(lsp_new, st->lspSt.lsp_old, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
323 Copy(lsp_new, st->lspSt.lsp_old_q, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
324
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
325 /* Reset clLtp states */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
326 cl_ltp_reset(&st->clLtpSt);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
327 st->sharp = SHARPMIN;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
328 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
329 else
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
330 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
331 /* check resonance in the filter */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
332 lsp_flag = check_lsp(&st->tonStabSt, st->lspSt.lsp_old);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
333 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
334
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
335 /*----------------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
336 * - Find the weighted input speech w_sp[] for the whole speech frame *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
337 * - Find the open-loop pitch delay for first 2 subframes *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
338 * - Set the range for searching closed-loop pitch in 1st subframe *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
339 * - Find the open-loop pitch delay for last 2 subframes *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
340 *----------------------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
341
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
342 if (st->dtx && st->vadSt.use_vad2)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
343 { /* no test() call since this if is only in simulation env */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
344 st->vadSt.u.v2.L_Rmax = 0;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
345 st->vadSt.u.v2.L_R0 = 0;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
346 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
347 for(subfrNr = 0, i_subfr = 0;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
348 subfrNr < L_FRAME/L_FRAME_BY2;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
349 subfrNr++, i_subfr += L_FRAME_BY2)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
350 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
351 /* Pre-processing on 80 samples */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
352 pre_big(mode, gamma1, gamma1_12k2, gamma2, A_t, i_subfr, st->speech,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
353 st->mem_w, st->wsp);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
354
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
355 test (); test ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
356 if ((sub(mode, MR475) != 0) && (sub(mode, MR515) != 0))
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
357 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
358 /* Find open loop pitch lag for two subframes */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
359 ol_ltp(&st->pitchOLWghtSt, &st->vadSt, mode, &st->wsp[i_subfr],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
360 &T_op[subfrNr], st->old_lags, st->ol_gain_flg, subfrNr,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
361 st->dtx);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
362 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
363 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
364
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
365 if ((sub(mode, MR475) == 0) || (sub(mode, MR515) == 0))
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
366 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
367 /* Find open loop pitch lag for ONE FRAME ONLY */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
368 /* search on 160 samples */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
369
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
370 ol_ltp(&st->pitchOLWghtSt, &st->vadSt, mode, &st->wsp[0], &T_op[0],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
371 st->old_lags, st->ol_gain_flg, 1, st->dtx);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
372 T_op[1] = T_op[0];
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
373 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
374
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
375 if (st->dtx && st->vadSt.use_vad2)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
376 { /* no test() call since this if is only in simulation env */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
377 LTP_flag_update(&st->vadSt.u.v2, mode);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
378 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
379
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
380 /* run VAD pitch detection */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
381 if (st->dtx && !st->vadSt.use_vad2)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
382 { /* no test() call since this if is only in simulation env */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
383 vad_pitch_detection(&st->vadSt.u.v1, T_op);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
384 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
385
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
386 if (sub(*usedMode, MRDTX) == 0)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
387 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
388 goto the_end;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
389 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
390
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
391 /*------------------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
392 * Loop for every subframe in the analysis frame *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
393 *------------------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
394 * To find the pitch and innovation parameters. The subframe size is *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
395 * L_SUBFR and the loop is repeated L_FRAME/L_SUBFR times. *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
396 * - find the weighted LPC coefficients *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
397 * - find the LPC residual signal res[] *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
398 * - compute the target signal for pitch search *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
399 * - compute impulse response of weighted synthesis filter (h1[]) *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
400 * - find the closed-loop pitch parameters *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
401 * - encode the pitch dealy *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
402 * - update the impulse response h1[] by including fixed-gain pitch *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
403 * - find target vector for codebook search *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
404 * - codebook search *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
405 * - encode codebook address *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
406 * - VQ of pitch and codebook gains *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
407 * - find synthesis speech *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
408 * - update states of weighting filter *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
409 *------------------------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
410
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
411 A = A_t; /* pointer to interpolated LPC parameters */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
412 Aq = Aq_t; /* pointer to interpolated quantized LPC parameters */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
413
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
414 evenSubfr = 0; move16 ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
415 subfrNr = -1; move16 ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
416 for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
417 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
418 subfrNr = add(subfrNr, 1);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
419 evenSubfr = sub(1, evenSubfr);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
420
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
421 /* Save states for the MR475 mode */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
422 test(); test();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
423 if ((evenSubfr != 0) && (sub(*usedMode, MR475) == 0))
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
424 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
425 Copy(st->mem_syn, mem_syn_save, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
426 Copy(st->mem_w0, mem_w0_save, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
427 Copy(st->mem_err, mem_err_save, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
428 sharp_save = st->sharp;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
429 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
430
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
431 /*-----------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
432 * - Preprocessing of subframe *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
433 *-----------------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
434 if (sub(*usedMode, MR475) != 0)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
435 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
436 subframePreProc(*usedMode, gamma1, gamma1_12k2,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
437 gamma2, A, Aq, &st->speech[i_subfr],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
438 st->mem_err, st->mem_w0, st->zero,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
439 st->ai_zero, &st->exc[i_subfr],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
440 st->h1, xn, res, st->error);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
441 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
442 else
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
443 { /* MR475 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
444 subframePreProc(*usedMode, gamma1, gamma1_12k2,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
445 gamma2, A, Aq, &st->speech[i_subfr],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
446 st->mem_err, mem_w0_save, st->zero,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
447 st->ai_zero, &st->exc[i_subfr],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
448 st->h1, xn, res, st->error);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
449
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
450 /* save impulse response (modified in cbsearch) */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
451 if (evenSubfr != 0)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
452 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
453 Copy (st->h1, h1_sf0, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
454 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
455 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
456
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
457 /* copy the LP residual (res2 is modified in the CL LTP search) */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
458 Copy (res, res2, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
459
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
460 /*-----------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
461 * - Closed-loop LTP search *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
462 *-----------------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
463 cl_ltp(&st->clLtpSt, &st->tonStabSt, *usedMode, i_subfr, T_op, st->h1,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
464 &st->exc[i_subfr], res2, xn, lsp_flag, xn2, y1,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
465 &T0, &T0_frac, &gain_pit, gCoeff, &ana,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
466 &gp_limit);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
467
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
468 /* update LTP lag history */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
469 if ((subfrNr == 0) && (st->ol_gain_flg[0] > 0))
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
470 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
471 st->old_lags[1] = T0;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
472 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
473
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
474 if ((sub(subfrNr, 3) == 0) && (st->ol_gain_flg[1] > 0))
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
475 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
476 st->old_lags[0] = T0;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
477 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
478
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
479 /*-----------------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
480 * - Inovative codebook search (find index and gain) *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
481 *-----------------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
482 cbsearch(xn2, st->h1, T0, st->sharp, gain_pit, res2,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
483 code, y2, &ana, *usedMode, subfrNr);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
484
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
485 /*------------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
486 * - Quantization of gains. *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
487 *------------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
488 gainQuant(&st->gainQuantSt, *usedMode, res, &st->exc[i_subfr], code,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
489 xn, xn2, y1, y2, gCoeff, evenSubfr, gp_limit,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
490 &gain_pit_sf0, &gain_code_sf0,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
491 &gain_pit, &gain_code, &ana);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
492
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
493 /* update gain history */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
494 update_gp_clipping(&st->tonStabSt, gain_pit);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
495
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
496 if (sub(*usedMode, MR475) != 0)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
497 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
498 /* Subframe Post Porcessing */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
499 subframePostProc(st->speech, *usedMode, i_subfr, gain_pit,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
500 gain_code, Aq, synth, xn, code, y1, y2, st->mem_syn,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
501 st->mem_err, st->mem_w0, st->exc, &st->sharp);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
502 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
503 else
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
504 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
505 if (evenSubfr != 0)
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
506 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
507 i_subfr_sf0 = i_subfr; move16 ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
508 Copy(xn, xn_sf0, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
509 Copy(y2, y2_sf0, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
510 Copy(code, code_sf0, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
511 T0_sf0 = T0; move16 ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
512 T0_frac_sf0 = T0_frac; move16 ();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
513
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
514 /* Subframe Post Porcessing */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
515 subframePostProc(st->speech, *usedMode, i_subfr, gain_pit,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
516 gain_code, Aq, synth, xn, code, y1, y2,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
517 mem_syn_save, st->mem_err, mem_w0_save,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
518 st->exc, &st->sharp);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
519 st->sharp = sharp_save; move16();
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
520 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
521 else
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
522 {
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
523 /* update both subframes for the MR475 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
524
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
525 /* Restore states for the MR475 mode */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
526 Copy(mem_err_save, st->mem_err, M);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
527
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
528 /* re-build excitation for sf 0 */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
529 Pred_lt_3or6(&st->exc[i_subfr_sf0], T0_sf0, T0_frac_sf0,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
530 L_SUBFR, 1);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
531 Convolve(&st->exc[i_subfr_sf0], h1_sf0, y1, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
532
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
533 Aq -= MP1;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
534 subframePostProc(st->speech, *usedMode, i_subfr_sf0,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
535 gain_pit_sf0, gain_code_sf0, Aq,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
536 synth, xn_sf0, code_sf0, y1, y2_sf0,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
537 st->mem_syn, st->mem_err, st->mem_w0, st->exc,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
538 &sharp_save); /* overwrites sharp_save */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
539 Aq += MP1;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
540
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
541 /* re-run pre-processing to get xn right (needed by postproc) */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
542 /* (this also reconstructs the unsharpened h1 for sf 1) */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
543 subframePreProc(*usedMode, gamma1, gamma1_12k2,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
544 gamma2, A, Aq, &st->speech[i_subfr],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
545 st->mem_err, st->mem_w0, st->zero,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
546 st->ai_zero, &st->exc[i_subfr],
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
547 st->h1, xn, res, st->error);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
548
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
549 /* re-build excitation sf 1 (changed if lag < L_SUBFR) */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
550 Pred_lt_3or6(&st->exc[i_subfr], T0, T0_frac, L_SUBFR, 1);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
551 Convolve(&st->exc[i_subfr], st->h1, y1, L_SUBFR);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
552
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
553 subframePostProc(st->speech, *usedMode, i_subfr, gain_pit,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
554 gain_code, Aq, synth, xn, code, y1, y2,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
555 st->mem_syn, st->mem_err, st->mem_w0,
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
556 st->exc, &st->sharp);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
557 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
558 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
559
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
560 A += MP1; /* interpolated LPC parameters for next subframe */
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
561 Aq += MP1;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
562 }
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
563
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
564 Copy(&st->old_exc[L_FRAME], &st->old_exc[0], PIT_MAX + L_INTERPOL);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
565
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
566 the_end:
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
567
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
568 /*--------------------------------------------------*
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
569 * Update signal for next frame. *
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
570 *--------------------------------------------------*/
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
571 Copy(&st->old_wsp[L_FRAME], &st->old_wsp[0], PIT_MAX);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
572
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
573 Copy(&st->old_speech[L_FRAME], &st->old_speech[0], L_TOTAL - L_FRAME);
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
574
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
575 return 0;
93d6c6960a46 libtwamr: integrate cod_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
576 }