[Asterisk-cvs] asterisk rtp.c,1.76,1.77

markster at lists.digium.com markster at lists.digium.com
Wed Jun 30 02:18:05 CDT 2004


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv22177

Modified Files:
	rtp.c 
Log Message:
Merge Steven Davie's timestamp improvements


Index: rtp.c
===================================================================
RCS file: /usr/cvsroot/asterisk/rtp.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- rtp.c	29 Jun 2004 20:10:57 -0000	1.76
+++ rtp.c	30 Jun 2004 06:03:57 -0000	1.77
@@ -38,6 +38,8 @@
 #include <asterisk/lock.h>
 #include <asterisk/utils.h>
 
+#define MAX_TIMESTAMP_SKEW	640
+
 #define RTP_MTU		1200
 
 #define TYPE_HIGH	 0x0
@@ -380,6 +382,7 @@
 		gettimeofday(&rtp->rxcore, NULL);
 		rtp->rxcore.tv_sec -= timestamp / 8000;
 		rtp->rxcore.tv_usec -= (timestamp % 8000) * 125;
+		/* Round to 20ms for nice, pretty timestamps */
 		rtp->rxcore.tv_usec -= rtp->rxcore.tv_usec % 20000;
 		if (rtp->rxcore.tv_usec < 0) {
 			/* Adjust appropriately if necessary */
@@ -919,18 +922,19 @@
 	unsigned int ms;
 	if (!rtp->txcore.tv_sec && !rtp->txcore.tv_usec) {
 		gettimeofday(&rtp->txcore, NULL);
+		/* Round to 20ms for nice, pretty timestamps */
 		rtp->txcore.tv_usec -= rtp->txcore.tv_usec % 20000;
 	}
 	if (delivery && (delivery->tv_sec || delivery->tv_usec)) {
 		/* Use previous txcore */
 		ms = (delivery->tv_sec - rtp->txcore.tv_sec) * 1000;
-		ms += (delivery->tv_usec - rtp->txcore.tv_usec) / 1000;
+		ms += (1000000 + delivery->tv_usec - rtp->txcore.tv_usec) / 1000 - 1000;
 		rtp->txcore.tv_sec = delivery->tv_sec;
 		rtp->txcore.tv_usec = delivery->tv_usec;
 	} else {
 		gettimeofday(&now, NULL);
 		ms = (now.tv_sec - rtp->txcore.tv_sec) * 1000;
-		ms += (now.tv_usec - rtp->txcore.tv_usec) / 1000;
+		ms += (1000000 + now.tv_usec - rtp->txcore.tv_usec) / 1000 - 1000;
 		/* Use what we just got for next time */
 		rtp->txcore.tv_sec = now.tv_sec;
 		rtp->txcore.tv_usec = now.tv_usec;
@@ -1058,7 +1062,7 @@
 		if (!f->delivery.tv_sec && !f->delivery.tv_usec) {
 			/* If this isn't an absolute delivery time, Check if it is close to our prediction, 
 			   and if so, go with our prediction */
-			if (abs(rtp->lastts - pred) < 640)
+			if (abs(rtp->lastts - pred) < MAX_TIMESTAMP_SKEW)
 				rtp->lastts = pred;
 			else {
 				ast_log(LOG_DEBUG, "Difference is %d, ms is %d\n", abs(rtp->lastts - pred), ms);




More information about the svn-commits mailing list