diff options
Diffstat (limited to 'funcs')
-rw-r--r-- | funcs/func_pitchshift.c | 5 | ||||
-rw-r--r-- | funcs/func_speex.c | 10 | ||||
-rw-r--r-- | funcs/func_volume.c | 2 |
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; |