annotate libtwamr/gain_q.c @ 585:3c6bf0d26ee7 default tip

TW-TS-005 reader: fix maximum line length bug TW-TS-005 section 4.1 states: The maximum allowed length of each line is 80 characters, not including the OS-specific newline encoding. The implementation of this line length limit in the TW-TS-005 hex file reader function in the present suite was wrong, such that lines of the full maximum length could not be read. Fix it. Note that this bug affects comment lines too, not just actual RTP payloads. Neither Annex A nor Annex B features an RTP payload format that goes to the maximum of 40 bytes, but if a comment line goes to the maximum allowed length of 80 characters not including the terminating newline, the bug will be triggered, necessitating the present fix.
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 25 Feb 2025 07:49:28 +0000
parents ccba5812fa44
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
378
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 /*
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 * GSM AMR-NB speech codec R98 Version 7.6.0 December 12, 2001
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 * R99 Version 3.3.0
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 * REL-4 Version 4.1.0
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 * File : gain_q.c
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 * Purpose : Quantazation of gains
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 /*
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 * MODULE INCLUDE FILE AND VERSION ID
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 #include "namespace.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 #include "gain_q.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 /*
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26 * INCLUDE FILES
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 #include "tw_amr.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 #include "typedef.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 #include "basic_op.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32 #include "no_count.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 #include "qua_gain.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 #include "cnst.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 #include "g_code.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 #include "q_gain_c.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 #include "gc_pred.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 #include "calc_en.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 #include "qgain795.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40 #include "qgain475.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 #include "memops.h"
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 /*
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 * PUBLIC PROGRAM CODE
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 ********************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 /*************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 * Function: gainQuant_reset
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 * Purpose: Initializes state memory to zero
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 **************************************************************************
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 void gainQuant_reset (gainQuantState *state)
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 state->sf0_exp_gcode0 = 0;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 state->sf0_frac_gcode0 = 0;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 state->sf0_exp_target_en = 0;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 state->sf0_frac_target_en = 0;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 Set_zero (state->sf0_exp_coeff, 5);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 Set_zero (state->sf0_frac_coeff, 5);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 gc_pred_reset(&state->gc_predSt);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 gc_pred_reset(&state->gc_predUnqSt);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 gain_adapt_reset(&state->adaptSt);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 int gainQuant(
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 gainQuantState *st, /* i/o : State struct */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 enum Mode mode, /* i : coder mode */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 Word16 res[], /* i : LP residual, Q0 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 Word16 exc[], /* i : LTP excitation (unfiltered), Q0 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76 Word16 code[], /* i : CB innovation (unfiltered), Q13 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 /* (unsharpened for MR475) */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 Word16 xn[], /* i : Target vector. */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 Word16 xn2[], /* i : Target vector. */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 Word16 y1[], /* i : Adaptive codebook. */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 Word16 Y2[], /* i : Filtered innovative vector. */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 Word16 g_coeff[], /* i : Correlations <xn y1> <y1 y1> */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83 /* Compute in G_pitch(). */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 Word16 even_subframe, /* i : even subframe indicator flag */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 Word16 gp_limit, /* i : pitch gain limit */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 Word16 *sf0_gain_pit, /* o : Pitch gain sf 0. MR475 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 Word16 *sf0_gain_cod, /* o : Code gain sf 0. MR475 */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 Word16 *gain_pit, /* i/o : Pitch gain. */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 Word16 *gain_cod, /* o : Code gain. */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 /* MR475: gain_* unquantized in even */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 /* subframes, quantized otherwise */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 Word16 **anap /* o : Index of quantization */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93 )
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 Word16 exp_gcode0;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96 Word16 frac_gcode0;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 Word16 qua_ener_MR122;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 Word16 qua_ener;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99 Word16 frac_coeff[5];
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 Word16 exp_coeff[5];
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101 Word16 exp_en, frac_en;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 Word16 cod_gain_exp, cod_gain_frac;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 test ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 if (sub (mode, MR475) == 0)
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 test ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 if (even_subframe != 0)
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 /* save position in output parameter stream and current
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 state of codebook gain predictor */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 st->gain_idx_ptr = (*anap)++;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 gc_pred_copy(&st->gc_predSt, &st->gc_predUnqSt);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 /* predict codebook gain (using "unquantized" predictor)*/
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 /* (note that code[] is unsharpened in MR475) */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117 gc_pred(&st->gc_predUnqSt, mode, code,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 &st->sf0_exp_gcode0, &st->sf0_frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 &exp_en, &frac_en);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 /* calculate energy coefficients for quantization
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 and store them in state structure (will be used
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 in next subframe when real quantizer is run) */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 calc_filt_energies(mode, xn, xn2, y1, Y2, g_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 st->sf0_frac_coeff, st->sf0_exp_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126 &cod_gain_frac, &cod_gain_exp);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 /* store optimum codebook gain (Q1) */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 *gain_cod = shl (cod_gain_frac, add (cod_gain_exp, 1));
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 move16 ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132 calc_target_energy(xn,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 &st->sf0_exp_target_en, &st->sf0_frac_target_en);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 /* calculate optimum codebook gain and update
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 "unquantized" predictor */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137 MR475_update_unq_pred(&st->gc_predUnqSt,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 st->sf0_exp_gcode0, st->sf0_frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139 cod_gain_exp, cod_gain_frac);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 /* the real quantizer is not run here... */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143 else
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145 /* predict codebook gain (using "unquantized" predictor) */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 /* (note that code[] is unsharpened in MR475) */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 gc_pred(&st->gc_predUnqSt, mode, code,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148 &exp_gcode0, &frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 &exp_en, &frac_en);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 /* calculate energy coefficients for quantization */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 calc_filt_energies(mode, xn, xn2, y1, Y2, g_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 frac_coeff, exp_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 &cod_gain_frac, &cod_gain_exp);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
156 calc_target_energy(xn, &exp_en, &frac_en);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
157
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
158 /* run real (4-dim) quantizer and update real gain predictor */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
159 *st->gain_idx_ptr = MR475_gain_quant(
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
160 &st->gc_predSt,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
161 st->sf0_exp_gcode0, st->sf0_frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
162 st->sf0_exp_coeff, st->sf0_frac_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
163 st->sf0_exp_target_en, st->sf0_frac_target_en,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
164 code,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
165 exp_gcode0, frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
166 exp_coeff, frac_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
167 exp_en, frac_en,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
168 gp_limit,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
169 sf0_gain_pit, sf0_gain_cod,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
170 gain_pit, gain_cod);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
171 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
172 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
173 else
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
174 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
175 /*-------------------------------------------------------------------*
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
176 * predict codebook gain and quantize *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
177 * (also compute normalized CB innovation energy for MR795) *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
178 *-------------------------------------------------------------------*/
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
179 gc_pred(&st->gc_predSt, mode, code, &exp_gcode0, &frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
180 &exp_en, &frac_en);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
181
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
182 test ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
183 if (sub(mode, MR122) == 0)
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
184 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
185 *gain_cod = G_code (xn2, Y2); move16 ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
186 *(*anap)++ = q_gain_code (mode, exp_gcode0, frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
187 gain_cod, &qua_ener_MR122, &qua_ener);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
188 move16 ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
189 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
190 else
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
191 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
192 /* calculate energy coefficients for quantization */
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
193 calc_filt_energies(mode, xn, xn2, y1, Y2, g_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
194 frac_coeff, exp_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
195 &cod_gain_frac, &cod_gain_exp);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
196
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
197 test ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
198 if (sub (mode, MR795) == 0)
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
199 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
200 MR795_gain_quant(&st->adaptSt, res, exc, code,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
201 frac_coeff, exp_coeff,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
202 exp_en, frac_en,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
203 exp_gcode0, frac_gcode0, L_SUBFR,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
204 cod_gain_frac, cod_gain_exp,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
205 gp_limit, gain_pit, gain_cod,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
206 &qua_ener_MR122, &qua_ener,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
207 anap);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
208 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
209 else
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
210 {
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
211 *(*anap)++ = Qua_gain(mode,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
212 exp_gcode0, frac_gcode0,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
213 frac_coeff, exp_coeff, gp_limit,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
214 gain_pit, gain_cod,
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
215 &qua_ener_MR122, &qua_ener);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
216 move16 ();
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
217 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
218 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
219
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
220 /*------------------------------------------------------------------*
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
221 * update table of past quantized energies *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
222 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
223 * st->past_qua_en(Q10) = 20 * Log10(qua_gain_code) / constant *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
224 * = Log2(qua_gain_code) *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
225 * = qua_ener *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
226 * constant = 20*Log10(2) *
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
227 *------------------------------------------------------------------*/
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
228 gc_pred_update(&st->gc_predSt, qua_ener_MR122, qua_ener);
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
229 }
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
230
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
231 return 0;
ccba5812fa44 libtwamr: integrate gain_q.c
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
232 }