FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/q_plsf_5.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 | 128ec87489b6 |
children |
rev | line source |
---|---|
373
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * R99 Version 3.3.0 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * REL-4 Version 4.1.0 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * File : q_plsf_5.c |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Purpose : Quantization of 2 sets of LSF parameters using 1st |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * order MA prediction and split by 5 matrix |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 * quantization (split-MQ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 * MODULE INCLUDE FILE AND VERSION ID |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #include "namespace.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #include "q_plsf.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 * INCLUDE FILES |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "typedef.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "basic_op.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "no_count.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "lsp_lsf.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "reorder.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "lsfwt.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "q_plsf5_tab.h" |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 * LOCAL PROGRAM CODE |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 /* Quantization of a 4 dimensional subvector */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 static Word16 Vq_subvec (/* o : quantization index, Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 Word16 *lsf_r1, /* i : 1st LSF residual vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 Word16 *lsf_r2, /* i : 2nd LSF residual vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 const Word16 *dico, /* i : quantization codebook, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 Word16 *wf1, /* i : 1st LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 Word16 *wf2, /* i : 2nd LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 Word16 dico_size /* i : size of quantization codebook, Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 Word16 index = 0; /* initialization only needed to keep gcc silent */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 Word16 i, temp; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 const Word16 *p_dico; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 Word32 dist_min, dist; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 dist_min = MAX_32; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 p_dico = dico; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 for (i = 0; i < dico_size; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 temp = sub (lsf_r1[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 temp = mult (wf1[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 dist = L_mult (temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 temp = sub (lsf_r1[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 temp = mult (wf1[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 temp = sub (lsf_r2[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 temp = mult (wf2[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 temp = sub (lsf_r2[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 temp = mult (wf2[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 if (L_sub (dist, dist_min) < (Word32) 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 dist_min = dist; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 index = i; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 /* Reading the selected vector */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 p_dico = &dico[shl (index, 2)]; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 lsf_r1[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 lsf_r1[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 lsf_r2[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 lsf_r2[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 return index; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 /* Quantization of a 4 dimensional subvector with a signed codebook */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 static Word16 Vq_subvec_s ( /* o : quantization index Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 Word16 *lsf_r1, /* i : 1st LSF residual vector Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 Word16 *lsf_r2, /* i : and LSF residual vector Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 const Word16 *dico, /* i : quantization codebook Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 Word16 *wf1, /* i : 1st LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 Word16 *wf2, /* i : 2nd LSF weighting factors Q13 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 Word16 dico_size) /* i : size of quantization codebook Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 Word16 index = 0; /* initialization only needed to keep gcc silent */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 Word16 sign = 0; /* initialization only needed to keep gcc silent */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 Word16 i, temp; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 const Word16 *p_dico; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 Word32 dist_min, dist; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 dist_min = MAX_32; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 p_dico = dico; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 for (i = 0; i < dico_size; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 /* test positive */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 temp = sub (lsf_r1[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 temp = mult (wf1[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 dist = L_mult (temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 temp = sub (lsf_r1[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 temp = mult (wf1[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 temp = sub (lsf_r2[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 temp = mult (wf2[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 temp = sub (lsf_r2[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 temp = mult (wf2[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 if (L_sub (dist, dist_min) < (Word32) 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 dist_min = dist; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 index = i; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 sign = 0; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 /* test negative */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 p_dico -= 4; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 temp = add (lsf_r1[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 temp = mult (wf1[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 dist = L_mult (temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 temp = add (lsf_r1[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 temp = mult (wf1[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 temp = add (lsf_r2[0], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 temp = mult (wf2[0], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 temp = add (lsf_r2[1], *p_dico++); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 temp = mult (wf2[1], temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 dist = L_mac (dist, temp, temp); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 if (L_sub (dist, dist_min) < (Word32) 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 dist_min = dist; move32 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 index = i; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 sign = 1; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 /* Reading the selected vector */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 p_dico = &dico[shl (index, 2)]; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 test (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 if (sign == 0) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 lsf_r1[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 lsf_r1[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 lsf_r2[0] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 lsf_r2[1] = *p_dico++; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 else |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 lsf_r1[0] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 lsf_r1[1] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 lsf_r2[0] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 lsf_r2[1] = negate (*p_dico++); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 index = shl (index, 1); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 index = add (index, sign); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 return index; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 /* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 * PUBLIC PROGRAM CODE |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 ******************************************************************************** |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 /************************************************************************* |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 * FUNCTION: Q_plsf_5() |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 * PURPOSE: Quantization of 2 sets of LSF parameters using 1st order MA |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 * prediction and split by 5 matrix quantization (split-MQ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 * DESCRIPTION: |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 * p[i] = pred_factor*past_rq[i]; i=0,...,m-1 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 * r1[i]= lsf1[i] - p[i]; i=0,...,m-1 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 * r2[i]= lsf2[i] - p[i]; i=0,...,m-1 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 * where: |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 * lsf1[i] 1st mean-removed LSF vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 * lsf2[i] 2nd mean-removed LSF vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 * r1[i] 1st residual prediction vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 * r2[i] 2nd residual prediction vector. |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 * past_r2q[i] Past quantized residual (2nd vector). |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 * The residual vectors r1[i] and r2[i] are jointly quantized using |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 * split-MQ with 5 codebooks. Each 4th dimension submatrix contains 2 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 * elements from each residual vector. The 5 submatrices are as follows: |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 * {r1[0], r1[1], r2[0], r2[1]}; {r1[2], r1[3], r2[2], r2[3]}; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 * {r1[4], r1[5], r2[4], r2[5]}; {r1[6], r1[7], r2[6], r2[7]}; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 * {r1[8], r1[9], r2[8], r2[9]}; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 * |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 *************************************************************************/ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 void Q_plsf_5 ( |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 Q_plsfState *st, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 Word16 *lsp1, /* i : 1st LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 Word16 *lsp2, /* i : 2nd LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 Word16 *lsp1_q, /* o : quantized 1st LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 Word16 *lsp2_q, /* o : quantized 2nd LSP vector, Q15 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 Word16 *indice /* o : quantization indices of 5 matrices, Q0 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 ) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 Word16 i; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 Word16 lsf1[M], lsf2[M], wf1[M], wf2[M], lsf_p[M], lsf_r1[M], lsf_r2[M]; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 Word16 lsf1_q[M], lsf2_q[M]; |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 /* convert LSFs to normalize frequency domain 0..16384 */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 Lsp_lsf (lsp1, lsf1, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 Lsp_lsf (lsp2, lsf2, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 /* Compute LSF weighting factors (Q13) */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 Lsf_wt (lsf1, wf1); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 Lsf_wt (lsf2, wf2); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 /* Compute predicted LSF and prediction error */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 for (i = 0; i < M; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 lsf_p[i] = add (mean_lsf[i], mult (st->past_rq[i], LSP_PRED_FAC_MR122)); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 lsf_r1[i] = sub (lsf1[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 lsf_r2[i] = sub (lsf2[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 /*---- Split-MQ of prediction error ----*/ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 indice[0] = Vq_subvec (&lsf_r1[0], &lsf_r2[0], dico1_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 &wf1[0], &wf2[0], DICO1_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 indice[1] = Vq_subvec (&lsf_r1[2], &lsf_r2[2], dico2_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 &wf1[2], &wf2[2], DICO2_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 indice[2] = Vq_subvec_s (&lsf_r1[4], &lsf_r2[4], dico3_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 &wf1[4], &wf2[4], DICO3_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 indice[3] = Vq_subvec (&lsf_r1[6], &lsf_r2[6], dico4_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 &wf1[6], &wf2[6], DICO4_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 indice[4] = Vq_subvec (&lsf_r1[8], &lsf_r2[8], dico5_lsf, |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 &wf1[8], &wf2[8], DICO5_SIZE); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 /* Compute quantized LSFs and update the past quantized residual */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 for (i = 0; i < M; i++) |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 { |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 lsf1_q[i] = add (lsf_r1[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 lsf2_q[i] = add (lsf_r2[i], lsf_p[i]); move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 st->past_rq[i] = lsf_r2[i]; move16 (); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 } |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 /* verification that LSFs has minimum distance of LSF_GAP */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 Reorder_lsf (lsf1_q, LSF_GAP, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 Reorder_lsf (lsf2_q, LSF_GAP, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 /* convert LSFs to the cosine domain */ |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 Lsf_lsp (lsf1_q, lsp1_q, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 Lsf_lsp (lsf2_q, lsp2_q, M); |
128ec87489b6
libtwamr: integrate q_plsf_5.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 } |