1885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/***********************************************************************
2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCopyright (c) 2006-2011, Skype Limited. All rights reserved.
3885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgRedistribution and use in source and binary forms, with or without
4885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgmodification, are permitted provided that the following conditions
5885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgare met:
6885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org- Redistributions of source code must retain the above copyright notice,
7885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgthis list of conditions and the following disclaimer.
8885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org- Redistributions in binary form must reproduce the above copyright
9885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgnotice, this list of conditions and the following disclaimer in the
10885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgdocumentation and/or other materials provided with the distribution.
11e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org- Neither the name of Internet Society, IETF or IETF Trust, nor the
12885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgnames of specific contributors, may be used to endorse or promote
13885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgproducts derived from this software without specific prior written
14885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgpermission.
15e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgPOSSIBILITY OF SUCH DAMAGE.
26885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org***********************************************************************/
27885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef SILK_DEFINE_H
29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SILK_DEFINE_H
30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "errors.h"
32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "typedef.h"
33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef __cplusplus
35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgextern "C"
36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Max number of encoder channels (1/2) */
40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ENCODER_NUM_CHANNELS                    2
41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Number of decoder channels (1/2) */
42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DECODER_NUM_CHANNELS                    2
43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_FRAMES_PER_PACKET                   3
45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Limits on bitrate */
47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN_TARGET_RATE_BPS                     5000
48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_TARGET_RATE_BPS                     80000
49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TARGET_RATE_TAB_SZ                      8
50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* LBRR thresholds */
52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LBRR_NB_MIN_RATE_BPS                    12000
53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LBRR_MB_MIN_RATE_BPS                    14000
54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LBRR_WB_MIN_RATE_BPS                    16000
55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* DTX settings */
57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NB_SPEECH_FRAMES_BEFORE_DTX             10      /* eq 200 ms */
58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_CONSECUTIVE_DTX                     20      /* eq 400 ms */
59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Maximum sampling frequency */
61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_FS_KHZ                              16
62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_API_FS_KHZ                          48
63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Signal types */
65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TYPE_NO_VOICE_ACTIVITY                  0
66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TYPE_UNVOICED                           1
67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TYPE_VOICED                             2
68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Conditional coding types */
70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CODE_INDEPENDENTLY                      0
71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CODE_INDEPENDENTLY_NO_LTP_SCALING       1
72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CODE_CONDITIONALLY                      2
73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Settings for stereo processing */
75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define STEREO_QUANT_TAB_SIZE                   16
76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define STEREO_QUANT_SUB_STEPS                  5
77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define STEREO_INTERP_LEN_MS                    8       /* must be even */
78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define STEREO_RATIO_SMOOTH_COEF                0.01    /* smoothing coef for signal norms and stereo width */
79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Range of pitch lag estimates */
81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PITCH_EST_MIN_LAG_MS                    2       /* 2 ms -> 500 Hz */
82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PITCH_EST_MAX_LAG_MS                    18      /* 18 ms -> 56 Hz */
83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Maximum number of subframes */
85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_NB_SUBFR                            4
86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Number of samples per frame */
88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LTP_MEM_LENGTH_MS                       20
89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SUB_FRAME_LENGTH_MS                     5
90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_SUB_FRAME_LENGTH                    ( SUB_FRAME_LENGTH_MS * MAX_FS_KHZ )
91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_FRAME_LENGTH_MS                     ( SUB_FRAME_LENGTH_MS * MAX_NB_SUBFR )
92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_FRAME_LENGTH                        ( MAX_FRAME_LENGTH_MS * MAX_FS_KHZ )
93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Milliseconds of lookahead for pitch analysis */
95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LA_PITCH_MS                             2
96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LA_PITCH_MAX                            ( LA_PITCH_MS * MAX_FS_KHZ )
97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Order of LPC used in find pitch */
99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_FIND_PITCH_LPC_ORDER                16
100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Length of LPC window used in find pitch */
102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define FIND_PITCH_LPC_WIN_MS                   ( 20 + (LA_PITCH_MS << 1) )
103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define FIND_PITCH_LPC_WIN_MS_2_SF              ( 10 + (LA_PITCH_MS << 1) )
104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define FIND_PITCH_LPC_WIN_MAX                  ( FIND_PITCH_LPC_WIN_MS * MAX_FS_KHZ )
105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Milliseconds of lookahead for noise shape analysis */
107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LA_SHAPE_MS                             5
108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LA_SHAPE_MAX                            ( LA_SHAPE_MS * MAX_FS_KHZ )
109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Maximum length of LPC window used in noise shape analysis */
111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHAPE_LPC_WIN_MAX                       ( 15 * MAX_FS_KHZ )
112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* dB level of lowest gain quantization level */
114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN_QGAIN_DB                            2
115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* dB level of highest gain quantization level */
116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_QGAIN_DB                            88
117885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Number of gain quantization levels */
118885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define N_LEVELS_QGAIN                          64
119885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Max increase in gain quantization index */
120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_DELTA_GAIN_QUANT                    36
121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Max decrease in gain quantization index */
122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN_DELTA_GAIN_QUANT                    -4
123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Quantization offsets (multiples of 4) */
125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define OFFSET_VL_Q10                           32
126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define OFFSET_VH_Q10                           100
127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define OFFSET_UVL_Q10                          100
128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define OFFSET_UVH_Q10                          240
129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define QUANT_LEVEL_ADJUST_Q10                  80
131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Maximum numbers of iterations used to stabilize an LPC vector */
133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_LPC_STABILIZE_ITERATIONS            16
134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_PREDICTION_POWER_GAIN               1e4f
135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_PREDICTION_POWER_GAIN_AFTER_RESET   1e2f
136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_LPC_ORDER                           16
138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN_LPC_ORDER                           10
139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Find Pred Coef defines */
141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LTP_ORDER                               5
142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* LTP quantization settings */
144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NB_LTP_CBKS                             3
145885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Flag to use harmonic noise shaping */
147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define USE_HARM_SHAPING                        1
148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Max LPC order of noise shaping filters */
150885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_SHAPE_LPC_ORDER                     16
151885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define HARM_SHAPE_FIR_TAPS                     3
153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
154885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Maximum number of delayed decision states */
155885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_DEL_DEC_STATES                      4
156885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LTP_BUF_LENGTH                          512
158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LTP_MASK                                ( LTP_BUF_LENGTH - 1 )
159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DECISION_DELAY                          32
161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DECISION_DELAY_MASK                     ( DECISION_DELAY - 1 )
162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Number of subframes for excitation entropy coding */
164885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHELL_CODEC_FRAME_LENGTH                16
165885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LOG2_SHELL_CODEC_FRAME_LENGTH           4
166885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_NB_SHELL_BLOCKS                     ( MAX_FRAME_LENGTH / SHELL_CODEC_FRAME_LENGTH )
167885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Number of rate levels, for entropy coding of excitation */
169885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define N_RATE_LEVELS                           10
170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
171885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Maximum sum of pulses per shell coding frame */
172885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_PULSES                              16
173885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
174885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_MATRIX_SIZE                         MAX_LPC_ORDER /* Max of LPC Order and LTP order */
175885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
176885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if( MAX_LPC_ORDER > DECISION_DELAY )
177885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# define NSQ_LPC_BUF_LENGTH                     MAX_LPC_ORDER
178885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else
179885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# define NSQ_LPC_BUF_LENGTH                     DECISION_DELAY
180885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
181885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
182885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/***************************/
183885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Voice activity detector */
184885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/***************************/
185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_N_BANDS                             4
186885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
187885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_INTERNAL_SUBFRAMES_LOG2             2
188885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_INTERNAL_SUBFRAMES                  ( 1 << VAD_INTERNAL_SUBFRAMES_LOG2 )
189885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_NOISE_LEVEL_SMOOTH_COEF_Q16         1024    /* Must be <  4096 */
191885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_NOISE_LEVELS_BIAS                   50
192885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Sigmoid settings */
194885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_NEGATIVE_OFFSET_Q5                  128     /* sigmoid is 0 at -128 */
195885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_SNR_FACTOR_Q16                      45000
196885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* smoothing for SNR measurement */
198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VAD_SNR_SMOOTH_COEF_Q18                 4096
199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Size of the piecewise linear cosine approximation table for the LSFs */
201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define LSF_COS_TAB_SZ_FIX                      128
202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
203885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/******************/
204885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* NLSF quantizer */
205885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/******************/
206885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_W_Q                                2
207885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_VQ_MAX_VECTORS                     32
208885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_VQ_MAX_SURVIVORS                   32
209885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_QUANT_MAX_AMPLITUDE                4
210885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_QUANT_MAX_AMPLITUDE_EXT            10
211885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_QUANT_LEVEL_ADJ                    0.1
212885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_QUANT_DEL_DEC_STATES_LOG2          2
213885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NLSF_QUANT_DEL_DEC_STATES               ( 1 << NLSF_QUANT_DEL_DEC_STATES_LOG2 )
214885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
215885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Transition filtering for mode switching */
216885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TRANSITION_TIME_MS                      5120    /* 5120 = 64 * FRAME_LENGTH_MS * ( TRANSITION_INT_NUM - 1 ) = 64*(20*4)*/
217885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TRANSITION_NB                           3       /* Hardcoded in tables */
218885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TRANSITION_NA                           2       /* Hardcoded in tables */
219885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TRANSITION_INT_NUM                      5       /* Hardcoded in tables */
220885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TRANSITION_FRAMES                       ( TRANSITION_TIME_MS / MAX_FRAME_LENGTH_MS )
221885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define TRANSITION_INT_STEPS                    ( TRANSITION_FRAMES  / ( TRANSITION_INT_NUM - 1 ) )
222885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
223885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* BWE factors to apply after packet loss */
224885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define BWE_AFTER_LOSS_Q16                      63570
225885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
226885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Defines for CN generation */
227885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CNG_BUF_MASK_MAX                        255     /* 2^floor(log2(MAX_FRAME_LENGTH))-1    */
228885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CNG_GAIN_SMTH_Q16                       4634    /* 0.25^(1/4)                           */
229885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CNG_NLSF_SMTH_Q16                       16348   /* 0.25                                 */
230885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
231885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef __cplusplus
232885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
233885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
234885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
235885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
236