FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/c3_14pf.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 | 5fc9a2d12048 |
children |
rev | line source |
---|---|
321
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * R99 Version 3.3.0 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * REL-4 Version 4.1.0 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * File : c3_14pf.c |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Purpose : Searches a 14 bit algebraic codebook containing 3 pulses |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * in a frame of 40 samples. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 /* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 * MODULE INCLUDE FILE AND VERSION ID |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 #include "namespace.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #include "c3_14pf.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 /* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 * INCLUDE FILES |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 #include "typedef.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "basic_op.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "no_count.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "inv_sqrt.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "cnst.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "cor_h.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "set_sign.h" |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 /* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 * LOCAL VARIABLES AND TABLES |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 #define NB_PULSE 3 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 /* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 * DECLARATION OF PROTOTYPES |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 static void search_3i40( |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 Word16 dn[], /* i : correlation between target and h[] */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 Word16 dn2[], /* i : maximum of corr. in each track. */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 Word16 rr[][L_CODE],/* i : matrix of autocorrelation */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 Word16 codvec[] /* o : algebraic codebook vector */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 ); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 static Word16 build_code( |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 Word16 codvec[], /* i : algebraic codebook vector */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 Word16 dn_sign[], /* i : sign of dn[] */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 Word16 cod[], /* o : algebraic (fixed) codebook excitation */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 Word16 h[], /* i : impulse response of weighted synthesis filter */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 Word16 y[], /* o : filtered fixed codebook excitation */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 Word16 sign[] /* o : sign of 3 pulses */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 ); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 /* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 * PUBLIC PROGRAM CODE |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 /************************************************************************* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 * FUNCTION: code_3i40_14bits() |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 * PURPOSE: Searches a 14 bit algebraic codebook containing 3 pulses |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 * in a frame of 40 samples. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 * DESCRIPTION: |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 * The code length is 40, containing 3 nonzero pulses: i0...i2. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 * All pulses can have two possible amplitudes: +1 or -1. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 * Pulse i0 can have 8 possible positions, pulses i1 and i2 can have |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 * 2x8=16 positions. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 * i0 : 0, 5, 10, 15, 20, 25, 30, 35. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 * i1 : 1, 6, 11, 16, 21, 26, 31, 36. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 * 3, 8, 13, 18, 23, 28, 33, 38. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 * i2 : 2, 7, 12, 17, 22, 27, 32, 37. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 * 4, 9, 14, 19, 24, 29, 34, 39. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 *************************************************************************/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 Word16 code_3i40_14bits( |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 Word16 x[], /* i : target vector */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 Word16 h[], /* i : impulse response of weighted synthesis filter */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 /* h[-L_subfr..-1] must be set to zero. */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 Word16 T0, /* i : Pitch lag */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 Word16 pitch_sharp, /* i : Last quantized pitch gain */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 Word16 code[], /* o : Innovative codebook */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 Word16 y[], /* o : filtered fixed codebook excitation */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 Word16 * sign /* o : Signs of 3 pulses */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 ) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 Word16 codvec[NB_PULSE]; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 Word16 dn[L_CODE], dn2[L_CODE], dn_sign[L_CODE]; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 Word16 rr[L_CODE][L_CODE]; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 Word16 i, index, sharp; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 sharp = shl(pitch_sharp, 1); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 if (sub(T0, L_CODE) < 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 for (i = T0; i < L_CODE; i++) { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 h[i] = add(h[i], mult(h[i - T0], sharp)); move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 cor_h_x(h, x, dn, 1); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 set_sign(dn, dn_sign, dn2, 6); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 cor_h(h, dn_sign, rr); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 search_3i40(dn, dn2, rr, codvec); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 move16 (); /* function result */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 index = build_code(codvec, dn_sign, code, h, y, sign); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 /*-----------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 * Compute innovation vector gain. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 * Include fixed-gain pitch contribution into code[]. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 *-----------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 if (sub(T0, L_CODE) < 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 for (i = T0; i < L_CODE; i++) { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 code[i] = add(code[i], mult(code[i - T0], sharp)); move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 return index; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 /* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 * PRIVATE PROGRAM CODE |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 ******************************************************************************** |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 /************************************************************************* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 * FUNCTION search_3i40() |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 * PURPOSE: Search the best codevector; determine positions of the 3 pulses |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 * in the 40-sample frame. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 *************************************************************************/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 #define _1_2 (Word16)(32768L/2) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 #define _1_4 (Word16)(32768L/4) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 #define _1_8 (Word16)(32768L/8) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 #define _1_16 (Word16)(32768L/16) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 static void search_3i40( |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 Word16 dn[], /* i : correlation between target and h[] */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 Word16 dn2[], /* i : maximum of corr. in each track. */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 Word16 rr[][L_CODE], /* i : matrix of autocorrelation */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 Word16 codvec[] /* o : algebraic codebook vector */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 ) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 Word16 i0, i1, i2; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 Word16 ix = 0; /* initialization only needed to keep gcc silent */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 Word16 ps = 0; /* initialization only needed to keep gcc silent */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 Word16 i, pos, track1, track2, ipos[NB_PULSE]; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 Word16 psk, ps0, ps1, sq, sq1; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 Word16 alpk, alp, alp_16; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 Word32 s, alp0, alp1; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 psk = -1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 alpk = 1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 for (i = 0; i < NB_PULSE; i++) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 codvec[i] = i; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 for (track1 = 1; track1 < 4; track1 += 2) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 for (track2 = 2; track2 < 5; track2 += 2) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 /* fix starting position */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 ipos[0] = 0; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 ipos[1] = track1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 ipos[2] = track2; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 /*------------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 * main loop: try 3 tracks. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 *------------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 for (i = 0; i < NB_PULSE; i++) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 /*----------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 * i0 loop: try 8 positions. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 *----------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 move16 (); /* account for ptr. init. (rr[io]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 for (i0 = ipos[0]; i0 < L_CODE; i0 += STEP) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 if (dn2[i0] >= 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 ps0 = dn[i0]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 alp0 = L_mult(rr[i0][i0], _1_4); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 /*----------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 * i1 loop: 8 positions. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 *----------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 sq = -1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 alp = 1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 ps = 0; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 ix = ipos[1]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 /* initialize 4 index for next loop. */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 /*-------------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 * These index have low complexity address computation because * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 * they are, in fact, pointers with fixed increment. For example, * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 * "rr[i0][i2]" is a pointer initialized to "&rr[i0][ipos[2]]" * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 * and incremented by "STEP". * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 *-------------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 move16 (); /* account for ptr. init. (rr[i1]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 move16 (); /* account for ptr. init. (dn[i1]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 move16 (); /* account for ptr. init. (rr[io]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 for (i1 = ipos[1]; i1 < L_CODE; i1 += STEP) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 ps1 = add(ps0, dn[i1]); /* idx increment = STEP */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 /* alp1 = alp0 + rr[i0][i1] + 1/2*rr[i1][i1]; */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 alp1 = L_mac(alp0, rr[i1][i1], _1_4); /* idx incr = STEP */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 alp1 = L_mac(alp1, rr[i0][i1], _1_2); /* idx incr = STEP */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 sq1 = mult(ps1, ps1); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 alp_16 = round(alp1); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 s = L_msu(L_mult(alp, sq1), sq, alp_16); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 if (s > 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 sq = sq1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 ps = ps1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 alp = alp_16; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 ix = i1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 i1 = ix; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 /*----------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 * i2 loop: 8 positions. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 *----------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 ps0 = ps; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 alp0 = L_mult(alp, _1_4); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 sq = -1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 alp = 1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 ps = 0; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 ix = ipos[2]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 /* initialize 4 index for next loop (see i1 loop) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 move16 (); /* account for ptr. init. (rr[i2]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 move16 (); /* account for ptr. init. (rr[i1]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 move16 (); /* account for ptr. init. (dn[i2]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 move16 (); /* account for ptr. init. (rr[io]) */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 for (i2 = ipos[2]; i2 < L_CODE; i2 += STEP) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 ps1 = add(ps0, dn[i2]); /* index increment = STEP */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 /* alp1 = alp0 + rr[i0][i2] + rr[i1][i2] + 1/2*rr[i2][i2]; */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 alp1 = L_mac(alp0, rr[i2][i2], _1_16); /* idx incr = STEP */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 alp1 = L_mac(alp1, rr[i1][i2], _1_8); /* idx incr = STEP */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 alp1 = L_mac(alp1, rr[i0][i2], _1_8); /* idx incr = STEP */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 sq1 = mult(ps1, ps1); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 alp_16 = round(alp1); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 s = L_msu(L_mult(alp, sq1), sq, alp_16); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 if (s > 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 sq = sq1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 ps = ps1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 alp = alp_16; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 ix = i2; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 i2 = ix; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 /*----------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 * memorise codevector if this one is better than the last one. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 *----------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 s = L_msu(L_mult(alpk, sq), psk, alp); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 if (s > 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 psk = sq; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 alpk = alp; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 codvec[0] = i0; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 codvec[1] = i1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 codvec[2] = i2; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 /*----------------------------------------------------------------* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 * Cyclic permutation of i0, i1 and i2. * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 *----------------------------------------------------------------*/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 pos = ipos[2]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 ipos[2] = ipos[1]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 ipos[1] = ipos[0]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 ipos[0] = pos; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 return; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 /************************************************************************* |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 * FUNCTION: build_code() |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 * PURPOSE: Builds the codeword, the filtered codeword and index of the |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 * codevector, based on the signs and positions of 3 pulses. |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 * |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 *************************************************************************/ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 static Word16 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 build_code( |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 Word16 codvec[], /* i : position of pulses */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 Word16 dn_sign[], /* i : sign of pulses */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 Word16 cod[], /* o : innovative code vector */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 Word16 h[], /* i : impulse response of weighted synthesis filter */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 Word16 y[], /* o : filtered innovative code */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 Word16 sign[] /* o : sign of 3 pulses */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 ) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 Word16 i, j, k, track, index, _sign[NB_PULSE], indx, rsign; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 Word16 *p0, *p1, *p2; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 Word32 s; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 for (i = 0; i < L_CODE; i++) { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 cod[i] = 0; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 indx = 0; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 rsign = 0; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 for (k = 0; k < NB_PULSE; k++) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 i = codvec[k]; move16 (); /* read pulse position */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 j = dn_sign[i]; move16 (); /* read sign */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 index = mult(i, 6554); /* index = pos/5 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 /* track = pos%5 */ |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 track = sub(i, extract_l(L_shr(L_mult(index, 5), 1))); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 if (sub(track, 1) == 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 index = shl(index, 4); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 else if (sub(track, 2) == 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 track = 2; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 index = shl(index, 8); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 else if (sub(track, 3) == 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 test (); test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 track = 1; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 index = add(shl(index, 4), 8); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 else if (sub(track, 4) == 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 test (); test (); test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 track = 2; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 index = add(shl(index, 8), 128); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 test (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 if (j > 0) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 cod[i] = 8191; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 _sign[k] = 32767; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 rsign = add(rsign, shl(1, track)); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 } else { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 cod[i] = -8192; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 _sign[k] = (Word16) - 32768L; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 indx = add(indx, index); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 *sign = rsign; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 p0 = h - codvec[0]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 p1 = h - codvec[1]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 p2 = h - codvec[2]; move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 for (i = 0; i < L_CODE; i++) |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 { |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 s = 0; move32 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 s = L_mac(s, *p0++, _sign[0]); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 s = L_mac(s, *p1++, _sign[1]); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416 s = L_mac(s, *p2++, _sign[2]); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 y[i] = round(s); move16 (); |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 } |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 return indx; |
5fc9a2d12048
libtwamr: integrate c3_14pf.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 } |