fb7b7078bbb2ad699d0365dcdba91588b58f3022
[speexdsp.git] / libspeex / modes.h
1 /* Copyright (C) 2002 Jean-Marc Valin 
2    File: modes.h
3
4    Describes the different modes of the codec
5
6    This library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10    
11    This library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15    
16    You should have received a copy of the GNU Lesser General Public
17    License along with this library; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20 */
21
22 #ifndef MODES_H
23 #define MODES_H
24
25 #include "speex.h"
26 #include "speex_bits.h"
27
28
29 #define NB_SUBMODES 16
30 #define NB_SUBMODE_BITS 4
31
32 #define SB_SUBMODES 8
33 #define SB_SUBMODE_BITS 3
34
35
36 /* Quantizes LSPs */
37 typedef void (*lsp_quant_func)(float *, float *, int, SpeexBits *);
38
39 /* Decodes quantized LSPs */
40 typedef void (*lsp_unquant_func)(float *, int, SpeexBits *);
41
42
43 /*Long-term predictor quantization*/
44 typedef int (*ltp_quant_func)(float *, float *, float *, float *, 
45                                 float *, float *, void *, int, int, 
46                                 int, int, SpeexBits*, float *, float *, int);
47
48 /*Long-term un-quantize*/
49 typedef void (*ltp_unquant_func)(float *, int, int, void *, int, int *, float *, SpeexBits*, float*, int);
50
51
52 typedef void (*innovation_quant_func)(float *, float *, float *, float *, void *, int, int, 
53                                       float *, SpeexBits *, float *, int);
54
55 typedef void (*innovation_unquant_func)(float *, void *, int, SpeexBits*, float *);
56
57 typedef struct SpeexSubmode {
58    int     lbr_pitch;
59    int     have_subframe_gain;
60    /*LSP functions*/
61    lsp_quant_func    lsp_quant;
62    lsp_unquant_func  lsp_unquant;
63
64    /*Lont-term predictor functions*/
65    ltp_quant_func    ltp_quant;
66    ltp_unquant_func  ltp_unquant;
67    void             *ltp_params;
68
69    /*Quantization of innovation*/
70    innovation_quant_func innovation_quant;
71    innovation_unquant_func innovation_unquant;
72    void             *innovation_params;
73
74    /*Synthesis filter enhancement*/
75    float lpc_enh_k1, lpc_enh_k2, comb_gain;
76
77    int               bits_per_frame;
78 } SpeexSubmode;
79
80 /*Struct defining the encoding/decoding mode*/
81 typedef struct SpeexNBMode {
82    int     frameSize;
83    int     subframeSize;
84    int     lpcSize;
85    int     bufSize;
86    int     pitchStart;
87    int     pitchEnd;
88
89    float   gamma1;
90    float   gamma2;
91    float   lag_factor;
92    float   lpc_floor;
93    float   preemph;
94
95    SpeexSubmode *submodes[NB_SUBMODES];
96    int     defaultSubmode;
97
98 } SpeexNBMode;
99
100
101 /*Struct defining the encoding/decoding mode*/
102 typedef struct SpeexSBMode {
103    SpeexMode *nb_mode;
104    int     frameSize;
105    int     subframeSize;
106    int     lpcSize;
107    int     bufSize;
108    float   gamma1;
109    float   gamma2;
110    float   lag_factor;
111    float   lpc_floor;
112    float   preemph;
113
114    SpeexSubmode *submodes[SB_SUBMODES];
115    int     defaultSubmode;
116
117 } SpeexSBMode;
118
119
120 extern SpeexSBMode sb_wb_mode;
121
122 #endif