FreeCalypso > hg > gsm-codec-lib
annotate libtwamr/dec_amr.c @ 581:e2d5cad04cbf
libgsmhr1 RxFE: store CN R0+LPC separately from speech
In the original GSM 06.06 code the ECU for speech mode is entirely
separate from the CN generator, maintaining separate state. (The
main intertie between them is the speech vs CN state variable,
distinguishing between speech and CN BFIs, in addition to the
CN-specific function of distinguishing between initial and update
SIDs.)
In the present RxFE implementation I initially thought that we could
use the same saved_frame buffer for both ECU and CN, overwriting
just the first 4 params (R0 and LPC) when a valid SID comes in.
However, I now realize it was a bad idea: the original code has a
corner case (long sequence of speech-mode BFIs to put the ECU in
state 6, then SID and CN-mode BFIs, then a good speech frame) that
would be broken by that buffer reuse approach. We could eliminate
this corner case by resetting the ECU state when passing through
a CN insertion period, but doing so would needlessly increase
the behavioral diffs between GSM 06.06 and our version.
Solution: use a separate CN-specific buffer for CN R0+LPC parameters,
and match the behavior of GSM 06.06 code in this regard.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 13 Feb 2025 10:02:45 +0000 |
parents | 7bef001cd8b8 |
children |
rev | line source |
---|---|
426
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /************************************************************************* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * R99 Version 3.3.0 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * REL-4 Version 4.1.0 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 * File : dec_amr.c |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 * Purpose : Decoding of one speech frame using given codec mode |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 /* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 * MODULE INCLUDE FILE AND VERSION ID |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 #include "namespace.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 #include "dec_amr.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #include "typedef.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #include "basic_op.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 #include "no_count.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 #include "cnst.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 #include "memops.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 #include "syn_filt.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 #include "d_plsf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 #include "agc.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "int_lpc.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "dec_gain.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "dec_lag3.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "dec_lag6.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "d2_9pf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "d2_11pf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "d3_14pf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "d4_17pf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 #include "d8_31pf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 #include "d1035pf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 #include "pred_lt.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 #include "d_gain_p.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 #include "d_gain_c.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 #include "dec_gain.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 #include "ec_gains.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 #include "ph_disp.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 #include "c_g_aver.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 #include "int_lsf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 #include "lsp_lsf.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 #include "lsp_avg.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 #include "bgnscd.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 #include "ex_ctrl.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 #include "sqrt_l.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 #include "lsp_tab.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 #include "bitno.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 #include "b_cn_cod.h" |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 /* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 * LOCAL VARIABLES AND TABLES |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 /*-----------------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 * Decoder constant parameters (defined in "cnst.h") * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 *-----------------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 * L_FRAME : Frame size. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 * L_FRAME_BY2 : Half the frame size. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 * L_SUBFR : Sub-frame size. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 * M : LPC order. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 * MP1 : LPC order+1 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 * PIT_MIN : Minimum pitch lag. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 * PIT_MIN_MR122 : Minimum pitch lag for the MR122 mode. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 * PIT_MAX : Maximum pitch lag. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 * L_INTERPOL : Length of filter for interpolation * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 * PRM_SIZE : size of vector containing analysis parameters * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 *-----------------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 /* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 * PUBLIC PROGRAM CODE |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 ***************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 /* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 ************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 * Function : Decoder_amr_reset |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 * Purpose : Resets state memory |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 ************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 void Decoder_amr_reset (Decoder_amrState *state, Flag dtx_partial_reset) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 Word16 i; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 /* Initialize static pointer */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 state->exc = state->old_exc + PIT_MAX + L_INTERPOL; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 /* Static vectors to zero */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 Set_zero (state->old_exc, PIT_MAX + L_INTERPOL); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 if (!dtx_partial_reset) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 Set_zero (state->mem_syn, M); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 /* initialize pitch sharpening */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 state->sharp = SHARPMIN; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 state->old_T0 = 40; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 /* Initialize state->lsp_old [] */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 if (!dtx_partial_reset) { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 Copy(lsp_init_data, &state->lsp_old[0], M); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 /* Initialize memories of bad frame handling */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 state->prev_bf = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 state->prev_pdf = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 state->state = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 state->T0_lagBuff = 40; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 state->inBackgroundNoise = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 state->voicedHangover = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 if (!dtx_partial_reset) { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 for (i=0;i<9;i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 state->excEnergyHist[i] = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 for (i = 0; i < 9; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 state->ltpGainHistory[i] = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 Cb_gain_average_reset(&state->Cb_gain_averState); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 if (!dtx_partial_reset) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 lsp_avg_reset(&state->lsp_avg_st); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 D_plsf_reset(&state->lsfState); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 ec_gain_pitch_reset(&state->ec_gain_p_st); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 ec_gain_code_reset(&state->ec_gain_c_st); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 if (!dtx_partial_reset) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 gc_pred_reset(&state->pred_state); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 Bgn_scd_reset(&state->background_state); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 state->nodataSeed = 21845; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 ph_disp_reset(&state->ph_disp_st); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 if (!dtx_partial_reset) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 dtx_dec_reset(&state->dtxDecoderState); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 /* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 ************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 * Function : Decoder_amr |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 * Purpose : Speech decoder routine. |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 ************************************************************************** |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 int Decoder_amr ( |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 Decoder_amrState *st, /* i/o : State variables */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 enum Mode mode, /* i : AMR mode */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 Word16 parm[], /* i : vector of synthesis parameters |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 (PRM_SIZE) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 enum RXFrameType frame_type, /* i : received frame type */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 Word16 synth[], /* o : synthesis speech (L_FRAME) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 Word16 A_t[] /* o : decoded LP filter in 4 subframes |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 (AZ_SIZE) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 /* LPC coefficients */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 Word16 *Az; /* Pointer on A_t */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 /* LSPs */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 Word16 lsp_new[M]; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 Word16 lsp_mid[M]; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 /* LSFs */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 Word16 prev_lsf[M]; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 Word16 lsf_i[M]; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 /* Algebraic codevector */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 Word16 code[L_SUBFR]; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 /* excitation */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 Word16 excp[L_SUBFR]; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 Word16 exc_enhanced[L_SUBFR]; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 /* Scalars */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 Word16 i, i_subfr; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 Word16 T0, T0_frac, index, index_mr475 = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 Word16 gain_pit, gain_code, gain_code_mix, pit_sharp, pit_flag, pitch_fac; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 Word16 t0_min, t0_max; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 Word16 delta_frc_low, delta_frc_range; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 Word16 tmp_shift; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 Word16 temp; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 Word32 L_temp; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 Word16 flag4; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 Word16 carefulFlag; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 Word16 excEnergy; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 Word16 subfrNr; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 Word16 evenSubfr = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 Word16 bfi = 0; /* bad frame indication flag */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 Word16 pdfi = 0; /* potential degraded bad frame flag */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 enum DTXStateType newDTXState; /* SPEECH , DTX, DTX_MUTE */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 /* find the new DTX state SPEECH OR DTX */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 newDTXState = rx_dtx_handler(&st->dtxDecoderState, frame_type); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 /* DTX actions */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 if (sub(newDTXState, SPEECH) != 0 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 Decoder_amr_reset (st, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 dtx_dec(&st->dtxDecoderState, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 st->mem_syn, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 &st->lsfState, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 &st->pred_state, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 &st->Cb_gain_averState, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 newDTXState, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 mode, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 parm, synth, A_t); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 /* update average lsp */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 Lsf_lsp(st->lsfState.past_lsf_q, st->lsp_old, M); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 lsp_avg(&st->lsp_avg_st, st->lsfState.past_lsf_q); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 goto the_end; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 /* SPEECH action state machine */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 if ((sub(frame_type, RX_SPEECH_BAD) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 (sub(frame_type, RX_NO_DATA) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 (sub(frame_type, RX_ONSET) == 0)) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 bfi = 1; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 if ((sub(frame_type, RX_NO_DATA) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 (sub(frame_type, RX_ONSET) == 0)) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 build_CN_param(&st->nodataSeed, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 prmno[mode], |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 bitno[mode], |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 parm); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 else if (sub(frame_type, RX_SPEECH_DEGRADED) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 pdfi = 1; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 if (bfi != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 st->state = add (st->state, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 else if (sub (st->state, 6) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 st->state = 5; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 st->state = 0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 if (sub (st->state, 6) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 st->state = 6; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 /* If this frame is the first speech frame after CNI period, */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 /* set the BFH state machine to an appropriate state depending */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 /* on whether there was DTX muting before start of speech or not */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 /* If there was DTX muting, the first speech frame is muted. */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 /* If there was no DTX muting, the first speech frame is not */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 /* muted. The BFH state machine starts from state 5, however, to */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 /* keep the audible noise resulting from a SID frame which is */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 /* erroneously interpreted as a good speech frame as small as */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 /* possible (the decoder output in this case is quickly muted) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 if (sub(st->dtxDecoderState.dtxGlobalState, DTX) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 st->state = 5; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 st->prev_bf = 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 else if (test (), sub(st->dtxDecoderState.dtxGlobalState, DTX_MUTE) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 st->state = 5; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 st->prev_bf = 1; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 /* save old LSFs for CB gain smoothing */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 Copy (st->lsfState.past_lsf_q, prev_lsf, M); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 /* decode LSF parameters and generate interpolated lpc coefficients |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 for the 4 subframes */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 if (sub (mode, MR122) != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 D_plsf_3(&st->lsfState, mode, bfi, parm, lsp_new); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 /* Advance synthesis parameters pointer */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 parm += 3; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 Int_lpc_1to3(st->lsp_old, lsp_new, A_t); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 D_plsf_5(&st->lsfState, bfi, parm, lsp_mid, lsp_new); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 /* Advance synthesis parameters pointer */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 parm += 5; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 Int_lpc_1and3(st->lsp_old, lsp_mid, lsp_new, A_t); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 /* update the LSPs for the next frame */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 for (i = 0; i < M; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 st->lsp_old[i] = lsp_new[i]; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 /*------------------------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 * Loop for every subframe in the analysis frame * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 *------------------------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 * The subframe size is L_SUBFR and the loop is repeated L_FRAME/L_SUBFR * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 * times * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 * - decode the pitch delay * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 * - decode algebraic code * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 * - decode pitch and codebook gains * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 * - find the excitation and compute synthesis speech * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 *------------------------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 /* pointer to interpolated LPC parameters */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 Az = A_t; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 evenSubfr = 0; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 subfrNr = -1; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 for (i_subfr = 0; i_subfr < L_FRAME; i_subfr += L_SUBFR) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 subfrNr = add(subfrNr, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 evenSubfr = sub(1, evenSubfr); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 /* flag for first and 3th subframe */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 pit_flag = i_subfr; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
349 if (sub (i_subfr, L_FRAME_BY2) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
350 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
351 test(); test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 if (sub(mode, MR475) != 0 && sub(mode, MR515) != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
353 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
354 pit_flag = 0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
355 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
356 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 /* pitch index */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 index = *parm++; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
362 * - decode pitch lag and find adaptive codebook vector. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
363 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
364 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
365 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
366 if (sub(mode, MR122) != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
367 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 /* flag4 indicates encoding with 4 bit resolution; */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
369 /* this is needed for mode MR475, MR515, MR59 and MR67 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
370 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
371 flag4 = 0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
372 test (); test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
373 if ((sub (mode, MR475) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
374 (sub (mode, MR515) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
375 (sub (mode, MR59) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 (sub (mode, MR67) == 0) ) { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 flag4 = 1; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 * - get ranges for the t0_min and t0_max * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 * - only needed in delta decoding * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 delta_frc_low = 5; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 delta_frc_range = 9; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
387 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
388 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 if ( sub(mode, MR795) == 0 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
390 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
391 delta_frc_low = 10; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
392 delta_frc_range = 19; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
393 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
394 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
395 t0_min = sub(st->old_T0, delta_frc_low); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
396 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
397 if (sub(t0_min, PIT_MIN) < 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
398 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
399 t0_min = PIT_MIN; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
400 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
401 t0_max = add(t0_min, delta_frc_range); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
402 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
403 if (sub(t0_max, PIT_MAX) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
404 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
405 t0_max = PIT_MAX; move16(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
406 t0_min = sub(t0_max, delta_frc_range); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
408 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
409 Dec_lag3 (index, t0_min, t0_max, pit_flag, st->old_T0, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
410 &T0, &T0_frac, flag4); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
411 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
412 st->T0_lagBuff = T0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
413 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
414 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
415 if (bfi != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
416 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
417 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
418 if (sub (st->old_T0, PIT_MAX) < 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
419 { /* Graceful pitch */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 st->old_T0 = add(st->old_T0, 1); /* degradation */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
421 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
422 T0 = st->old_T0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
423 T0_frac = 0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
424 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
425 test (); test (); test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
426 if ( st->inBackgroundNoise != 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
427 sub(st->voicedHangover, 4) > 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
428 ((sub(mode, MR475) == 0 ) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
429 (sub(mode, MR515) == 0 ) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
430 (sub(mode, MR59) == 0) ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
432 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
433 T0 = st->T0_lagBuff; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
434 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
435 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
436 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 Pred_lt_3or6 (st->exc, T0, T0_frac, L_SUBFR, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
438 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
439 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
440 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
441 Dec_lag6 (index, PIT_MIN_MR122, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
442 PIT_MAX, pit_flag, &T0, &T0_frac); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
443 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
444 test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
445 if ( bfi == 0 && (pit_flag == 0 || sub (index, 61) < 0)) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
446 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
447 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
449 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
450 st->T0_lagBuff = T0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
451 T0 = st->old_T0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
452 T0_frac = 0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
453 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
454 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
455 Pred_lt_3or6 (st->exc, T0, T0_frac, L_SUBFR, 0); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
456 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
457 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
458 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
459 * - (MR122 only: Decode pitch gain.) * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
460 * - Decode innovative codebook. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
461 * - set pitch sharpening factor * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
462 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
463 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
464 if (sub (mode, MR475) == 0 || sub (mode, MR515) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 { /* MR475, MR515 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
466 index = *parm++; /* index of position */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
467 i = *parm++; /* signs */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
468 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
469 decode_2i40_9bits (subfrNr, i, index, code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
470 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
471 pit_sharp = shl (st->sharp, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
472 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
473 else if (sub (mode, MR59) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
474 { /* MR59 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
475 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
476 index = *parm++; /* index of position */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
477 i = *parm++; /* signs */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
478 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
479 decode_2i40_11bits (i, index, code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
480 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
481 pit_sharp = shl (st->sharp, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
482 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
483 else if (sub (mode, MR67) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
484 { /* MR67 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485 test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
486 index = *parm++; /* index of position */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
487 i = *parm++; /* signs */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
488 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
489 decode_3i40_14bits (i, index, code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
490 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
491 pit_sharp = shl (st->sharp, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
492 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
493 else if (sub (mode, MR795) <= 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
494 { /* MR74, MR795 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
495 test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
496 index = *parm++; /* index of position */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
497 i = *parm++; /* signs */ move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
498 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
499 decode_4i40_17bits (i, index, code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
500 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
501 pit_sharp = shl (st->sharp, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
502 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
503 else if (sub (mode, MR102) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
504 { /* MR102 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
505 test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
506 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
507 dec_8i40_31bits (parm, code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
508 parm += 7; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
509 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
510 pit_sharp = shl (st->sharp, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
511 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
512 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
513 { /* MR122 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
514 test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
515 index = *parm++; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
516 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
517 if (bfi != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
518 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
519 ec_gain_pitch (&st->ec_gain_p_st, st->state, &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
520 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
521 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
522 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
523 gain_pit = d_gain_pitch (mode, index); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
524 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
525 ec_gain_pitch_update (&st->ec_gain_p_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
526 &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
527 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
528 dec_10i40_35bits (parm, code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
529 parm += 10; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
530 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
531 /* pit_sharp = gain_pit; */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
532 /* if (pit_sharp > 1.0) pit_sharp = 1.0; */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
533 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
534 pit_sharp = shl (gain_pit, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
535 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
536 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
537 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
538 * - Add the pitch contribution to code[]. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
539 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
540 for (i = T0; i < L_SUBFR; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
541 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
542 temp = mult (code[i - T0], pit_sharp); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
543 code[i] = add (code[i], temp); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
544 move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
545 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
546 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
547 /*------------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
548 * - Decode codebook gain (MR122) or both pitch * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
549 * gain and codebook gain (all others) * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
550 * - Update pitch sharpening "sharp" with quantized gain_pit * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
551 *------------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
552 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
553 if (test(), sub (mode, MR475) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
554 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
555 /* read and decode pitch and code gain */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
556 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
557 if (evenSubfr != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
558 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
559 index_mr475 = *parm++; move16 (); /* index of gain(s) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
560 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
561 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
562 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
563 if (bfi == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
564 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
565 Dec_gain(&st->pred_state, mode, index_mr475, code, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
566 evenSubfr, &gain_pit, &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
567 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
568 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
569 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
570 ec_gain_pitch (&st->ec_gain_p_st, st->state, &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
571 ec_gain_code (&st->ec_gain_c_st, &st->pred_state, st->state, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
572 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
573 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
574 ec_gain_pitch_update (&st->ec_gain_p_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
575 &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
576 ec_gain_code_update (&st->ec_gain_c_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
577 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
578 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
579 pit_sharp = gain_pit; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
580 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
581 if (sub (pit_sharp, SHARPMAX) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
582 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
583 pit_sharp = SHARPMAX; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
584 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
585 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
586 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
587 else if (test(), test(), (sub (mode, MR74) <= 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
588 (sub (mode, MR102) == 0)) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
589 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
590 /* read and decode pitch and code gain */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
591 index = *parm++; move16 (); /* index of gain(s) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
592 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
593 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
594 if (bfi == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
595 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
596 Dec_gain(&st->pred_state, mode, index, code, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
597 evenSubfr, &gain_pit, &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
598 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
599 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
600 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
601 ec_gain_pitch (&st->ec_gain_p_st, st->state, &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
602 ec_gain_code (&st->ec_gain_c_st, &st->pred_state, st->state, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
603 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
604 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
605 ec_gain_pitch_update (&st->ec_gain_p_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
606 &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
607 ec_gain_code_update (&st->ec_gain_c_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
608 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
609 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
610 pit_sharp = gain_pit; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
611 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
612 if (sub (pit_sharp, SHARPMAX) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
613 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
614 pit_sharp = SHARPMAX; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
615 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
616 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
617 if (sub (mode, MR102) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
618 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
619 if (sub (st->old_T0, add(L_SUBFR, 5)) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
620 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
621 pit_sharp = shr(pit_sharp, 2); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
622 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
623 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
624 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
625 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
626 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
627 /* read and decode pitch gain */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
628 index = *parm++; move16 (); /* index of gain(s) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
629 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
630 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
631 if (sub (mode, MR795) == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
632 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
633 /* decode pitch gain */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
634 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
635 if (bfi != 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
636 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
637 ec_gain_pitch (&st->ec_gain_p_st, st->state, &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
638 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
639 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
640 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
641 gain_pit = d_gain_pitch (mode, index); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
642 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
643 ec_gain_pitch_update (&st->ec_gain_p_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
644 &gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
645 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
646 /* read and decode code gain */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
647 index = *parm++; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
648 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
649 if (bfi == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
650 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
651 d_gain_code (&st->pred_state, mode, index, code, &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
652 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
653 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
654 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
655 ec_gain_code (&st->ec_gain_c_st, &st->pred_state, st->state, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
656 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
657 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
658 ec_gain_code_update (&st->ec_gain_c_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
659 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
660 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
661 pit_sharp = gain_pit; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
662 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
663 if (sub (pit_sharp, SHARPMAX) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
664 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
665 pit_sharp = SHARPMAX; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
666 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
667 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
668 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
669 { /* MR122 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
670 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
671 if (bfi == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
672 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
673 d_gain_code (&st->pred_state, mode, index, code, &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
674 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
675 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
676 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
677 ec_gain_code (&st->ec_gain_c_st, &st->pred_state, st->state, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
678 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
679 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
680 ec_gain_code_update (&st->ec_gain_c_st, bfi, st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
681 &gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
682 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
683 pit_sharp = gain_pit; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
684 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
685 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
686 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
687 /* store pitch sharpening for next subframe */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
688 /* (for modes which use the previous pitch gain for |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
689 pitch sharpening in the search phase) */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
690 /* do not update sharpening in even subframes for MR475 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
691 test(); test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
692 if (sub(mode, MR475) != 0 || evenSubfr == 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
693 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
694 st->sharp = gain_pit; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
695 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
696 if (sub (st->sharp, SHARPMAX) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
697 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
698 st->sharp = SHARPMAX; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
699 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
700 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
701 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
702 pit_sharp = shl (pit_sharp, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
703 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
704 if (sub (pit_sharp, 16384) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
705 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
706 for (i = 0; i < L_SUBFR; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
707 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
708 temp = mult (st->exc[i], pit_sharp); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
709 L_temp = L_mult (temp, gain_pit); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
710 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
711 if (sub(mode, MR122)==0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
712 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
713 L_temp = L_shr (L_temp, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
714 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
715 excp[i] = round (L_temp); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
716 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
717 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
718 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
719 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
720 * - Store list of LTP gains needed in the source * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
721 * characteristic detector (SCD) * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
722 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
723 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
724 if ( bfi == 0 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
725 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
726 for (i = 0; i < 8; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
727 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
728 st->ltpGainHistory[i] = st->ltpGainHistory[i+1]; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
729 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
730 st->ltpGainHistory[8] = gain_pit; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
731 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
732 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
733 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
734 * - Limit gain_pit if in background noise and BFI * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
735 * for MR475, MR515, MR59 * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
736 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
737 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
738 test (); test (); test (); test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
739 if ( (st->prev_bf != 0 || bfi != 0) && st->inBackgroundNoise != 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
740 ((sub(mode, MR475) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
741 (sub(mode, MR515) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
742 (sub(mode, MR59) == 0)) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
743 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
744 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
745 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
746 if ( sub (gain_pit, 12288) > 0) /* if (gain_pit > 0.75) in Q14*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
747 gain_pit = add( shr( sub(gain_pit, 12288), 1 ), 12288 ); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
748 /* gain_pit = (gain_pit-0.75)/2.0 + 0.75; */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
749 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
750 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
751 if ( sub (gain_pit, 14745) > 0) /* if (gain_pit > 0.90) in Q14*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
752 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
753 gain_pit = 14745; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
754 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
755 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
756 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
757 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
758 * Calculate CB mixed gain * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
759 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
760 Int_lsf(prev_lsf, st->lsfState.past_lsf_q, i_subfr, lsf_i); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
761 gain_code_mix = Cb_gain_average( |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
762 &st->Cb_gain_averState, mode, gain_code, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
763 lsf_i, st->lsp_avg_st.lsp_meanSave, bfi, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
764 st->prev_bf, pdfi, st->prev_pdf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
765 st->inBackgroundNoise, st->voicedHangover); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
766 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
767 /* make sure that MR74, MR795, MR122 have original code_gain*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
768 test(); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
769 if ((sub(mode, MR67) > 0) && (sub(mode, MR102) != 0) ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
770 /* MR74, MR795, MR122 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
771 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
772 gain_code_mix = gain_code; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
773 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
774 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
775 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
776 * - Find the total excitation. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
777 * - Find synthesis speech corresponding to st->exc[]. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
778 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
779 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
780 if (sub(mode, MR102) <= 0) /* MR475, MR515, MR59, MR67, MR74, MR795, MR102*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
781 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
782 pitch_fac = gain_pit; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
783 tmp_shift = 1; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
784 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
785 else /* MR122 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
786 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
787 pitch_fac = shr (gain_pit, 1); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
788 tmp_shift = 2; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
789 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
790 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
791 /* copy unscaled LTP excitation to exc_enhanced (used in phase |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
792 * dispersion below) and compute total excitation for LTP feedback |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
793 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
794 for (i = 0; i < L_SUBFR; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
795 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
796 exc_enhanced[i] = st->exc[i]; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
797 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
798 /* st->exc[i] = gain_pit*st->exc[i] + gain_code*code[i]; */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
799 L_temp = L_mult (st->exc[i], pitch_fac); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
800 /* 12.2: Q0 * Q13 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
801 /* 7.4: Q0 * Q14 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
802 L_temp = L_mac (L_temp, code[i], gain_code); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
803 /* 12.2: Q12 * Q1 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
804 /* 7.4: Q13 * Q1 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
805 L_temp = L_shl (L_temp, tmp_shift); /* Q16 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
806 st->exc[i] = round (L_temp); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
807 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
808 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
809 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
810 * - Adaptive phase dispersion * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
811 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
812 ph_disp_release(&st->ph_disp_st); /* free phase dispersion adaption */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
813 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
814 test (); test (); test (); test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
815 if ( ((sub(mode, MR475) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
816 (sub(mode, MR515) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
817 (sub(mode, MR59) == 0)) && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
818 sub(st->voicedHangover, 3) > 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
819 st->inBackgroundNoise != 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
820 bfi != 0 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
821 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
822 ph_disp_lock(&st->ph_disp_st); /* Always Use full Phase Disp. */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
823 } /* if error in bg noise */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
824 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
825 /* apply phase dispersion to innovation (if enabled) and |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
826 compute total excitation for synthesis part */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
827 ph_disp(&st->ph_disp_st, mode, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
828 exc_enhanced, gain_code_mix, gain_pit, code, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
829 pitch_fac, tmp_shift); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
830 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
831 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
832 * - The Excitation control module are active during BFI.* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
833 * - Conceal drops in signal energy if in bg noise. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
834 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
835 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
836 L_temp = 0; move32 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
837 for (i = 0; i < L_SUBFR; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
838 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
839 L_temp = L_mac (L_temp, exc_enhanced[i], exc_enhanced[i] ); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
840 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
841 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
842 L_temp = L_shr (L_temp, 1); /* excEnergy = sqrt(L_temp) in Q0 */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
843 L_temp = sqrt_l_exp(L_temp, &temp); move32 (); /* function result */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
844 L_temp = L_shr(L_temp, add( shr(temp, 1), 15)); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
845 L_temp = L_shr(L_temp, 2); /* To cope with 16-bit and */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
846 excEnergy = extract_l(L_temp); /* scaling in ex_ctrl() */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
847 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
848 test (); test (); test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
849 test (); test (); test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
850 if ( ((sub (mode, MR475) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
851 (sub (mode, MR515) == 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
852 (sub (mode, MR59) == 0)) && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
853 sub(st->voicedHangover, 5) > 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
854 st->inBackgroundNoise != 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
855 sub(st->state, 4) < 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
856 ( (pdfi != 0 && st->prev_pdf != 0) || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
857 bfi != 0 || |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
858 st->prev_bf != 0) ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
859 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
860 carefulFlag = 0; move32 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
861 test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
862 if ( pdfi != 0 && bfi == 0 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
863 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
864 carefulFlag = 1; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
865 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
866 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
867 Ex_ctrl(exc_enhanced, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
868 excEnergy, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
869 st->excEnergyHist, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
870 st->voicedHangover, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
871 st->prev_bf, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
872 carefulFlag); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
873 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
874 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
875 test (); test (); test (); test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
876 if ( st->inBackgroundNoise != 0 && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
877 ( bfi != 0 || st->prev_bf != 0 ) && |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
878 sub(st->state, 4) < 0 ) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
879 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
880 ; /* do nothing! */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
881 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
882 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
883 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
884 /* Update energy history for all modes */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
885 for (i = 0; i < 8; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
886 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
887 st->excEnergyHist[i] = st->excEnergyHist[i+1]; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
888 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
889 st->excEnergyHist[8] = excEnergy; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
890 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
891 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
892 * Excitation control module end. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
893 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
894 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
895 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
896 if (sub (pit_sharp, 16384) > 0) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
897 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
898 for (i = 0; i < L_SUBFR; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
899 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
900 excp[i] = add (excp[i], exc_enhanced[i]); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
901 move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
902 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
903 agc2 (exc_enhanced, excp, L_SUBFR); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
904 Overflow = 0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
905 Syn_filt (Az, excp, &synth[i_subfr], L_SUBFR, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
906 st->mem_syn, 0); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
907 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
908 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
909 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
910 Overflow = 0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
911 Syn_filt (Az, exc_enhanced, &synth[i_subfr], L_SUBFR, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
912 st->mem_syn, 0); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
913 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
914 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
915 test (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
916 if (Overflow != 0) /* Test for overflow */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
917 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
918 for (i = 0; i < PIT_MAX + L_INTERPOL + L_SUBFR; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
919 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
920 st->old_exc[i] = shr(st->old_exc[i], 2); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
921 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
922 for (i = 0; i < L_SUBFR; i++) |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
923 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
924 exc_enhanced[i] = shr(exc_enhanced[i], 2); move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
925 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
926 Syn_filt(Az, exc_enhanced, &synth[i_subfr], L_SUBFR, st->mem_syn, 1); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
927 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
928 else |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
929 { |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
930 Copy(&synth[i_subfr+L_SUBFR-M], st->mem_syn, M); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
931 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
932 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
933 /*--------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
934 * Update signal for next frame. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
935 * -> shift to the left by L_SUBFR st->exc[] * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
936 *--------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
937 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
938 Copy (&st->old_exc[L_SUBFR], &st->old_exc[0], PIT_MAX + L_INTERPOL); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
939 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
940 /* interpolated LPC parameters for next subframe */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
941 Az += MP1; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
942 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
943 /* store T0 for next subframe */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
944 st->old_T0 = T0; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
945 } |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
946 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
947 /*-------------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
948 * Call the Source Characteristic Detector which updates * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
949 * st->inBackgroundNoise and st->voicedHangover. * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
950 *-------------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
951 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
952 st->inBackgroundNoise = Bgn_scd(&st->background_state, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
953 &(st->ltpGainHistory[0]), |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
954 &(synth[0]), |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
955 &(st->voicedHangover) ); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
956 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
957 dtx_dec_activity_update(&st->dtxDecoderState, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
958 st->lsfState.past_lsf_q, |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
959 synth); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
960 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
961 /* store bfi for next subframe */ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
962 st->prev_bf = bfi; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
963 st->prev_pdf = pdfi; move16 (); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
964 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
965 /*--------------------------------------------------* |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
966 * Calculate the LSF averages on the eight * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
967 * previous frames * |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
968 *--------------------------------------------------*/ |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
969 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
970 lsp_avg(&st->lsp_avg_st, st->lsfState.past_lsf_q); |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
971 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
972 the_end: |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
973 st->dtxDecoderState.dtxGlobalState = newDTXState; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
974 |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
975 return 0; |
7bef001cd8b8
libtwamr: integrate dec_amr.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
976 } |