Added bit-rate information via speex_*_ctl calls, fixed stupid bug in
[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 void (*nb_post_filter_func)(float *, float *, float *, int, int, int, 
58                                float *, void *, float *, float *, float *);
59
60 typedef struct SpeexSubmode {
61    int     lbr_pitch;
62    int     have_subframe_gain;
63    /*LSP functions*/
64    lsp_quant_func    lsp_quant;
65    lsp_unquant_func  lsp_unquant;
66
67    /*Lont-term predictor functions*/
68    ltp_quant_func    ltp_quant;
69    ltp_unquant_func  ltp_unquant;
70    void             *ltp_params;
71
72    /*Quantization of innovation*/
73    innovation_quant_func innovation_quant;
74    innovation_unquant_func innovation_unquant;
75    void             *innovation_params;
76
77    /*Post-filter*/
78    nb_post_filter_func post_filter_func;
79    void             *post_filter_params;
80    int               bitrate;
81 } SpeexSubmode;
82
83 /*Struct defining the encoding/decoding mode*/
84 typedef struct SpeexNBMode {
85    int     frameSize;
86    int     subframeSize;
87    int     lpcSize;
88    int     bufSize;
89    int     pitchStart;
90    int     pitchEnd;
91
92    float   gamma1;
93    float   gamma2;
94    float   lag_factor;
95    float   lpc_floor;
96    float   preemph;
97
98    SpeexSubmode *submodes[NB_SUBMODES];
99    int     defaultSubmode;
100
101 } SpeexNBMode;
102
103
104 /*Struct defining the encoding/decoding mode*/
105 typedef struct SpeexSBMode {
106    SpeexMode *nb_mode;
107    int     frameSize;
108    int     subframeSize;
109    int     lpcSize;
110    int     bufSize;
111    float   gamma1;
112    float   gamma2;
113    float   lag_factor;
114    float   lpc_floor;
115    float   preemph;
116
117    SpeexSubmode *submodes[SB_SUBMODES];
118    int     defaultSubmode;
119
120 } SpeexSBMode;
121
122
123
124
125 #endif