Added low bit-rate (8 kbps) narrowband mode. It is still sub-optimal but
[speexdsp.git] / libspeex / speex.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 SPEEX_MODES_H
23 #define SPEEX_MODES_H
24
25 #include "speex_bits.h"
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 #define SPEEX_SET_PF 0
32 #define SPEEX_GET_PF 1
33 #define SPEEX_GET_FRAME_SIZE 3
34
35
36 struct SpeexMode;
37
38 typedef void *(*encoder_init_func)(struct SpeexMode *mode);
39 typedef void (*encoder_destroy_func)(void *st);
40 typedef void (*encode_func)(void *state, float *in, SpeexBits *bits);
41 typedef void *(*decoder_init_func)(struct SpeexMode *mode);
42 typedef void (*decoder_destroy_func)(void *st);
43 typedef void (*decode_func)(void *state, SpeexBits *bits, float *out, int lost);
44 typedef void (*encoder_ctl_func)(void *state, int request, void *ptr);
45 typedef void (*decoder_ctl_func)(void *state, int request, void *ptr);
46
47 /** Struct defining a Speex mode */ 
48 typedef struct SpeexMode {
49    /** Pointer to the low-level mode data */
50    void *mode;
51
52    /** Pointer to encoder initialization function */
53    encoder_init_func enc_init;
54
55    /** Pointer to encoder destruction function */
56    encoder_destroy_func enc_destroy;
57
58    /** Pointer to frame encoding function */
59    encode_func enc;
60
61    /** Pointer to decoder initialization function */
62    decoder_init_func dec_init;
63
64    /** Pointer to decoder destruction function */
65    decoder_destroy_func dec_destroy;
66
67    /** Pointer to frame decoding function */
68    decode_func dec;
69
70    /** ioctl-like requests for encoder */
71    encoder_ctl_func enc_ctl;
72
73    /** ioctl-like requests for decoder */
74    decoder_ctl_func dec_ctl;
75
76 } SpeexMode;
77
78 /**Returns a handle to a newly created Speex encoder state structure. For now, the 
79    "mode" arguent can be &nb_mode or &wb_mode . In the future, more modes may be 
80    added. Note that for now if you have more than one channels to encode, you need 
81    one state per channel.*/
82 void *speex_encoder_init(SpeexMode *mode);
83
84 /** Frees all resources associated to an existing Speex encoder state. */
85 void speex_encoder_destroy(void *state);
86
87 /** Uses an existing encoder state to encode one frame of speech pointed to by
88     "in". The encoded bit-stream is saved in "bits".*/
89 void speex_encode(void *state, float *in, SpeexBits *bits);
90
91 void speex_encoder_ctl(void *state, int request, void *ptr);
92
93
94 /** Returns a handle to a newly created decoder state structure. For now, the mode
95     arguent can be &nb_mode or &wb_mode . In the future, more modes may be added. 
96     Note that for now if you have more than one channels to decode, you need one 
97     state per channel. */ 
98 void *speex_decoder_init(SpeexMode *mode);
99
100 /** Frees all resources associated to an existing decoder state. */
101 void speex_decoder_destroy(void *state);
102
103 /** Uses an existing decoder state to decode one frame of speech from bit-stream 
104     bits. The output speech is saved written to out. */
105 void speex_decode(void *state, SpeexBits *bits, float *out, int lost);
106
107 void speex_decoder_ctl(void *state, int request, void *ptr);
108
109
110
111 /** Default narrowband mode */
112 extern SpeexMode speex_nb_mode;
113
114 /** Low bit-rate narrowband mode */
115 extern SpeexMode speex_nb_lbr_mode;
116
117 /** Default wideband mode */
118 extern SpeexMode speex_wb_mode;
119
120
121 #ifdef __cplusplus
122 }
123 #endif
124
125
126 #endif