FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/gc_pred.c @ 485:751f06541fbb
doc/Codec-utils: clarify lack of DHF in gsmfr-decode-rb
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 20 May 2024 01:47:22 +0000 |
parents | 7f99b8ed30e5 |
children |
rev | line source |
---|---|
336
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * R99 Version 3.3.0 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * REL-4 Version 4.1.0 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * File : gc_pred.c |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * Purpose : codebook gain MA prediction |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 /* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 * MODULE INCLUDE FILE AND VERSION ID |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 #include "namespace.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 #include "gc_pred.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 /* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 * INCLUDE FILES |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 #include "typedef.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 #include "basic_op.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "oper_32b.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "cnst.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "no_count.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "log2.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "memops.h" |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 /* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 * LOCAL VARIABLES AND TABLES |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 #define NPRED 4 /* number of prediction taps */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 /* MA prediction coefficients (Q13) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 static const Word16 pred[NPRED] = {5571, 4751, 2785, 1556}; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 /* average innovation energy. */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 /* MEAN_ENER = 36.0/constant, constant = 20*Log10(2) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 #define MEAN_ENER_MR122 783741L /* 36/(20*log10(2)) (Q17) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 /* MA prediction coefficients (Q6) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 static const Word16 pred_MR122[NPRED] = {44, 37, 22, 12}; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 /* minimum quantized energy: -14 dB */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 #define MIN_ENERGY -14336 /* 14 Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 #define MIN_ENERGY_MR122 -2381 /* 14 / (20*log10(2)) Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 /* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 * PUBLIC PROGRAM CODE |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 ***************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 /************************************************************************* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 * Function: gc_pred_reset |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 * Purpose: Initializes state memory to zero |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 ************************************************************************** |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 void gc_pred_reset (gc_predState *state) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 Word16 i; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 for(i = 0; i < NPRED; i++) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 state->past_qua_en[i] = MIN_ENERGY; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 state->past_qua_en_MR122[i] = MIN_ENERGY_MR122; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 /************************************************************************* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 * FUNCTION: gc_pred_copy() |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 * PURPOSE: Copy MA predictor state variable |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 *************************************************************************/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 void |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 gc_pred_copy( |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 gc_predState *st_src, /* i : State struct */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 gc_predState *st_dest /* o : State struct */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 ) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 Copy (st_src->past_qua_en, st_dest->past_qua_en, NPRED); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 Copy (st_src->past_qua_en_MR122, st_dest->past_qua_en_MR122, NPRED); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 /************************************************************************* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 * FUNCTION: gc_pred() |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 * PURPOSE: MA prediction of the innovation energy |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 * (in dB/(20*log10(2))) with mean removed). |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 *************************************************************************/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 void |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 gc_pred( |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 gc_predState *st, /* i/o: State struct */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 enum Mode mode, /* i : AMR mode */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 Word16 *code, /* i : innovative codebook vector (L_SUBFR) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 /* MR122: Q12, other modes: Q13 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 Word16 *exp_gcode0, /* o : exponent of predicted gain factor, Q0 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 Word16 *frac_gcode0,/* o : fraction of predicted gain factor Q15 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 Word16 *exp_en, /* o : exponent of innovation energy, Q0 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 /* (only calculated for MR795) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 Word16 *frac_en /* o : fraction of innovation energy, Q15 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 /* (only calculated for MR795) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 ) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 Word16 i; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 Word32 ener_code; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 Word16 exp, frac; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 /*-------------------------------------------------------------------* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 * energy of code: * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 * ~~~~~~~~~~~~~~~ * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 * ener_code = sum(code[i]^2) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 *-------------------------------------------------------------------*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 ener_code = L_mac((Word32) 0, code[0], code[0]); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 /* MR122: Q12*Q12 -> Q25 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 /* others: Q13*Q13 -> Q27 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 for (i = 1; i < L_SUBFR; i++) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 ener_code = L_mac(ener_code, code[i], code[i]); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 test (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 if (sub (mode, MR122) == 0) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 Word32 ener; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 /* ener_code = ener_code / lcode; lcode = 40; 1/40 = 26214 Q20 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 ener_code = L_mult (round (ener_code), 26214); /* Q9 * Q20 -> Q30 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 /*-------------------------------------------------------------------* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 * energy of code: * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 * ~~~~~~~~~~~~~~~ * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 * ener_code(Q17) = 10 * Log10(energy) / constant * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 * = 1/2 * Log2(energy) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 * constant = 20*Log10(2) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 *-------------------------------------------------------------------*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 /* ener_code = 1/2 * Log2(ener_code); Note: Log2=log2+30 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 Log2(ener_code, &exp, &frac); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 ener_code = L_Comp (sub (exp, 30), frac); /* Q16 for log() */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 /* ->Q17 for 1/2 log()*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 /*-------------------------------------------------------------------* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 * predicted energy: * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 * ~~~~~~~~~~~~~~~~~ * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 * ener(Q24) = (Emean + sum{pred[i]*past_en[i]})/constant * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 * = MEAN_ENER + sum(pred[i]*past_qua_en[i]) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 * constant = 20*Log10(2) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 *-------------------------------------------------------------------*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 ener = MEAN_ENER_MR122; move32 (); /* Q24 (Q17) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 for (i = 0; i < NPRED; i++) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 ener = L_mac (ener, st->past_qua_en_MR122[i], pred_MR122[i]); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 /* Q10 * Q13 -> Q24 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 /* Q10 * Q6 -> Q17 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 /*-------------------------------------------------------------------* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 * predicted codebook gain * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 * ~~~~~~~~~~~~~~~~~~~~~~~ * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 * gc0 = Pow10( (ener*constant - ener_code*constant) / 20 ) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 * = Pow2(ener-ener_code) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 * = Pow2(int(d)+frac(d)) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 * * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 * (store exp and frac for pow2()) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 *-------------------------------------------------------------------*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 ener = L_shr (L_sub (ener, ener_code), 1); /* Q16 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 L_Extract(ener, exp_gcode0, frac_gcode0); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 else /* all modes except 12.2 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 Word32 L_tmp; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 Word16 exp_code, gcode0; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 /*-----------------------------------------------------------------* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 * Compute: means_ener - 10log10(ener_code/ L_sufr) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 *-----------------------------------------------------------------*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 exp_code = norm_l (ener_code); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 ener_code = L_shl (ener_code, exp_code); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 /* Log2 = log2 + 27 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 Log2_norm (ener_code, exp_code, &exp, &frac); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 /* fact = 10/log2(10) = 3.01 = 24660 Q13 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 L_tmp = Mpy_32_16(exp, frac, -24660); /* Q0.Q15 * Q13 -> Q14 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 /* L_tmp = means_ener - 10log10(ener_code/L_SUBFR) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 * = means_ener - 10log10(ener_code) + 10log10(L_SUBFR) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 * = K - fact * Log2(ener_code) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 * = K - fact * log2(ener_code) - fact*27 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 * ==> K = means_ener + fact*27 + 10log10(L_SUBFR) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 * means_ener = 33 = 540672 Q14 (MR475, MR515, MR59) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 * means_ener = 28.75 = 471040 Q14 (MR67) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 * means_ener = 30 = 491520 Q14 (MR74) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 * means_ener = 36 = 589824 Q14 (MR795) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 * means_ener = 33 = 540672 Q14 (MR102) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 * 10log10(L_SUBFR) = 16.02 = 262481.51 Q14 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 * fact * 27 = 1331640 Q14 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 * ----------------------------------------- |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 * (MR475, MR515, MR59) K = 2134793.51 Q14 ~= 16678 * 64 * 2 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 * (MR67) K = 2065161.51 Q14 ~= 32268 * 32 * 2 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 * (MR74) K = 2085641.51 Q14 ~= 32588 * 32 * 2 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 * (MR795) K = 2183945.51 Q14 ~= 17062 * 64 * 2 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 * (MR102) K = 2134793.51 Q14 ~= 16678 * 64 * 2 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 if (test (), sub (mode, MR102) == 0) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 /* mean = 33 dB */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 L_tmp = L_mac(L_tmp, 16678, 64); /* Q14 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 else if (test (), sub (mode, MR795) == 0) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 /* ener_code = <xn xn> * 2^27*2^exp_code |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 frac_en = ener_code / 2^16 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 = <xn xn> * 2^11*2^exp_code |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 <xn xn> = <xn xn>*2^11*2^exp * 2^exp_en |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 := frac_en * 2^exp_en |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 ==> exp_en = -11-exp_code; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 *frac_en = extract_h (ener_code); move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 *exp_en = sub (-11, exp_code); move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 /* mean = 36 dB */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 L_tmp = L_mac(L_tmp, 17062, 64); /* Q14 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 else if (test (), sub (mode, MR74) == 0) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 /* mean = 30 dB */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 L_tmp = L_mac(L_tmp, 32588, 32); /* Q14 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 else if (test (), sub (mode, MR67) == 0) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 /* mean = 28.75 dB */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 L_tmp = L_mac(L_tmp, 32268, 32); /* Q14 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 else /* MR59, MR515, MR475 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 /* mean = 33 dB */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 L_tmp = L_mac(L_tmp, 16678, 64); /* Q14 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 /*-----------------------------------------------------------------* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 * Compute gcode0. * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 * = Sum(i=0,3) pred[i]*past_qua_en[i] - ener_code + mean_ener * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 *-----------------------------------------------------------------*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 L_tmp = L_shl(L_tmp, 10); /* Q24 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 for (i = 0; i < 4; i++) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 L_tmp = L_mac(L_tmp, pred[i], st->past_qua_en[i]); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 /* Q13 * Q10 -> Q24 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 gcode0 = extract_h(L_tmp); /* Q8 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 /*-----------------------------------------------------------------* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 * gcode0 = pow(10.0, gcode0/20) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 * = pow(2, 3.3219*gcode0/20) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 * = pow(2, 0.166*gcode0) * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 *-----------------------------------------------------------------*/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 /* 5439 Q15 = 0.165985 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 /* (correct: 1/(20*log10(2)) 0.166096 = 5443 Q15) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 test (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 if (sub (mode, MR74) == 0) /* For IS641 bitexactness */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 L_tmp = L_mult(gcode0, 5439); /* Q8 * Q15 -> Q24 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 else |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 L_tmp = L_mult(gcode0, 5443); /* Q8 * Q15 -> Q24 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 L_tmp = L_shr(L_tmp, 8); /* -> Q16 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 L_Extract(L_tmp, exp_gcode0, frac_gcode0); /* -> Q0.Q15 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 /************************************************************************* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 * FUNCTION: gc_pred_update() |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 * PURPOSE: update MA predictor with last quantized energy |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 *************************************************************************/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 void gc_pred_update( |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 gc_predState *st, /* i/o: State struct */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 Word16 qua_ener_MR122, /* i : quantized energy for update, Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 /* (log2(qua_err)) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 Word16 qua_ener /* i : quantized energy for update, Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 /* (20*log10(qua_err)) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 ) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 Word16 i; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 for (i = 3; i > 0; i--) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 st->past_qua_en[i] = st->past_qua_en[i - 1]; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 st->past_qua_en_MR122[i] = st->past_qua_en_MR122[i - 1]; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 st->past_qua_en_MR122[0] = qua_ener_MR122; /* log2 (qua_err), Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 st->past_qua_en[0] = qua_ener; /* 20*log10(qua_err), Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 /************************************************************************* |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 * FUNCTION: gc_pred_average_limited() |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 * PURPOSE: get average of MA predictor state values (with a lower limit) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 * [used in error concealment] |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 * |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 *************************************************************************/ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 void gc_pred_average_limited( |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 gc_predState *st, /* i: State struct */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 Word16 *ener_avg_MR122, /* o: everaged quantized energy, Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 /* (log2(qua_err)) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 Word16 *ener_avg /* o: averaged quantized energy, Q10 */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 /* (20*log10(qua_err)) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 ) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 Word16 av_pred_en; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 Word16 i; |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 /* do average in MR122 mode (log2() domain) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 av_pred_en = 0; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 for (i = 0; i < NPRED; i++) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 av_pred_en = add (av_pred_en, st->past_qua_en_MR122[i]); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 /* av_pred_en = 0.25*av_pred_en */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 av_pred_en = mult (av_pred_en, 8192); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 /* if (av_pred_en < -14/(20Log10(2))) av_pred_en = .. */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 test (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 if (sub (av_pred_en, MIN_ENERGY_MR122) < 0) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 av_pred_en = MIN_ENERGY_MR122; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 *ener_avg_MR122 = av_pred_en; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 /* do average for other modes (20*log10() domain) */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 av_pred_en = 0; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 for (i = 0; i < NPRED; i++) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 av_pred_en = add (av_pred_en, st->past_qua_en[i]); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 /* av_pred_en = 0.25*av_pred_en */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 av_pred_en = mult (av_pred_en, 8192); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 /* if (av_pred_en < -14) av_pred_en = .. */ |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 test (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 if (sub (av_pred_en, MIN_ENERGY) < 0) |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 { |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 av_pred_en = MIN_ENERGY; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 } |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 *ener_avg = av_pred_en; move16 (); |
7f99b8ed30e5
libtwamr: integrate gc_pred.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 } |