Added low bit-rate (8 kbps) narrowband mode. It is still sub-optimal but
[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 /* Quantizes LSPs */
29 typedef void (*lsp_quant_func)(float *, float *, int, SpeexBits *);
30
31 /* Decodes quantized LSPs */
32 typedef void (*lsp_unquant_func)(float *, int, SpeexBits *);
33
34
35 /*Long-term predictor quantization*/
36 typedef int (*ltp_quant_func)(float *, float *, float *, float *, 
37                                 float *, float *, void *, int, int, 
38                                 int, int, SpeexBits*, float *, float *);
39
40 /*Long-term un-quantize*/
41 typedef void (*ltp_unquant_func)(float *, int, int, void *, int, int *, float *, SpeexBits*, float*, int);
42
43
44 typedef void (*innovation_quant_func)(float *, float *, float *, float *, void *, int, int, 
45                                       float *, SpeexBits *, float *);
46
47 typedef void (*innovation_unquant_func)(float *, void *, int, SpeexBits*, float *);
48
49 typedef void (*nb_post_filter_func)(float *, float *, float *, int, int, int, 
50                                float *, void *, float *, float *, float *);
51
52 /*Struct defining the encoding/decoding mode*/
53 typedef struct SpeexNBMode {
54    int     frameSize;
55    int     subframeSize;
56    int     windowSize;
57    int     lpcSize;
58    int     bufSize;
59    int     pitchStart;
60    int     pitchEnd;
61    int     lbr_pitch;
62    float   gamma1;
63    float   gamma2;
64    float   lag_factor;
65    float   lpc_floor;
66    float   preemph;
67
68    /*LSP functions*/
69    lsp_quant_func    lsp_quant;
70    lsp_unquant_func  lsp_unquant;
71
72    /*Lont-term predictor functions*/
73    ltp_quant_func    ltp_quant;
74    ltp_unquant_func  ltp_unquant;
75    void             *ltp_params;
76
77    /*Quantization of innovation*/
78    innovation_quant_func innovation_quant;
79    innovation_unquant_func innovation_unquant;
80    void             *innovation_params;
81
82    /*Post-filter*/
83    nb_post_filter_func post_filter_func;
84    void             *post_filter_params;
85 } SpeexNBMode;
86
87
88 /*Struct defining the encoding/decoding mode*/
89 typedef struct SpeexSBMode {
90    SpeexMode *nb_mode;
91    int     frameSize;
92    int     subframeSize;
93    int     windowSize;
94    int     lpcSize;
95    int     bufSize;
96    float   gamma1;
97    float   gamma2;
98    float   lag_factor;
99    float   lpc_floor;
100    float   preemph;
101    /*LSP functions*/
102    lsp_quant_func    lsp_quant;
103    lsp_unquant_func  lsp_unquant;
104
105    /*Quantization of innovation */
106    innovation_quant_func innovation_quant;
107    innovation_unquant_func innovation_unquant;
108    void             *innovation_params;
109
110 } SpeexSBMode;
111
112
113
114
115 #endif