a0314fe0ef03985b8103d32378a451873c285a79
[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 "bits.h"
26
27 /* Quantizes LSPs */
28 typedef void (*lsp_quant_func)(float *, float *, int, FrameBits *);
29
30 /* Decodes quantized LSPs */
31 typedef void (*lsp_unquant_func)(float *, int, FrameBits *);
32
33
34 /*Long-term predictor quantization*/
35 typedef void (*ltp_quant_func)(float *, float *, float *, 
36                                 float *, float *, void *, int, int, 
37                                 int, int, FrameBits*, float *);
38
39 /*Long-term un-quantize*/
40 typedef void (*ltp_unquant_func)(float *, int, int, void *, int, FrameBits*, float*);
41
42
43 typedef void (*innovation_quant_func)(float *, float *, float *, float *, void *, int, int, 
44                                       float *, FrameBits *, float *);
45
46 typedef void (*innovation_unquant_func)(float *, void *, int, FrameBits*, float *);
47
48 /*Struct defining the encoding/decoding mode*/
49 typedef struct SpeexMode {
50    int     frameSize;
51    int     subframeSize;
52    int     windowSize;
53    int     lpcSize;
54    int     bufSize;
55    int     pitchStart;
56    int     pitchEnd;
57    float   gamma1;
58    float   gamma2;
59    float   lag_factor;
60    float   lpc_floor;
61    float   preemph;
62    /*LSP functions*/
63    lsp_quant_func    lsp_quant;
64    lsp_unquant_func  lsp_unquant;
65
66    /*Lont-term predictor functions*/
67    ltp_quant_func    ltp_quant;
68    ltp_unquant_func  ltp_unquant;
69    void             *ltp_params;
70    /*Quantization of innovation */
71    innovation_quant_func innovation_quant;
72    innovation_unquant_func innovation_unquant;
73    void             *innovation_params;
74
75 } SpeexMode;
76
77 extern SpeexMode nb_mode;
78 extern SpeexMode wb_mode;
79 extern SpeexMode mp_nb_mode;
80 extern SpeexMode mp_wb_mode;
81
82 #endif