speex.h

Go to the documentation of this file.
00001 /* Copyright (C) 2002-2006 Jean-Marc Valin*/
00006 /*
00007    Redistribution and use in source and binary forms, with or without
00008    modification, are permitted provided that the following conditions
00009    are met:
00010    
00011    - Redistributions of source code must retain the above copyright
00012    notice, this list of conditions and the following disclaimer.
00013    
00014    - Redistributions in binary form must reproduce the above copyright
00015    notice, this list of conditions and the following disclaimer in the
00016    documentation and/or other materials provided with the distribution.
00017    
00018    - Neither the name of the Xiph.org Foundation nor the names of its
00019    contributors may be used to endorse or promote products derived from
00020    this software without specific prior written permission.
00021    
00022    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00025    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
00026    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00027    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00028    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00029    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00030    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00031    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00032    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033 
00034 */
00035 
00036 #ifndef SPEEX_H
00037 #define SPEEX_H
00038 
00043 #include "speex/speex_bits.h"
00044 #include "speex/speex_types.h"
00045 
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049 
00050 /* Values allowed for *ctl() requests */
00051 
00053 #define SPEEX_SET_ENH 0
00054 
00055 #define SPEEX_GET_ENH 1
00056 
00057 /*Would be SPEEX_SET_FRAME_SIZE, but it's (currently) invalid*/
00059 #define SPEEX_GET_FRAME_SIZE 3
00060 
00062 #define SPEEX_SET_QUALITY 4
00063 
00064 /* #define SPEEX_GET_QUALITY 5 -- Doesn't make much sense, does it? */
00065 
00067 #define SPEEX_SET_MODE 6
00068 
00069 #define SPEEX_GET_MODE 7
00070 
00072 #define SPEEX_SET_LOW_MODE 8
00073 
00074 #define SPEEX_GET_LOW_MODE 9
00075 
00077 #define SPEEX_SET_HIGH_MODE 10
00078 
00079 #define SPEEX_GET_HIGH_MODE 11
00080 
00082 #define SPEEX_SET_VBR 12
00083 
00084 #define SPEEX_GET_VBR 13
00085 
00087 #define SPEEX_SET_VBR_QUALITY 14
00088 
00089 #define SPEEX_GET_VBR_QUALITY 15
00090 
00092 #define SPEEX_SET_COMPLEXITY 16
00093 
00094 #define SPEEX_GET_COMPLEXITY 17
00095 
00097 #define SPEEX_SET_BITRATE 18
00098 
00099 #define SPEEX_GET_BITRATE 19
00100 
00102 #define SPEEX_SET_HANDLER 20
00103 
00105 #define SPEEX_SET_USER_HANDLER 22
00106 
00108 #define SPEEX_SET_SAMPLING_RATE 24
00109 
00110 #define SPEEX_GET_SAMPLING_RATE 25
00111 
00113 #define SPEEX_RESET_STATE 26
00114 
00116 #define SPEEX_GET_RELATIVE_QUALITY 29
00117 
00119 #define SPEEX_SET_VAD 30
00120 
00122 #define SPEEX_GET_VAD 31
00123 
00125 #define SPEEX_SET_ABR 32
00126 
00127 #define SPEEX_GET_ABR 33
00128 
00130 #define SPEEX_SET_DTX 34
00131 
00132 #define SPEEX_GET_DTX 35
00133 
00135 #define SPEEX_SET_SUBMODE_ENCODING 36
00136 
00137 #define SPEEX_GET_SUBMODE_ENCODING 37
00138 
00139 /*#define SPEEX_SET_LOOKAHEAD 38*/
00141 #define SPEEX_GET_LOOKAHEAD 39
00142 
00144 #define SPEEX_SET_PLC_TUNING 40
00145 
00146 #define SPEEX_GET_PLC_TUNING 41
00147 
00149 #define SPEEX_SET_VBR_MAX_BITRATE 42
00150 
00151 #define SPEEX_GET_VBR_MAX_BITRATE 43
00152 
00154 #define SPEEX_SET_HIGHPASS 44
00155 
00156 #define SPEEX_GET_HIGHPASS 45
00157 
00160 #define SPEEX_GET_ACTIVITY 47
00161 
00162 
00163 /* Preserving compatibility:*/
00165 #define SPEEX_SET_PF 0
00166 
00167 #define SPEEX_GET_PF 1
00168 
00169 
00170 
00171 
00172 /* Values allowed for mode queries */
00174 #define SPEEX_MODE_FRAME_SIZE 0
00175 
00177 #define SPEEX_SUBMODE_BITS_PER_FRAME 1
00178 
00179 
00180 
00182 #define SPEEX_LIB_GET_MAJOR_VERSION 1
00183 
00184 #define SPEEX_LIB_GET_MINOR_VERSION 3
00185 
00186 #define SPEEX_LIB_GET_MICRO_VERSION 5
00187 
00188 #define SPEEX_LIB_GET_EXTRA_VERSION 7
00189 
00190 #define SPEEX_LIB_GET_VERSION_STRING 9
00191 
00192 /*#define SPEEX_LIB_SET_ALLOC_FUNC 10
00193 #define SPEEX_LIB_GET_ALLOC_FUNC 11
00194 #define SPEEX_LIB_SET_FREE_FUNC 12
00195 #define SPEEX_LIB_GET_FREE_FUNC 13
00196 
00197 #define SPEEX_LIB_SET_WARNING_FUNC 14
00198 #define SPEEX_LIB_GET_WARNING_FUNC 15
00199 #define SPEEX_LIB_SET_ERROR_FUNC 16
00200 #define SPEEX_LIB_GET_ERROR_FUNC 17
00201 */
00202 
00204 #define SPEEX_NB_MODES 3
00205 
00207 #define SPEEX_MODEID_NB 0
00208 
00210 #define SPEEX_MODEID_WB 1
00211 
00213 #define SPEEX_MODEID_UWB 2
00214 
00215 #ifdef EPIC_48K
00216 
00217 #define SPEEX_MODEID_NB_48K 1000
00218 #endif
00219 
00220 struct SpeexMode;
00221 
00222 
00223 /* Prototypes for mode function pointers */
00224 
00226 typedef void *(*encoder_init_func)(const struct SpeexMode *mode);
00227 
00229 typedef void (*encoder_destroy_func)(void *st);
00230 
00232 typedef int (*encode_func)(void *state, void *in, SpeexBits *bits);
00233 
00235 typedef int (*encoder_ctl_func)(void *state, int request, void *ptr);
00236 
00238 typedef void *(*decoder_init_func)(const struct SpeexMode *mode);
00239 
00241 typedef void (*decoder_destroy_func)(void *st);
00242 
00244 typedef int  (*decode_func)(void *state, SpeexBits *bits, void *out);
00245 
00247 typedef int (*decoder_ctl_func)(void *state, int request, void *ptr);
00248 
00249 
00251 typedef int (*mode_query_func)(const void *mode, int request, void *ptr);
00252 
00254 typedef struct SpeexMode {
00256    const void *mode;
00257 
00259    mode_query_func query;
00260    
00262    const char *modeName;
00263 
00265    int modeID;
00266 
00269    int bitstream_version;
00270 
00272    encoder_init_func enc_init;
00273 
00275    encoder_destroy_func enc_destroy;
00276 
00278    encode_func enc;
00279 
00281    decoder_init_func dec_init;
00282 
00284    decoder_destroy_func dec_destroy;
00285 
00287    decode_func dec;
00288 
00290    encoder_ctl_func enc_ctl;
00291 
00293    decoder_ctl_func dec_ctl;
00294 
00295 } SpeexMode;
00296 
00306 void *speex_encoder_init(const SpeexMode *mode);
00307 
00310 void speex_encoder_destroy(void *state);
00311 
00321 int speex_encode(void *state, float *in, SpeexBits *bits);
00322 
00330 int speex_encode_int(void *state, spx_int16_t *in, SpeexBits *bits);
00331 
00339 int speex_encoder_ctl(void *state, int request, void *ptr);
00340 
00341 
00350 void *speex_decoder_init(const SpeexMode *mode);
00351 
00356 void speex_decoder_destroy(void *state);
00357 
00366 int speex_decode(void *state, SpeexBits *bits, float *out);
00367 
00376 int speex_decode_int(void *state, SpeexBits *bits, spx_int16_t *out);
00377 
00385 int speex_decoder_ctl(void *state, int request, void *ptr);
00386 
00387 
00395 int speex_mode_query(const SpeexMode *mode, int request, void *ptr);
00396 
00402 int speex_lib_ctl(int request, void *ptr);
00403 
00405 extern const SpeexMode speex_nb_mode;
00406 
00408 extern const SpeexMode speex_wb_mode;
00409 
00411 extern const SpeexMode speex_uwb_mode;
00412 
00413 #ifdef EPIC_48K
00414 
00415 extern const SpeexMode speex_nb_48k_mode;
00416 #endif
00417 
00419 extern const SpeexMode * const speex_mode_list[SPEEX_NB_MODES];
00420 
00422 const SpeexMode * speex_lib_get_mode (int mode);
00423 
00424 #ifdef __cplusplus
00425 }
00426 #endif
00427 
00429 #endif

Generated on Wed May 23 00:53:16 2007 for Speex by  doxygen 1.5.1