[Asterisk-cvs] asterisk translate.c,1.41,1.42
kpfleming at lists.digium.com
kpfleming at lists.digium.com
Mon Jul 25 15:35:01 CDT 2005
Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv16423
Modified Files:
translate.c
Log Message:
ensure translators don't generate old timestamps when silent periods end (bug #4707 with formatting fixes)
Index: translate.c
===================================================================
RCS file: /usr/cvsroot/asterisk/translate.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -d -r1.41 -r1.42
--- translate.c 25 Jul 2005 19:10:38 -0000 1.41
+++ translate.c 25 Jul 2005 19:41:39 -0000 1.42
@@ -152,10 +152,12 @@
/* Make sure this is in line with what we were expecting */
if (!ast_tveq(path->nextin, f->delivery)) {
/* The time has changed between what we expected and this
- most recent time on the new packet. Adjust our output
- time appropriately */
- path->nextout = ast_tvadd(path->nextout,
- ast_tvsub(f->delivery, path->nextin));
+ most recent time on the new packet. If we have a
+ valid prediction adjust our output time appropriately */
+ if (!ast_tvzero(path->nextout)) {
+ path->nextout = ast_tvadd(path->nextout,
+ ast_tvsub(f->delivery, path->nextin));
+ }
path->nextin = f->delivery;
}
} else {
@@ -180,6 +182,10 @@
p->next->step->framein(p->next->state, out);
else {
if (!ast_tvzero(delivery)) {
+ /* Regenerate prediction after a discontinuity */
+ if (ast_tvzero(path->nextout))
+ path->nextout = ast_tvnow();
+
/* Use next predicted outgoing timestamp */
out->delivery = path->nextout;
@@ -189,6 +195,9 @@
} else {
out->delivery = ast_tv(0, 0);
}
+ /* Invalidate prediction if we're entering a silence period */
+ if (out->frametype == AST_FRAME_CNG)
+ path->nextout = ast_tv(0, 0);
return out;
}
p = p->next;
More information about the svn-commits
mailing list