summaryrefslogtreecommitdiff
path: root/funcs
diff options
context:
space:
mode:
Diffstat (limited to 'funcs')
-rw-r--r--funcs/func_pitchshift.c5
-rw-r--r--funcs/func_speex.c10
-rw-r--r--funcs/func_volume.c2
3 files changed, 9 insertions, 8 deletions
diff --git a/funcs/func_pitchshift.c b/funcs/func_pitchshift.c
index 36fa2f6c4..b14894712 100644
--- a/funcs/func_pitchshift.c
+++ b/funcs/func_pitchshift.c
@@ -170,8 +170,7 @@ static int pitchshift_cb(struct ast_audiohook *audiohook, struct ast_channel *ch
}
if ((audiohook->status == AST_AUDIOHOOK_STATUS_DONE) ||
(f->frametype != AST_FRAME_VOICE) ||
- ((f->subclass.format.id != AST_FORMAT_SLINEAR) &&
- (f->subclass.format.id != AST_FORMAT_SLINEAR16))) {
+ !(ast_format_is_slinear(&f->subclass.format))) {
return -1;
}
@@ -209,7 +208,7 @@ static int pitchshift_helper(struct ast_channel *chan, const char *cmd, char *da
return 0;
}
- ast_audiohook_init(&shift->audiohook, AST_AUDIOHOOK_TYPE_MANIPULATE, "pitch_shift");
+ ast_audiohook_init(&shift->audiohook, AST_AUDIOHOOK_TYPE_MANIPULATE, "pitch_shift", AST_AUDIOHOOK_MANIPULATE_ALL_RATES);
shift->audiohook.manipulate_callback = pitchshift_cb;
datastore->data = shift;
new = 1;
diff --git a/funcs/func_speex.c b/funcs/func_speex.c
index 4b8b3a3d6..51cea99e1 100644
--- a/funcs/func_speex.c
+++ b/funcs/func_speex.c
@@ -105,6 +105,7 @@ struct speex_direction_info {
struct speex_info {
struct ast_audiohook audiohook;
+ int lastrate;
struct speex_direction_info *tx, *rx;
};
@@ -163,12 +164,13 @@ static int speex_callback(struct ast_audiohook *audiohook, struct ast_channel *c
return -1;
}
- if (sdi->samples != frame->samples) {
+ if ((sdi->samples != frame->samples) || (ast_format_rate(&frame->subclass.format) != si->lastrate)) {
+ si->lastrate = ast_format_rate(&frame->subclass.format);
if (sdi->state) {
speex_preprocess_state_destroy(sdi->state);
}
- if (!(sdi->state = speex_preprocess_state_init((sdi->samples = frame->samples), 8000))) {
+ if (!(sdi->state = speex_preprocess_state_init((sdi->samples = frame->samples), si->lastrate))) {
return -1;
}
@@ -212,9 +214,9 @@ static int speex_write(struct ast_channel *chan, const char *cmd, char *data, co
return 0;
}
- ast_audiohook_init(&si->audiohook, AST_AUDIOHOOK_TYPE_MANIPULATE, "speex");
+ ast_audiohook_init(&si->audiohook, AST_AUDIOHOOK_TYPE_MANIPULATE, "speex", AST_AUDIOHOOK_MANIPULATE_ALL_RATES);
si->audiohook.manipulate_callback = speex_callback;
-
+ si->lastrate = 8000;
is_new = 1;
} else {
ast_channel_unlock(chan);
diff --git a/funcs/func_volume.c b/funcs/func_volume.c
index 88153f603..e94a4edc7 100644
--- a/funcs/func_volume.c
+++ b/funcs/func_volume.c
@@ -132,7 +132,7 @@ static int volume_write(struct ast_channel *chan, const char *cmd, char *data, c
ast_datastore_free(datastore);
return 0;
}
- ast_audiohook_init(&vi->audiohook, AST_AUDIOHOOK_TYPE_MANIPULATE, "Volume");
+ ast_audiohook_init(&vi->audiohook, AST_AUDIOHOOK_TYPE_MANIPULATE, "Volume", AST_AUDIOHOOK_MANIPULATE_ALL_RATES);
vi->audiohook.manipulate_callback = volume_callback;
ast_set_flag(&vi->audiohook, AST_AUDIOHOOK_WANTS_DTMF);
is_new = 1;