diff options
author | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-05-21 19:15:05 +0000 |
---|---|---|
committer | dvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-05-21 19:15:05 +0000 |
commit | 466747de1049a4e1795bbddf1444674744268b19 (patch) | |
tree | 85f8728dde8981d5eadb6eb266f5cb50afb5c3d1 | |
parent | 2aa8aa6d8ddbb2691812e868e4ffd96cde02d446 (diff) |
Merged revisions 195995 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r195995 | dvossel | 2009-05-21 14:11:49 -0500 (Thu, 21 May 2009) | 20 lines
Merged revisions 195991 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r195991 | dvossel | 2009-05-21 14:04:56 -0500 (Thu, 21 May 2009) | 14 lines
Sign problem calculating timestamp for iax frame leads to no audio on the receiving peer.
There are rare cases in which a frame's delivery timestamp is slightly less than the iax2_pvt's offset. This causes the pvt's timestamp to be a small negative number, but since the timestamp value is unsigned it looks like a huge positive number. This patch checks for this negative case and sets the ms to zero. A similar check is already done right below this one in the 'else' statement.
(closes issue #15032)
Reported by: guillecabeza
Patches:
chan_iax2.c.patch_timestamp uploaded by guillecabeza (license 380)
Tested by: guillecabeza
(closes issue #14216)
Reported by: Andrey Sofronov
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.2@196000 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_iax2.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index a64d7b0e7..7944bff7b 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -4630,6 +4630,9 @@ static unsigned int calc_timestamp(struct chan_iax2_pvt *p, unsigned int ts, str /* If we have a time that the frame arrived, always use it to make our timestamp */ if (delivery && !ast_tvzero(*delivery)) { ms = ast_tvdiff_ms(*delivery, p->offset); + if (ms < 0) { + ms = 0; + } if (iaxdebug) ast_debug(3, "calc_timestamp: call %d/%d: Timestamp slaved to delivery time\n", p->callno, iaxs[p->callno]->peercallno); } else { |