diff --git a/main/file.c b/main/file.c index 1bec4fca48..73387a2ff9 100644 --- a/main/file.c +++ b/main/file.c @@ -665,9 +665,17 @@ static enum fsread_res ast_readaudio_callback(struct ast_filestream *s) } if (whennext != s->lasttimeout) { #ifdef HAVE_ZAPTEL - if (s->owner->timingfd > -1) - ast_settimeout(s->owner, whennext, ast_fsread_audio, s); - else + if (s->owner->timingfd > -1) { + int zap_timer_samples = whennext; + int rate; + /* whennext is in samples, but zaptel timers operate in 8 kHz samples. */ + if ((rate = ast_format_rate(s->fmt->format)) != 8000) { + float factor; + factor = ((float) rate) / ((float) 8000.0); + zap_timer_samples = (int) ( ((float) zap_timer_samples) / factor ); + } + ast_settimeout(s->owner, zap_timer_samples, ast_fsread_audio, s); + } else #endif s->owner->streamid = ast_sched_add(s->owner->sched, whennext / (ast_format_rate(s->fmt->format) / 1000), ast_fsread_audio, s);