FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/q_plsf_3.c @ 477:4c9222d95647
libtwamr encoder: always emit frame->mode = mode;
In the original implementation of amr_encode_frame(), the 'mode' member
of the output struct was set to 0xFF if the output frame type is TX_NO_DATA.
This design was made to mimic the mode field (16-bit word) being set to
0xFFFF (or -1) in 3GPP test sequence format - but nothing actually depends
on this struct member being set in any way, and amr_frame_to_tseq()
generates the needed 0xFFFF on its own, based on frame->type being equal
to TX_NO_DATA.
It is simpler and more efficient to always set frame->mode to the actual
encoding mode in amr_encode_frame(), and this new behavior has already
been documented in doc/AMR-library-API description in anticipation of
the present change.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 18 May 2024 22:30:42 +0000 |
parents | 9cca139a20a8 |
children |
rev | line source |
---|---|
372
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * R99 Version 3.3.0 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * REL-4 Version 4.1.0 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 **************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * File : q_plsf_3.c |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Purpose : Quantization of LSF parameters with 1st order MA |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * prediction and split by 3 vector quantization |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 * (split-VQ) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 * |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 /* |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 * MODULE INCLUDE FILE AND VERSION ID |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #include "namespace.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #include "q_plsf.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 /* |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 * INCLUDE FILES |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "typedef.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "basic_op.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "no_count.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "lsp_lsf.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "reorder.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "lsfwt.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "memops.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "q_plsf3_tab.h" |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 /* |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 * LOCAL VARIABLES AND TABLES |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 #define PAST_RQ_INIT_SIZE 8 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 /* |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 * LOCAL PROGRAM CODE |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 /* Quantization of a 4 dimensional subvector */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 static Word16 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 Vq_subvec4( /* o: quantization index, Q0 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 Word16 * lsf_r1, /* i/o: 1st LSF residual vector, Q15 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 const Word16 * dico, /* i: quantization codebook, Q15 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 const Word16 * wf1, /* i: 1st LSF weighting factors, Q13 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 Word16 dico_size) /* i: size of quantization codebook, Q0 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 Word16 i, index = 0, temp; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 const Word16 *p_dico; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 Word32 dist_min, dist; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 dist_min = MAX_32; move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 p_dico = dico; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 for (i = 0; i < dico_size; i++) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 temp = sub (lsf_r1[0], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 temp = mult (wf1[0], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 dist = L_mult (temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 temp = sub (lsf_r1[1], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 temp = mult (wf1[1], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 dist = L_mac (dist, temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 temp = sub (lsf_r1[2], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 temp = mult (wf1[2], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 dist = L_mac (dist, temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 temp = sub (lsf_r1[3], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 temp = mult (wf1[3], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 dist = L_mac (dist, temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 if (L_sub (dist, dist_min) < (Word32) 0) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 dist_min = dist; move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 index = i; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 /* Reading the selected vector */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 p_dico = &dico[shl (index, 2)]; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 lsf_r1[0] = *p_dico++; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 lsf_r1[1] = *p_dico++; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 lsf_r1[2] = *p_dico++; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 lsf_r1[3] = *p_dico++; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 return index; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 /* Quantization of a 3 dimensional subvector */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 static Word16 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 Vq_subvec3( /* o: quantization index, Q0 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 Word16 * lsf_r1, /* i/o: 1st LSF residual vector, Q15 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 const Word16 * dico, /* i: quantization codebook, Q15 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 const Word16 * wf1, /* i: 1st LSF weighting factors, Q13 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 Word16 dico_size, /* i: size of quantization codebook, Q0 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 Flag use_half) /* i: use every second entry in codebook */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 Word16 i, index = 0, temp; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 const Word16 *p_dico; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 Word32 dist_min, dist; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 dist_min = MAX_32; move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 p_dico = dico; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 if (use_half == 0) { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 for (i = 0; i < dico_size; i++) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 temp = sub(lsf_r1[0], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 temp = mult(wf1[0], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 dist = L_mult(temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 temp = sub(lsf_r1[1], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 temp = mult(wf1[1], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 dist = L_mac(dist, temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 temp = sub(lsf_r1[2], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 temp = mult(wf1[2], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 dist = L_mac(dist, temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 if (L_sub(dist, dist_min) < (Word32) 0) { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 dist_min = dist; move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 index = i; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 p_dico = &dico[add(index, add(index, index))]; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 else |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 for (i = 0; i < dico_size; i++) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 temp = sub(lsf_r1[0], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 temp = mult(wf1[0], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 dist = L_mult(temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 temp = sub(lsf_r1[1], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 temp = mult(wf1[1], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 dist = L_mac(dist, temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 temp = sub(lsf_r1[2], *p_dico++); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 temp = mult(wf1[2], temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 dist = L_mac(dist, temp, temp); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 if (L_sub(dist, dist_min) < (Word32) 0) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 dist_min = dist; move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 index = i; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 p_dico = p_dico + 3; add(0,0); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 p_dico = &dico[shl(add(index, add(index, index)),1)]; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 /* Reading the selected vector */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 lsf_r1[0] = *p_dico++; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 lsf_r1[1] = *p_dico++; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 lsf_r1[2] = *p_dico++; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 return index; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 /* |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 * PUBLIC PROGRAM CODE |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 ***************************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 /*********************************************************************** |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 * |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 * routine: Q_plsf_3() |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 * |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 * Quantization of LSF parameters with 1st order MA prediction and |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 * split by 3 vector quantization (split-VQ) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 * |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 ***********************************************************************/ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 void Q_plsf_3( |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 Q_plsfState *st, /* i/o: state struct */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 enum Mode mode, /* i : coder mode */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 Word16 *lsp1, /* i : 1st LSP vector Q15 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 Word16 *lsp1_q, /* o : quantized 1st LSP vector Q15 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 Word16 *indice, /* o : quantization indices of 3 vectors Q0 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 Word16 *pred_init_i /* o : init index for MA prediction in DTX mode */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 ) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 Word16 i, j; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 Word16 lsf1[M], wf1[M], lsf_p[M], lsf_r1[M]; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 Word16 lsf1_q[M]; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 Word32 L_pred_init_err; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 Word32 L_min_pred_init_err; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 Word16 temp_r1[M]; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 Word16 temp_p[M]; |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 /* convert LSFs to normalize frequency domain 0..16384 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 Lsp_lsf(lsp1, lsf1, M); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 /* compute LSF weighting factors (Q13) */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 Lsf_wt(lsf1, wf1); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 /* Compute predicted LSF and prediction error */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 if (test(), sub(mode, MRDTX) != 0) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 for (i = 0; i < M; i++) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 lsf_p[i] = add(mean_lsf3[i], |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 mult(st->past_rq[i], |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 pred_fac[i])); move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 lsf_r1[i] = sub(lsf1[i], lsf_p[i]); move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 else |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 /* DTX mode, search the init vector that yields */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 /* lowest prediction resuidual energy */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 *pred_init_i = 0; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 L_min_pred_init_err = 0x7fffffff; /* 2^31 - 1 */ move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 for (j = 0; j < PAST_RQ_INIT_SIZE; j++) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 L_pred_init_err = 0; move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 for (i = 0; i < M; i++) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 temp_p[i] = add(mean_lsf3[i], past_rq_init[j*M+i]); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 temp_r1[i] = sub(lsf1[i],temp_p[i]); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 L_pred_init_err = L_mac(L_pred_init_err, temp_r1[i], temp_r1[i]); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 } /* next i */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 if (L_sub(L_pred_init_err, L_min_pred_init_err) < (Word32) 0) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 L_min_pred_init_err = L_pred_init_err; move32 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 Copy(temp_r1, lsf_r1, M); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 Copy(temp_p, lsf_p, M); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 /* Set zerom */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 Copy(&past_rq_init[j*M], st->past_rq, M); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 *pred_init_i = j; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 } /* endif */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 } /* next j */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 } /* endif MRDTX */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 /*---- Split-VQ of prediction error ----*/ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 if (sub (mode, MR475) == 0 || sub (mode, MR515) == 0) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 { /* MR475, MR515 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 test (); test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 indice[0] = Vq_subvec3(&lsf_r1[0], dico1_lsf3, &wf1[0], DICO31_SIZE, 0); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 indice[1] = Vq_subvec3(&lsf_r1[3], dico2_lsf3, &wf1[3], DICO32_SIZE/2, 1); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 indice[2] = Vq_subvec4(&lsf_r1[6], mr515_3_lsf, &wf1[6], MR515_3_SIZE); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 else if (sub (mode, MR795) == 0) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 { /* MR795 */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 test (); test (); test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 indice[0] = Vq_subvec3(&lsf_r1[0], mr795_1_lsf, &wf1[0], MR795_1_SIZE, 0); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 indice[1] = Vq_subvec3(&lsf_r1[3], dico2_lsf3, &wf1[3], DICO32_SIZE, 0); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 indice[2] = Vq_subvec4(&lsf_r1[6], dico3_lsf3, &wf1[6], DICO33_SIZE); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 else |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 { /* MR59, MR67, MR74, MR102 , MRDTX */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 test (); test (); test (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 indice[0] = Vq_subvec3(&lsf_r1[0], dico1_lsf3, &wf1[0], DICO31_SIZE, 0); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 indice[1] = Vq_subvec3(&lsf_r1[3], dico2_lsf3, &wf1[3], DICO32_SIZE, 0); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 indice[2] = Vq_subvec4(&lsf_r1[6], dico3_lsf3, &wf1[6], DICO33_SIZE); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 /* Compute quantized LSFs and update the past quantized residual */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 for (i = 0; i < M; i++) |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 { |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 lsf1_q[i] = add(lsf_r1[i], lsf_p[i]); move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 st->past_rq[i] = lsf_r1[i]; move16 (); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 } |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 /* verification that LSFs has mimimum distance of LSF_GAP Hz */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 Reorder_lsf(lsf1_q, LSF_GAP, M); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 /* convert LSFs to the cosine domain */ |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 Lsf_lsp(lsf1_q, lsp1_q, M); |
9cca139a20a8
libtwamr: integrate q_plsf_3.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 } |