+ odata = f->data.ptr;
+ len = f->datalen;
+ switch (f->subclass.format.id) {
+ case AST_FORMAT_ULAW:
+ s = alloca(len * 2);
+ for (x = 0;x < len; x++) {
+ s[x] = AST_MULAW(odata[x]);
+ }
+ break;
+ case AST_FORMAT_ALAW:
+ s = alloca(len * 2);
+ for (x = 0;x < len; x++) {
+ s[x] = AST_ALAW(odata[x]);
+ }
+ break;
+ default:
+ ast_log(LOG_WARNING, "Can only calculate silence on signed-linear, alaw or ulaw frames :(\n");
+ return 0;
+ }
+ } else {
+ s = f->data.ptr;
+ len = f->datalen/2;
+ }
+ if (noise) {
+ return __ast_dsp_silence_noise(dsp, s, len, NULL, total, frames_energy);
+ } else {
+ return __ast_dsp_silence_noise(dsp, s, len, total, NULL, frames_energy);