diff options
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r-- | channels/chan_iax2.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 7dc60fc41..12c9c553d 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -3022,7 +3022,7 @@ static void __get_from_jb(const void *p) /* create an interpolation frame */ af.frametype = AST_FRAME_VOICE; af.subclass = pvt->voiceformat; - af.samples = frame.ms * 8; + af.samples = frame.ms * (ast_format_rate(pvt->voiceformat) / 1000); af.src = "IAX2 JB interpolation"; af.delivery = ast_tvadd(pvt->rxcore, ast_samp2tv(next, 1000)); af.offset = AST_FRIENDLY_OFFSET; @@ -3094,7 +3094,7 @@ static int schedule_delivery(struct iax_frame *fr, int updatehistory, int fromtr if(fr->af.frametype == AST_FRAME_VOICE) { type = JB_TYPE_VOICE; - len = ast_codec_get_samples(&fr->af) / 8; + len = ast_codec_get_samples(&fr->af) / (ast_format_rate(fr->af.subclass) / 1000); } else if(fr->af.frametype == AST_FRAME_CNG) { type = JB_TYPE_SILENCE; } @@ -4399,6 +4399,7 @@ static unsigned int calc_timestamp(struct chan_iax2_pvt *p, unsigned int ts, str int voice = 0; int genuine = 0; int adjust; + int rate = ast_format_rate(f->subclass) / 1000; struct timeval *delivery = NULL; @@ -4466,7 +4467,7 @@ static unsigned int calc_timestamp(struct chan_iax2_pvt *p, unsigned int ts, str p->offset = ast_tvadd(p->offset, ast_samp2tv(adjust, 10000)); if (!p->nextpred) { - p->nextpred = ms; /*f->samples / 8;*/ + p->nextpred = ms; /*f->samples / rate;*/ if (p->nextpred <= p->lastsent) p->nextpred = p->lastsent + 3; } @@ -4485,11 +4486,11 @@ static unsigned int calc_timestamp(struct chan_iax2_pvt *p, unsigned int ts, str ast_debug(1, "predicted timestamp skew (%u) > max (%u), using real ts instead.\n", abs(ms - p->nextpred), MAX_TIMESTAMP_SKEW); - if (f->samples >= 8) /* check to make sure we dont core dump */ + if (f->samples >= rate) /* check to make sure we dont core dump */ { - int diff = ms % (f->samples / 8); + int diff = ms % (f->samples / rate); if (diff) - ms += f->samples/8 - diff; + ms += f->samples/rate - diff; } p->nextpred = ms; @@ -4521,7 +4522,7 @@ static unsigned int calc_timestamp(struct chan_iax2_pvt *p, unsigned int ts, str } p->lastsent = ms; if (voice) - p->nextpred = p->nextpred + f->samples / 8; + p->nextpred = p->nextpred + f->samples / rate; return ms; } |