#include "asterisk.h"
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <string.h>
#include <stdio.h>
#include <speex/speex.h>
#include "asterisk/lock.h"
#include "asterisk/translate.h"
#include "asterisk/module.h"
#include "asterisk/config.h"
#include "asterisk/options.h"
#include "asterisk/logger.h"
#include "asterisk/channel.h"
#include "asterisk/utils.h"
#include "slin_speex_ex.h"
#include "speex_slin_ex.h"
Include dependency graph for codec_speex.c:
Go to the source code of this file.
Data Structures | |
struct | speex_coder_pvt |
Defines | |
#define | BUFFER_SAMPLES 8000 |
#define | SPEEX_SAMPLES 160 |
#define | TYPE_HIGH 0x0 |
#define | TYPE_LOW 0x1 |
#define | TYPE_MASK 0x3 |
#define | TYPE_SILENCE 0x2 |
Functions | |
AST_MODULE_INFO (ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT,"Speex Coder/Decoder",.load=load_module,.unload=unload_module,.reload=reload,) | |
static void | lintospeex_destroy (struct ast_trans_pvt *arg) |
static int | lintospeex_framein (struct ast_trans_pvt *pvt, struct ast_frame *f) |
store input frame in work buffer | |
static struct ast_frame * | lintospeex_frameout (struct ast_trans_pvt *pvt) |
convert work buffer and produce output frame | |
static int | lintospeex_new (struct ast_trans_pvt *pvt) |
static struct ast_frame * | lintospeex_sample (void) |
static int | load_module (void) |
static void | parse_config (void) |
static int | reload (void) |
static void | speextolin_destroy (struct ast_trans_pvt *arg) |
static int | speextolin_framein (struct ast_trans_pvt *pvt, struct ast_frame *f) |
convert and store into outbuf | |
static int | speextolin_new (struct ast_trans_pvt *pvt) |
static struct ast_frame * | speextolin_sample (void) |
static int | unload_module (void) |
Variables | |
static int | abr = 0 |
static int | complexity = 2 |
static int | dtx = 0 |
static int | enhancement = 0 |
static struct ast_translator | lintospeex |
static int | pp_agc = 0 |
static float | pp_agc_level = 8000 |
static int | pp_denoise = 0 |
static int | pp_dereverb = 0 |
static float | pp_dereverb_decay = 0.4 |
static float | pp_dereverb_level = 0.3 |
static int | pp_vad = 0 |
static int | preproc = 0 |
static int | quality = 3 |
static struct ast_translator | speextolin |
static int | vad = 0 |
static int | vbr = 0 |
static float | vbr_quality = 4 |
Definition in file codec_speex.c.
#define BUFFER_SAMPLES 8000 |
Definition at line 90 of file codec_speex.c.
#define SPEEX_SAMPLES 160 |
#define TYPE_HIGH 0x0 |
#define TYPE_LOW 0x1 |
#define TYPE_MASK 0x3 |
Definition at line 88 of file codec_speex.c.
#define TYPE_SILENCE 0x2 |
AST_MODULE_INFO | ( | ASTERISK_GPL_KEY | , | |
AST_MODFLAG_DEFAULT | , | |||
"Speex Coder/Decoder" | , | |||
. | load = load_module , |
|||
. | unload = unload_module , |
|||
. | reload = reload | |||
) |
static void lintospeex_destroy | ( | struct ast_trans_pvt * | arg | ) | [static] |
Definition at line 337 of file codec_speex.c.
References speex_coder_pvt::bits, preproc, ast_trans_pvt::pvt, and speex_coder_pvt::speex.
00338 { 00339 struct speex_coder_pvt *pvt = arg->pvt; 00340 #ifdef _SPEEX_TYPES_H 00341 if (preproc) 00342 speex_preprocess_state_destroy(pvt->pp); 00343 #endif 00344 speex_encoder_destroy(pvt->speex); 00345 speex_bits_destroy(&pvt->bits); 00346 }
static int lintospeex_framein | ( | struct ast_trans_pvt * | pvt, | |
struct ast_frame * | f | |||
) | [static] |
store input frame in work buffer
Definition at line 251 of file codec_speex.c.
References speex_coder_pvt::buf, f, ast_trans_pvt::pvt, and ast_trans_pvt::samples.
00252 { 00253 struct speex_coder_pvt *tmp = pvt->pvt; 00254 00255 /* XXX We should look at how old the rest of our stream is, and if it 00256 is too old, then we should overwrite it entirely, otherwise we can 00257 get artifacts of earlier talk that do not belong */ 00258 memcpy(tmp->buf + pvt->samples, f->data, f->datalen); 00259 pvt->samples += f->samples; 00260 return 0; 00261 }
static struct ast_frame* lintospeex_frameout | ( | struct ast_trans_pvt * | pvt | ) | [static] |
convert work buffer and produce output frame
Definition at line 264 of file codec_speex.c.
References AST_FRAME_CNG, speex_coder_pvt::bits, speex_coder_pvt::buf, dtx, ast_trans_pvt::f, speex_coder_pvt::framesize, ast_frame::frametype, preproc, ast_trans_pvt::pvt, ast_frame::samples, ast_trans_pvt::samples, speex_coder_pvt::silent_state, and speex_coder_pvt::speex.
00265 { 00266 struct speex_coder_pvt *tmp = pvt->pvt; 00267 int is_speech=1; 00268 int datalen = 0; /* output bytes */ 00269 int samples = 0; /* output samples */ 00270 00271 /* We can't work on anything less than a frame in size */ 00272 if (pvt->samples < tmp->framesize) 00273 return NULL; 00274 speex_bits_reset(&tmp->bits); 00275 while (pvt->samples >= tmp->framesize) { 00276 #ifdef _SPEEX_TYPES_H 00277 /* Preprocess audio */ 00278 if (preproc) 00279 is_speech = speex_preprocess(tmp->pp, tmp->buf + samples, NULL); 00280 /* Encode a frame of data */ 00281 if (is_speech) { 00282 /* If DTX enabled speex_encode returns 0 during silence */ 00283 is_speech = speex_encode_int(tmp->speex, tmp->buf + samples, &tmp->bits) || !dtx; 00284 } else { 00285 /* 5 zeros interpreted by Speex as silence (submode 0) */ 00286 speex_bits_pack(&tmp->bits, 0, 5); 00287 } 00288 #else 00289 { 00290 float fbuf[1024]; 00291 int x; 00292 /* Convert to floating point */ 00293 for (x = 0; x < tmp->framesize; x++) 00294 fbuf[x] = tmp->buf[samples + x]; 00295 /* Encode a frame of data */ 00296 is_speech = speex_encode(tmp->speex, fbuf, &tmp->bits) || !dtx; 00297 } 00298 #endif 00299 samples += tmp->framesize; 00300 pvt->samples -= tmp->framesize; 00301 } 00302 00303 /* Move the data at the end of the buffer to the front */ 00304 if (pvt->samples) 00305 memmove(tmp->buf, tmp->buf + samples, pvt->samples * 2); 00306 00307 /* Use AST_FRAME_CNG to signify the start of any silence period */ 00308 if (is_speech) { 00309 tmp->silent_state = 0; 00310 } else { 00311 if (tmp->silent_state) { 00312 return NULL; 00313 } else { 00314 tmp->silent_state = 1; 00315 speex_bits_reset(&tmp->bits); 00316 memset(&pvt->f, 0, sizeof(pvt->f)); 00317 pvt->f.frametype = AST_FRAME_CNG; 00318 pvt->f.samples = samples; 00319 /* XXX what now ? format etc... */ 00320 } 00321 } 00322 00323 /* Terminate bit stream */ 00324 speex_bits_pack(&tmp->bits, 15, 5); 00325 datalen = speex_bits_write(&tmp->bits, pvt->outbuf, pvt->t->buf_size); 00326 return ast_trans_frameout(pvt, datalen, samples); 00327 }
static int lintospeex_new | ( | struct ast_trans_pvt * | pvt | ) | [static] |
Definition at line 107 of file codec_speex.c.
References speex_coder_pvt::bits, speex_coder_pvt::framesize, ast_trans_pvt::pvt, speex_coder_pvt::silent_state, and speex_coder_pvt::speex.
00108 { 00109 struct speex_coder_pvt *tmp = pvt->pvt; 00110 00111 if (!(tmp->speex = speex_encoder_init(&speex_nb_mode))) 00112 return -1; 00113 00114 speex_bits_init(&tmp->bits); 00115 speex_bits_reset(&tmp->bits); 00116 speex_encoder_ctl(tmp->speex, SPEEX_GET_FRAME_SIZE, &tmp->framesize); 00117 speex_encoder_ctl(tmp->speex, SPEEX_SET_COMPLEXITY, &complexity); 00118 #ifdef _SPEEX_TYPES_H 00119 if (preproc) { 00120 tmp->pp = speex_preprocess_state_init(tmp->framesize, 8000); /* XXX what is this 8000 ? */ 00121 speex_preprocess_ctl(tmp->pp, SPEEX_PREPROCESS_SET_VAD, &pp_vad); 00122 speex_preprocess_ctl(tmp->pp, SPEEX_PREPROCESS_SET_AGC, &pp_agc); 00123 speex_preprocess_ctl(tmp->pp, SPEEX_PREPROCESS_SET_AGC_LEVEL, &pp_agc_level); 00124 speex_preprocess_ctl(tmp->pp, SPEEX_PREPROCESS_SET_DENOISE, &pp_denoise); 00125 speex_preprocess_ctl(tmp->pp, SPEEX_PREPROCESS_SET_DEREVERB, &pp_dereverb); 00126 speex_preprocess_ctl(tmp->pp, SPEEX_PREPROCESS_SET_DEREVERB_DECAY, &pp_dereverb_decay); 00127 speex_preprocess_ctl(tmp->pp, SPEEX_PREPROCESS_SET_DEREVERB_LEVEL, &pp_dereverb_level); 00128 } 00129 #endif 00130 if (!abr && !vbr) { 00131 speex_encoder_ctl(tmp->speex, SPEEX_SET_QUALITY, &quality); 00132 if (vad) 00133 speex_encoder_ctl(tmp->speex, SPEEX_SET_VAD, &vad); 00134 } 00135 if (vbr) { 00136 speex_encoder_ctl(tmp->speex, SPEEX_SET_VBR, &vbr); 00137 speex_encoder_ctl(tmp->speex, SPEEX_SET_VBR_QUALITY, &vbr_quality); 00138 } 00139 if (abr) 00140 speex_encoder_ctl(tmp->speex, SPEEX_SET_ABR, &abr); 00141 if (dtx) 00142 speex_encoder_ctl(tmp->speex, SPEEX_SET_DTX, &dtx); 00143 tmp->silent_state = 0; 00144 00145 return 0; 00146 }
static struct ast_frame* lintospeex_sample | ( | void | ) | [static] |
Definition at line 163 of file codec_speex.c.
References AST_FORMAT_SLINEAR, AST_FRAME_VOICE, f, and slin_speex_ex.
00164 { 00165 static struct ast_frame f; 00166 f.frametype = AST_FRAME_VOICE; 00167 f.subclass = AST_FORMAT_SLINEAR; 00168 f.datalen = sizeof(slin_speex_ex); 00169 /* Assume 8000 Hz */ 00170 f.samples = sizeof(slin_speex_ex)/2; 00171 f.mallocd = 0; 00172 f.offset = 0; 00173 f.src = __PRETTY_FUNCTION__; 00174 f.data = slin_speex_ex; 00175 return &f; 00176 }
static int load_module | ( | void | ) | [static] |
Definition at line 503 of file codec_speex.c.
References ast_register_translator, ast_unregister_translator(), lintospeex, parse_config(), and speextolin.
00504 { 00505 int res; 00506 00507 parse_config(); 00508 res=ast_register_translator(&speextolin); 00509 if (!res) 00510 res=ast_register_translator(&lintospeex); 00511 else 00512 ast_unregister_translator(&speextolin); 00513 00514 return res; 00515 }
static void parse_config | ( | void | ) | [static] |
Definition at line 376 of file codec_speex.c.
References abr, ast_config_load(), ast_log(), ast_true(), ast_variable_browse(), ast_verbose(), complexity, dtx, enhancement, LOG_ERROR, option_verbose, pp_agc, pp_agc_level, pp_denoise, pp_dereverb, pp_dereverb_decay, pp_dereverb_level, pp_vad, preproc, quality, vad, var, vbr, vbr_quality, and VERBOSE_PREFIX_3.
00377 { 00378 struct ast_config *cfg = ast_config_load("codecs.conf"); 00379 struct ast_variable *var; 00380 int res; 00381 float res_f; 00382 00383 if (cfg == NULL) 00384 return; 00385 00386 for (var = ast_variable_browse(cfg, "speex"); var; var = var->next) { 00387 if (!strcasecmp(var->name, "quality")) { 00388 res = abs(atoi(var->value)); 00389 if (res > -1 && res < 11) { 00390 if (option_verbose > 2) 00391 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting Quality to %d\n",res); 00392 quality = res; 00393 } else 00394 ast_log(LOG_ERROR,"Error Quality must be 0-10\n"); 00395 } else if (!strcasecmp(var->name, "complexity")) { 00396 res = abs(atoi(var->value)); 00397 if (res > -1 && res < 11) { 00398 if (option_verbose > 2) 00399 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting Complexity to %d\n",res); 00400 complexity = res; 00401 } else 00402 ast_log(LOG_ERROR,"Error! Complexity must be 0-10\n"); 00403 } else if (!strcasecmp(var->name, "vbr_quality")) { 00404 if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0 && res_f <= 10) { 00405 if (option_verbose > 2) 00406 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting VBR Quality to %f\n",res_f); 00407 vbr_quality = res_f; 00408 } else 00409 ast_log(LOG_ERROR,"Error! VBR Quality must be 0-10\n"); 00410 } else if (!strcasecmp(var->name, "abr_quality")) { 00411 ast_log(LOG_ERROR,"Error! ABR Quality setting obsolete, set ABR to desired bitrate\n"); 00412 } else if (!strcasecmp(var->name, "enhancement")) { 00413 enhancement = ast_true(var->value) ? 1 : 0; 00414 if (option_verbose > 2) 00415 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Perceptual Enhancement Mode. [%s]\n",enhancement ? "on" : "off"); 00416 } else if (!strcasecmp(var->name, "vbr")) { 00417 vbr = ast_true(var->value) ? 1 : 0; 00418 if (option_verbose > 2) 00419 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: VBR Mode. [%s]\n",vbr ? "on" : "off"); 00420 } else if (!strcasecmp(var->name, "abr")) { 00421 res = abs(atoi(var->value)); 00422 if (res >= 0) { 00423 if (option_verbose > 2) { 00424 if (res > 0) 00425 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting ABR target bitrate to %d\n",res); 00426 else 00427 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Disabling ABR\n"); 00428 } 00429 abr = res; 00430 } else 00431 ast_log(LOG_ERROR,"Error! ABR target bitrate must be >= 0\n"); 00432 } else if (!strcasecmp(var->name, "vad")) { 00433 vad = ast_true(var->value) ? 1 : 0; 00434 if (option_verbose > 2) 00435 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: VAD Mode. [%s]\n",vad ? "on" : "off"); 00436 } else if (!strcasecmp(var->name, "dtx")) { 00437 dtx = ast_true(var->value) ? 1 : 0; 00438 if (option_verbose > 2) 00439 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: DTX Mode. [%s]\n",dtx ? "on" : "off"); 00440 } else if (!strcasecmp(var->name, "preprocess")) { 00441 preproc = ast_true(var->value) ? 1 : 0; 00442 if (option_verbose > 2) 00443 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Preprocessing. [%s]\n",preproc ? "on" : "off"); 00444 } else if (!strcasecmp(var->name, "pp_vad")) { 00445 pp_vad = ast_true(var->value) ? 1 : 0; 00446 if (option_verbose > 2) 00447 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Preprocessor VAD. [%s]\n",pp_vad ? "on" : "off"); 00448 } else if (!strcasecmp(var->name, "pp_agc")) { 00449 pp_agc = ast_true(var->value) ? 1 : 0; 00450 if (option_verbose > 2) 00451 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Preprocessor AGC. [%s]\n",pp_agc ? "on" : "off"); 00452 } else if (!strcasecmp(var->name, "pp_agc_level")) { 00453 if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0) { 00454 if (option_verbose > 2) 00455 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting preprocessor AGC Level to %f\n",res_f); 00456 pp_agc_level = res_f; 00457 } else 00458 ast_log(LOG_ERROR,"Error! Preprocessor AGC Level must be >= 0\n"); 00459 } else if (!strcasecmp(var->name, "pp_denoise")) { 00460 pp_denoise = ast_true(var->value) ? 1 : 0; 00461 if (option_verbose > 2) 00462 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Preprocessor Denoise. [%s]\n",pp_denoise ? "on" : "off"); 00463 } else if (!strcasecmp(var->name, "pp_dereverb")) { 00464 pp_dereverb = ast_true(var->value) ? 1 : 0; 00465 if (option_verbose > 2) 00466 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Preprocessor Dereverb. [%s]\n",pp_dereverb ? "on" : "off"); 00467 } else if (!strcasecmp(var->name, "pp_dereverb_decay")) { 00468 if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0) { 00469 if (option_verbose > 2) 00470 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting preprocessor Dereverb Decay to %f\n",res_f); 00471 pp_dereverb_decay = res_f; 00472 } else 00473 ast_log(LOG_ERROR,"Error! Preprocessor Dereverb Decay must be >= 0\n"); 00474 } else if (!strcasecmp(var->name, "pp_dereverb_level")) { 00475 if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0) { 00476 if (option_verbose > 2) 00477 ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting preprocessor Dereverb Level to %f\n",res_f); 00478 pp_dereverb_level = res_f; 00479 } else 00480 ast_log(LOG_ERROR,"Error! Preprocessor Dereverb Level must be >= 0\n"); 00481 } 00482 } 00483 ast_config_destroy(cfg); 00484 }
static int reload | ( | void | ) | [static] |
Definition at line 486 of file codec_speex.c.
References parse_config().
00487 { 00488 parse_config(); 00489 00490 return 0; 00491 }
static void speextolin_destroy | ( | struct ast_trans_pvt * | arg | ) | [static] |
Definition at line 329 of file codec_speex.c.
References speex_coder_pvt::bits, ast_trans_pvt::pvt, and speex_coder_pvt::speex.
00330 { 00331 struct speex_coder_pvt *pvt = arg->pvt; 00332 00333 speex_decoder_destroy(pvt->speex); 00334 speex_bits_destroy(&pvt->bits); 00335 }
static int speextolin_framein | ( | struct ast_trans_pvt * | pvt, | |
struct ast_frame * | f | |||
) | [static] |
convert and store into outbuf
Definition at line 194 of file codec_speex.c.
References ast_log(), speex_coder_pvt::bits, BUFFER_SAMPLES, ast_trans_pvt::datalen, f, speex_coder_pvt::framesize, LOG_WARNING, ast_trans_pvt::outbuf, ast_trans_pvt::pvt, ast_trans_pvt::samples, and speex_coder_pvt::speex.
00195 { 00196 struct speex_coder_pvt *tmp = pvt->pvt; 00197 00198 /* Assuming there's space left, decode into the current buffer at 00199 the tail location. Read in as many frames as there are */ 00200 int x; 00201 int res; 00202 int16_t *dst = (int16_t *)pvt->outbuf; 00203 /* XXX fout is a temporary buffer, may have different types */ 00204 #ifdef _SPEEX_TYPES_H 00205 spx_int16_t fout[1024]; 00206 #else 00207 float fout[1024]; 00208 #endif 00209 00210 if (f->datalen == 0) { /* Native PLC interpolation */ 00211 if (pvt->samples + tmp->framesize > BUFFER_SAMPLES) { 00212 ast_log(LOG_WARNING, "Out of buffer space\n"); 00213 return -1; 00214 } 00215 #ifdef _SPEEX_TYPES_H 00216 speex_decode_int(tmp->speex, NULL, dst + pvt->samples); 00217 #else 00218 speex_decode(tmp->speex, NULL, fout); 00219 for (x=0;x<tmp->framesize;x++) { 00220 dst[pvt->samples + x] = (int16_t)fout[x]; 00221 } 00222 #endif 00223 pvt->samples += tmp->framesize; 00224 pvt->datalen += 2 * tmp->framesize; /* 2 bytes/sample */ 00225 return 0; 00226 } 00227 00228 /* Read in bits */ 00229 speex_bits_read_from(&tmp->bits, f->data, f->datalen); 00230 for (;;) { 00231 #ifdef _SPEEX_TYPES_H 00232 res = speex_decode_int(tmp->speex, &tmp->bits, fout); 00233 #else 00234 res = speex_decode(tmp->speex, &tmp->bits, fout); 00235 #endif 00236 if (res < 0) 00237 break; 00238 if (pvt->samples + tmp->framesize > BUFFER_SAMPLES) { 00239 ast_log(LOG_WARNING, "Out of buffer space\n"); 00240 return -1; 00241 } 00242 for (x = 0 ; x < tmp->framesize; x++) 00243 dst[pvt->samples + x] = (int16_t)fout[x]; 00244 pvt->samples += tmp->framesize; 00245 pvt->datalen += 2 * tmp->framesize; /* 2 bytes/sample */ 00246 } 00247 return 0; 00248 }
static int speextolin_new | ( | struct ast_trans_pvt * | pvt | ) | [static] |
Definition at line 148 of file codec_speex.c.
References speex_coder_pvt::bits, speex_coder_pvt::framesize, ast_trans_pvt::pvt, and speex_coder_pvt::speex.
00149 { 00150 struct speex_coder_pvt *tmp = pvt->pvt; 00151 00152 if (!(tmp->speex = speex_decoder_init(&speex_nb_mode))) 00153 return -1; 00154 00155 speex_bits_init(&tmp->bits); 00156 speex_decoder_ctl(tmp->speex, SPEEX_GET_FRAME_SIZE, &tmp->framesize); 00157 if (enhancement) 00158 speex_decoder_ctl(tmp->speex, SPEEX_SET_ENH, &enhancement); 00159 00160 return 0; 00161 }
static struct ast_frame* speextolin_sample | ( | void | ) | [static] |
Definition at line 178 of file codec_speex.c.
References AST_FORMAT_SPEEX, AST_FRAME_VOICE, f, SPEEX_SAMPLES, and speex_slin_ex.
00179 { 00180 static struct ast_frame f; 00181 f.frametype = AST_FRAME_VOICE; 00182 f.subclass = AST_FORMAT_SPEEX; 00183 f.datalen = sizeof(speex_slin_ex); 00184 /* All frames are 20 ms long */ 00185 f.samples = SPEEX_SAMPLES; 00186 f.mallocd = 0; 00187 f.offset = 0; 00188 f.src = __PRETTY_FUNCTION__; 00189 f.data = speex_slin_ex; 00190 return &f; 00191 }
static int unload_module | ( | void | ) | [static] |
Definition at line 493 of file codec_speex.c.
References ast_unregister_translator(), lintospeex, and speextolin.
00494 { 00495 int res; 00496 00497 res = ast_unregister_translator(&lintospeex); 00498 res |= ast_unregister_translator(&speextolin); 00499 00500 return res; 00501 }
int abr = 0 [static] |
int complexity = 2 [static] |
int dtx = 0 [static] |
Definition at line 74 of file codec_speex.c.
Referenced by lintospeex_frameout(), and parse_config().
int enhancement = 0 [static] |
struct ast_translator lintospeex [static] |
int pp_agc = 0 [static] |
float pp_agc_level = 8000 [static] |
int pp_denoise = 0 [static] |
int pp_dereverb = 0 [static] |
float pp_dereverb_decay = 0.4 [static] |
float pp_dereverb_level = 0.3 [static] |
int pp_vad = 0 [static] |
int preproc = 0 [static] |
Definition at line 76 of file codec_speex.c.
Referenced by lintospeex_destroy(), lintospeex_frameout(), and parse_config().
int quality = 3 [static] |
struct ast_translator speextolin [static] |
int vad = 0 [static] |
int vbr = 0 [static] |
float vbr_quality = 4 [static] |