annotate acelp_pitch_delay.h @ 7900:37f62a3dc645 libavcodec

Correct comment in the direct mode code. (note, yes this is unrelated to the previous simplification, the code always behaved like it is documented now.)
author michael
date Sun, 21 Sep 2008 23:49:53 +0000
parents c4a4495715dd
children c8743c33eeef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7170
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
1 /*
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
2 * gain code, gain pitch and pitch delay decoding
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
3 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
4 * Copyright (c) 2008 Vladimir Voroshilov
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
5 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
6 * This file is part of FFmpeg.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
7 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
12 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
16 * Lesser General Public License for more details.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
17 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
21 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
22
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7170
diff changeset
23 #ifndef AVCODEC_ACELP_PITCH_DELAY_H
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7170
diff changeset
24 #define AVCODEC_ACELP_PITCH_DELAY_H
7170
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
25
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
26 #include <stdint.h>
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
27
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
28 #define PITCH_DELAY_MIN 20
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
29 #define PITCH_DELAY_MAX 143
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
30
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
31 /**
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
32 * \brief Decode pitch delay of the first subframe encoded by 8 bits with 1/3
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
33 * resolution.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
34 * \param ac_index adaptive codebook index (8 bits)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
35 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
36 * \return pitch delay in 1/3 units
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
37 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
38 * Pitch delay is coded:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
39 * with 1/3 resolution, 19 < pitch_delay < 85
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
40 * integers only, 85 <= pitch_delay <= 143
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
41 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
42 int ff_acelp_decode_8bit_to_1st_delay3(int ac_index);
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
43
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
44 /**
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
45 * \brief Decode pitch delay of the second subframe encoded by 5 or 6 bits
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
46 * with 1/3 precision.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
47 * \param ac_index adaptive codebook index (5 or 6 bits)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
48 * \param pitch_delay_min lower bound (integer) of pitch delay interval
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
49 * for second subframe
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
50 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
51 * \return pitch delay in 1/3 units
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
52 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
53 * Pitch delay is coded:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
54 * with 1/3 resolution, -6 < pitch_delay - int(prev_pitch_delay) < 5
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
55 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
56 * \remark The routine is used in G.729 @8k, AMR @10.2k, AMR @7.95k,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
57 * AMR @7.4k for the second subframe.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
58 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
59 int ff_acelp_decode_5_6_bit_to_2nd_delay3(
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
60 int ac_index,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
61 int pitch_delay_min);
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
62
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
63 /**
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
64 * \brief Decode pitch delay with 1/3 precision.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
65 * \param ac_index adaptive codebook index (4 bits)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
66 * \param pitch_delay_min lower bound (integer) of pitch delay interval for
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
67 * second subframe
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
68 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
69 * \return pitch delay in 1/3 units
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
70 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
71 * Pitch delay is coded:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
72 * integers only, -6 < pitch_delay - int(prev_pitch_delay) <= -2
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
73 * with 1/3 resolution, -2 < pitch_delay - int(prev_pitch_delay) < 1
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
74 * integers only, 1 <= pitch_delay - int(prev_pitch_delay) < 5
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
75 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
76 * \remark The routine is used in G.729 @6.4k, AMR @6.7k, AMR @5.9k,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
77 * AMR @5.15k, AMR @4.75k for the second subframe.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
78 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
79 int ff_acelp_decode_4bit_to_2nd_delay3(
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
80 int ac_index,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
81 int pitch_delay_min);
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
82
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
83 /**
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
84 * \brief Decode pitch delay of the first subframe encoded by 9 bits
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
85 * with 1/6 precision.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
86 * \param ac_index adaptive codebook index (9 bits)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
87 * \param pitch_delay_min lower bound (integer) of pitch delay interval for
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
88 * second subframe
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
89 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
90 * \return pitch delay in 1/6 units
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
91 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
92 * Pitch delay is coded:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
93 * with 1/6 resolution, 17 < pitch_delay < 95
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
94 * integers only, 95 <= pitch_delay <= 143
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
95 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
96 * \remark The routine is used in AMR @12.2k for the first and third subframes.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
97 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
98 int ff_acelp_decode_9bit_to_1st_delay6(int ac_index);
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
99
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
100 /**
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
101 * \brief Decode pitch delay of the second subframe encoded by 6 bits
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
102 * with 1/6 precision.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
103 * \param ac_index adaptive codebook index (6 bits)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
104 * \param pitch_delay_min lower bound (integer) of pitch delay interval for
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
105 * second subframe
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
106 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
107 * \return pitch delay in 1/6 units
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
108 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
109 * Pitch delay is coded:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
110 * with 1/6 resolution, -6 < pitch_delay - int(prev_pitch_delay) < 5
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
111 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
112 * \remark The routine is used in AMR @12.2k for the second and fourth subframes.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
113 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
114 int ff_acelp_decode_6bit_to_2nd_delay6(
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
115 int ac_index,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
116 int pitch_delay_min);
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
117
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
118 /**
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
119 * \brief Update past quantized energies
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
120 * \param quant_energy [in/out] past quantized energies (5.10)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
121 * \param gain_corr_factor gain correction factor
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
122 * \param log2_ma_pred_order log2() of MA prediction order
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
123 * \param erasure frame erasure flag
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
124 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
125 * If frame erasure flag is not equal to zero, memory is updated with
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
126 * averaged energy, attenuated by 4dB:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
127 * max(avg(quant_energy[i])-4, -14), i=0,ma_pred_order
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
128 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
129 * In normal mode memory is updated with
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
130 * Er - Ep = 20 * log10(gain_corr_factor)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
131 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
132 * \remark The routine is used in G.729 and AMR (all modes).
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
133 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
134 void ff_acelp_update_past_gain(
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
135 int16_t* quant_energy,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
136 int gain_corr_factor,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
137 int log2_ma_pred_order,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
138 int erasure);
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
139
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
140 /**
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
141 * \brief Decode the adaptive codebook gain and add
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
142 * correction (4.1.5 and 3.9.1 of G.729).
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
143 * \param gain_corr_factor gain correction factor (2.13)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
144 * \param fc_v fixed-codebook vector (2.13)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
145 * \param mr_energy mean innovation energy and fixed-point correction (7.13)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
146 * \param quant_energy [in/out] past quantized energies (5.10)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
147 * \param subframe_size length of subframe
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
148 * \param ma_pred_order MA prediction order
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
149 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
150 * \return quantized fixed-codebook gain (14.1)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
151 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
152 * The routine implements equations 69, 66 and 71 of the G.729 specification (3.9.1)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
153 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
154 * Em - mean innovation energy (dB, constant, depends on decoding algorithm)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
155 * Ep - mean-removed predicted energy (dB)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
156 * Er - mean-removed innovation energy (dB)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
157 * Ei - mean energy of the fixed-codebook contribution (dB)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
158 * N - subframe_size
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
159 * M - MA (Moving Average) prediction order
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
160 * gc - fixed-codebook gain
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
161 * gc_p - predicted fixed-codebook gain
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
162 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
163 * Fixed codebook gain is computed using predicted gain gc_p and
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
164 * correction factor gain_corr_factor as shown below:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
165 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
166 * gc = gc_p * gain_corr_factor
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
167 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
168 * The predicted fixed codebook gain gc_p is found by predicting
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
169 * the energy of the fixed-codebook contribution from the energy
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
170 * of previous fixed-codebook contributions.
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
171 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
172 * mean = 1/N * sum(i,0,N){ fc_v[i] * fc_v[i] }
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
173 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
174 * Ei = 10log(mean)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
175 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
176 * Er = 10log(1/N * gc^2 * mean) - Em = 20log(gc) + Ei - Em
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
177 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
178 * Replacing Er with Ep and gc with gc_p we will receive:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
179 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
180 * Ep = 10log(1/N * gc_p^2 * mean) - Em = 20log(gc_p) + Ei - Em
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
181 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
182 * and from above:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
183 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
184 * gc_p = 10^((Ep - Ei + Em) / 20)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
185 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
186 * Ep is predicted using past energies and prediction coefficients:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
187 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
188 * Ep = sum(i,0,M){ ma_prediction_coeff[i] * quant_energy[i] }
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
189 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
190 * gc_p in fixed-point arithmetic is calculated as following:
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
191 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
192 * mean = 1/N * sum(i,0,N){ (fc_v[i] / 2^13) * (fc_v[i] / 2^13) } =
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
193 * = 1/N * sum(i,0,N) { fc_v[i] * fc_v[i] } / 2^26
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
194 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
195 * Ei = 10log(mean) = -10log(N) - 10log(2^26) +
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
196 * + 10log(sum(i,0,N) { fc_v[i] * fc_v[i] })
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
197 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
198 * Ep - Ei + Em = Ep + Em + 10log(N) + 10log(2^26) -
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
199 * - 10log(sum(i,0,N) { fc_v[i] * fc_v[i] }) =
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
200 * = Ep + mr_energy - 10log(sum(i,0,N) { fc_v[i] * fc_v[i] })
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
201 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
202 * gc_p = 10 ^ ((Ep - Ei + Em) / 20) =
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
203 * = 2 ^ (3.3219 * (Ep - Ei + Em) / 20) = 2 ^ (0.166 * (Ep - Ei + Em))
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
204 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
205 * where
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
206 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
207 * mr_energy = Em + 10log(N) + 10log(2^26)
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
208 *
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
209 * \remark The routine is used in G.729 and AMR (all modes).
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
210 */
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
211 int16_t ff_acelp_decode_gain_code(
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
212 int gain_corr_factor,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
213 const int16_t* fc_v,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
214 int mr_energy,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
215 const int16_t* quant_energy,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
216 const int16_t* ma_prediction_coeff,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
217 int subframe_size,
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
218 int max_pred_order);
04da42c2b7b4 gain code, gain pitch and pitch delay decoding for ACELP based codecs
voroshil
parents:
diff changeset
219
7760
c4a4495715dd Globally rename the header inclusion guard names.
stefano
parents: 7170
diff changeset
220 #endif /* AVCODEC_ACELP_PITCH_DELAY_H */