summaryrefslogtreecommitdiff
path: root/lib/rbcodec/codecs/libopus/silk/float/main_FLP.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rbcodec/codecs/libopus/silk/float/main_FLP.h')
-rw-r--r--lib/rbcodec/codecs/libopus/silk/float/main_FLP.h286
1 files changed, 286 insertions, 0 deletions
diff --git a/lib/rbcodec/codecs/libopus/silk/float/main_FLP.h b/lib/rbcodec/codecs/libopus/silk/float/main_FLP.h
new file mode 100644
index 0000000000..5dc0ccf4a4
--- /dev/null
+++ b/lib/rbcodec/codecs/libopus/silk/float/main_FLP.h
@@ -0,0 +1,286 @@
1/***********************************************************************
2Copyright (c) 2006-2011, Skype Limited. All rights reserved.
3Redistribution and use in source and binary forms, with or without
4modification, are permitted provided that the following conditions
5are met:
6- Redistributions of source code must retain the above copyright notice,
7this list of conditions and the following disclaimer.
8- Redistributions in binary form must reproduce the above copyright
9notice, this list of conditions and the following disclaimer in the
10documentation and/or other materials provided with the distribution.
11- Neither the name of Internet Society, IETF or IETF Trust, nor the
12names of specific contributors, may be used to endorse or promote
13products derived from this software without specific prior written
14permission.
15THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25POSSIBILITY OF SUCH DAMAGE.
26***********************************************************************/
27
28#ifndef SILK_MAIN_FLP_H
29#define SILK_MAIN_FLP_H
30
31#include "SigProc_FLP.h"
32#include "SigProc_FIX.h"
33#include "structs_FLP.h"
34#include "main.h"
35#include "define.h"
36#include "debug.h"
37#include "entenc.h"
38
39#ifdef __cplusplus
40extern "C"
41{
42#endif
43
44#define silk_encoder_state_Fxx silk_encoder_state_FLP
45#define silk_encode_do_VAD_Fxx silk_encode_do_VAD_FLP
46#define silk_encode_frame_Fxx silk_encode_frame_FLP
47
48/*********************/
49/* Encoder Functions */
50/*********************/
51
52/* High-pass filter with cutoff frequency adaptation based on pitch lag statistics */
53void silk_HP_variable_cutoff(
54 silk_encoder_state_Fxx state_Fxx[] /* I/O Encoder states */
55);
56
57/* Encoder main function */
58void silk_encode_do_VAD_FLP(
59 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
60 opus_int activity /* I Decision of Opus voice activity detector */
61);
62
63/* Encoder main function */
64opus_int silk_encode_frame_FLP(
65 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
66 opus_int32 *pnBytesOut, /* O Number of payload bytes; */
67 ec_enc *psRangeEnc, /* I/O compressor data structure */
68 opus_int condCoding, /* I The type of conditional coding to use */
69 opus_int maxBits, /* I If > 0: maximum number of output bits */
70 opus_int useCBR /* I Flag to force constant-bitrate operation */
71);
72
73/* Initializes the Silk encoder state */
74opus_int silk_init_encoder(
75 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
76 int arch /* I Run-tim architecture */
77);
78
79/* Control the Silk encoder */
80opus_int silk_control_encoder(
81 silk_encoder_state_FLP *psEnc, /* I/O Pointer to Silk encoder state FLP */
82 silk_EncControlStruct *encControl, /* I Control structure */
83 const opus_int allow_bw_switch, /* I Flag to allow switching audio bandwidth */
84 const opus_int channelNb, /* I Channel number */
85 const opus_int force_fs_kHz
86);
87
88/**************************/
89/* Noise shaping analysis */
90/**************************/
91/* Compute noise shaping coefficients and initial gain values */
92void silk_noise_shape_analysis_FLP(
93 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
94 silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
95 const silk_float *pitch_res, /* I LPC residual from pitch analysis */
96 const silk_float *x /* I Input signal [frame_length + la_shape] */
97);
98
99/* Autocorrelations for a warped frequency axis */
100void silk_warped_autocorrelation_FLP(
101 silk_float *corr, /* O Result [order + 1] */
102 const silk_float *input, /* I Input data to correlate */
103 const silk_float warping, /* I Warping coefficient */
104 const opus_int length, /* I Length of input */
105 const opus_int order /* I Correlation order (even) */
106);
107
108/* Calculation of LTP state scaling */
109void silk_LTP_scale_ctrl_FLP(
110 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
111 silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
112 opus_int condCoding /* I The type of conditional coding to use */
113);
114
115/**********************************************/
116/* Prediction Analysis */
117/**********************************************/
118/* Find pitch lags */
119void silk_find_pitch_lags_FLP(
120 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
121 silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
122 silk_float res[], /* O Residual */
123 const silk_float x[], /* I Speech signal */
124 int arch /* I Run-time architecture */
125);
126
127/* Find LPC and LTP coefficients */
128void silk_find_pred_coefs_FLP(
129 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
130 silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
131 const silk_float res_pitch[], /* I Residual from pitch analysis */
132 const silk_float x[], /* I Speech signal */
133 opus_int condCoding /* I The type of conditional coding to use */
134);
135
136/* LPC analysis */
137void silk_find_LPC_FLP(
138 silk_encoder_state *psEncC, /* I/O Encoder state */
139 opus_int16 NLSF_Q15[], /* O NLSFs */
140 const silk_float x[], /* I Input signal */
141 const silk_float minInvGain /* I Prediction gain from LTP (dB) */
142);
143
144/* LTP analysis */
145void silk_find_LTP_FLP(
146 silk_float XX[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* O Weight for LTP quantization */
147 silk_float xX[ MAX_NB_SUBFR * LTP_ORDER ], /* O Weight for LTP quantization */
148 const silk_float r_ptr[], /* I LPC residual */
149 const opus_int lag[ MAX_NB_SUBFR ], /* I LTP lags */
150 const opus_int subfr_length, /* I Subframe length */
151 const opus_int nb_subfr /* I number of subframes */
152);
153
154void silk_LTP_analysis_filter_FLP(
155 silk_float *LTP_res, /* O LTP res MAX_NB_SUBFR*(pre_lgth+subfr_lngth) */
156 const silk_float *x, /* I Input signal, with preceding samples */
157 const silk_float B[ LTP_ORDER * MAX_NB_SUBFR ], /* I LTP coefficients for each subframe */
158 const opus_int pitchL[ MAX_NB_SUBFR ], /* I Pitch lags */
159 const silk_float invGains[ MAX_NB_SUBFR ], /* I Inverse quantization gains */
160 const opus_int subfr_length, /* I Length of each subframe */
161 const opus_int nb_subfr, /* I number of subframes */
162 const opus_int pre_length /* I Preceding samples for each subframe */
163);
164
165/* Calculates residual energies of input subframes where all subframes have LPC_order */
166/* of preceding samples */
167void silk_residual_energy_FLP(
168 silk_float nrgs[ MAX_NB_SUBFR ], /* O Residual energy per subframe */
169 const silk_float x[], /* I Input signal */
170 silk_float a[ 2 ][ MAX_LPC_ORDER ], /* I AR coefs for each frame half */
171 const silk_float gains[], /* I Quantization gains */
172 const opus_int subfr_length, /* I Subframe length */
173 const opus_int nb_subfr, /* I number of subframes */
174 const opus_int LPC_order /* I LPC order */
175);
176
177/* 16th order LPC analysis filter */
178void silk_LPC_analysis_filter_FLP(
179 silk_float r_LPC[], /* O LPC residual signal */
180 const silk_float PredCoef[], /* I LPC coefficients */
181 const silk_float s[], /* I Input signal */
182 const opus_int length, /* I Length of input signal */
183 const opus_int Order /* I LPC order */
184);
185
186/* LTP tap quantizer */
187void silk_quant_LTP_gains_FLP(
188 silk_float B[ MAX_NB_SUBFR * LTP_ORDER ], /* O Quantized LTP gains */
189 opus_int8 cbk_index[ MAX_NB_SUBFR ], /* O Codebook index */
190 opus_int8 *periodicity_index, /* O Periodicity index */
191 opus_int32 *sum_log_gain_Q7, /* I/O Cumulative max prediction gain */
192 silk_float *pred_gain_dB, /* O LTP prediction gain */
193 const silk_float XX[ MAX_NB_SUBFR * LTP_ORDER * LTP_ORDER ], /* I Correlation matrix */
194 const silk_float xX[ MAX_NB_SUBFR * LTP_ORDER ], /* I Correlation vector */
195 const opus_int subfr_len, /* I Number of samples per subframe */
196 const opus_int nb_subfr, /* I Number of subframes */
197 int arch /* I Run-time architecture */
198);
199
200/* Residual energy: nrg = wxx - 2 * wXx * c + c' * wXX * c */
201silk_float silk_residual_energy_covar_FLP( /* O Weighted residual energy */
202 const silk_float *c, /* I Filter coefficients */
203 silk_float *wXX, /* I/O Weighted correlation matrix, reg. out */
204 const silk_float *wXx, /* I Weighted correlation vector */
205 const silk_float wxx, /* I Weighted correlation value */
206 const opus_int D /* I Dimension */
207);
208
209/* Processing of gains */
210void silk_process_gains_FLP(
211 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
212 silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
213 opus_int condCoding /* I The type of conditional coding to use */
214);
215
216/******************/
217/* Linear Algebra */
218/******************/
219/* Calculates correlation matrix X'*X */
220void silk_corrMatrix_FLP(
221 const silk_float *x, /* I x vector [ L+order-1 ] used to create X */
222 const opus_int L, /* I Length of vectors */
223 const opus_int Order, /* I Max lag for correlation */
224 silk_float *XX /* O X'*X correlation matrix [order x order] */
225);
226
227/* Calculates correlation vector X'*t */
228void silk_corrVector_FLP(
229 const silk_float *x, /* I x vector [L+order-1] used to create X */
230 const silk_float *t, /* I Target vector [L] */
231 const opus_int L, /* I Length of vecors */
232 const opus_int Order, /* I Max lag for correlation */
233 silk_float *Xt /* O X'*t correlation vector [order] */
234);
235
236/* Apply sine window to signal vector. */
237/* Window types: */
238/* 1 -> sine window from 0 to pi/2 */
239/* 2 -> sine window from pi/2 to pi */
240void silk_apply_sine_window_FLP(
241 silk_float px_win[], /* O Pointer to windowed signal */
242 const silk_float px[], /* I Pointer to input signal */
243 const opus_int win_type, /* I Selects a window type */
244 const opus_int length /* I Window length, multiple of 4 */
245);
246
247/* Wrapper functions. Call flp / fix code */
248
249/* Convert AR filter coefficients to NLSF parameters */
250void silk_A2NLSF_FLP(
251 opus_int16 *NLSF_Q15, /* O NLSF vector [ LPC_order ] */
252 const silk_float *pAR, /* I LPC coefficients [ LPC_order ] */
253 const opus_int LPC_order /* I LPC order */
254);
255
256/* Convert NLSF parameters to AR prediction filter coefficients */
257void silk_NLSF2A_FLP(
258 silk_float *pAR, /* O LPC coefficients [ LPC_order ] */
259 const opus_int16 *NLSF_Q15, /* I NLSF vector [ LPC_order ] */
260 const opus_int LPC_order, /* I LPC order */
261 int arch /* I Run-time architecture */
262);
263
264/* Limit, stabilize, and quantize NLSFs */
265void silk_process_NLSFs_FLP(
266 silk_encoder_state *psEncC, /* I/O Encoder state */
267 silk_float PredCoef[ 2 ][ MAX_LPC_ORDER ], /* O Prediction coefficients */
268 opus_int16 NLSF_Q15[ MAX_LPC_ORDER ], /* I/O Normalized LSFs (quant out) (0 - (2^15-1)) */
269 const opus_int16 prev_NLSF_Q15[ MAX_LPC_ORDER ] /* I Previous Normalized LSFs (0 - (2^15-1)) */
270);
271
272/* Floating-point Silk NSQ wrapper */
273void silk_NSQ_wrapper_FLP(
274 silk_encoder_state_FLP *psEnc, /* I/O Encoder state FLP */
275 silk_encoder_control_FLP *psEncCtrl, /* I/O Encoder control FLP */
276 SideInfoIndices *psIndices, /* I/O Quantization indices */
277 silk_nsq_state *psNSQ, /* I/O Noise Shaping Quantzation state */
278 opus_int8 pulses[], /* O Quantized pulse signal */
279 const silk_float x[] /* I Prefiltered input signal */
280);
281
282#ifdef __cplusplus
283}
284#endif
285
286#endif