if (voice) { /* On a voice frame, use predicted values if appropriate */ if (p->notsilenttx && abs(ms - p->nextpred) <= MAX_TIMESTAMP_SKEW) { /* Adjust our txcore, keeping voice and non-voice synchronized */ add_ms(&p->offset, (int)(ms - p->nextpred)/10); if (!p->nextpred) { p->nextpred = ms; /*f->samples / 8;*/ if (p->nextpred <= p->lastsent) p->nextpred = p->lastsent + 3; } ms = p->nextpred; } else { /* in this case, just use the actual * time, since we're either way off * (shouldn't happen), or we're ending a * silent period -- and seed the next * predicted time. Also, round ms to the * next multiple of frame size (so our * silent periods are multiples of * frame size too) */ if(abs(ms - p->nextpred) > MAX_TIMESTAMP_SKEW) ast_log(LOG_WARNING,"abs(ms - p->nexpred) is %u, which is > %u\n",abs(ms - p->nextpred), MAX_TIMESTAMP_SKEW); if (f->samples >= 8) /* check to make sure we dont core dump */ { int diff = ms % (f->samples / 8); if (diff) ms += f->samples/8 - diff; }