[asterisk-commits] russell: branch 1.4 r105932 - in /branches/1.4: include/asterisk/ main/

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Mar 4 19:52:18 CST 2008


Author: russell
Date: Tue Mar  4 19:52:18 2008
New Revision: 105932

URL: http://svn.digium.com/view/asterisk?view=rev&rev=105932
Log:
Fix a bug that I just noticed in the RTP code.  The calculation for setting the
len field in an ast_frame of audio was wrong when G.722 is in use.  The len field
represents the number of ms of audio that the frame contains.  It would have
set the value to be twice what it should be.

Modified:
    branches/1.4/include/asterisk/frame.h
    branches/1.4/main/rtp.c
    branches/1.4/main/translate.c

Modified: branches/1.4/include/asterisk/frame.h
URL: http://svn.digium.com/view/asterisk/branches/1.4/include/asterisk/frame.h?view=diff&rev=105932&r1=105931&r2=105932
==============================================================================
--- branches/1.4/include/asterisk/frame.h (original)
+++ branches/1.4/include/asterisk/frame.h Tue Mar  4 19:52:18 2008
@@ -569,6 +569,17 @@
  */
 int ast_frame_slinear_sum(struct ast_frame *f1, struct ast_frame *f2);
 
+/*!
+ * \brief Get the sample rate for a given format.
+ */
+static force_inline int ast_format_rate(int format)
+{
+	if (format == AST_FORMAT_G722)
+		return 16000;
+
+	return 8000;
+}
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif

Modified: branches/1.4/main/rtp.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/rtp.c?view=diff&rev=105932&r1=105931&r2=105932
==============================================================================
--- branches/1.4/main/rtp.c (original)
+++ branches/1.4/main/rtp.c Tue Mar  4 19:52:18 2008
@@ -1313,7 +1313,7 @@
 		/* Add timing data to let ast_generic_bridge() put the frame into a jitterbuf */
 		ast_set_flag(&rtp->f, AST_FRFLAG_HAS_TIMING_INFO);
 		rtp->f.ts = timestamp / 8;
-		rtp->f.len = rtp->f.samples / 8;
+		rtp->f.len = rtp->f.samples / ( (ast_format_rate(rtp->f.subclass) == 16000) ? 16 : 8 );
 	} else {
 		/* Video -- samples is # of samples vs. 90000 */
 		if (!rtp->lastividtimestamp)

Modified: branches/1.4/main/translate.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/translate.c?view=diff&rev=105932&r1=105931&r2=105932
==============================================================================
--- branches/1.4/main/translate.c (original)
+++ branches/1.4/main/translate.c Tue Mar  4 19:52:18 2008
@@ -304,14 +304,6 @@
 
 	AST_LIST_UNLOCK(&translators);
 	return head;
-}
-
-static inline int format_rate(int format)
-{
-	if (format == AST_FORMAT_G722)
-		return 16000;
-
-	return 8000;
 }
 
 /*! \brief do the actual translation */
@@ -350,7 +342,7 @@
 			path->nextout = f->delivery;
 		}
 		/* Predict next incoming sample */
-		path->nextin = ast_tvadd(path->nextin, ast_samp2tv(f->samples, format_rate(f->subclass)));
+		path->nextin = ast_tvadd(path->nextin, ast_samp2tv(f->samples, ast_format_rate(f->subclass)));
 	}
 	delivery = f->delivery;
 	for ( ; out && p ; p = p->next) {
@@ -374,7 +366,7 @@
 		
 		/* Predict next outgoing timestamp from samples in this
 		   frame. */
-		path->nextout = ast_tvadd(path->nextout, ast_samp2tv(out->samples, format_rate(out->subclass)));
+		path->nextout = ast_tvadd(path->nextout, ast_samp2tv(out->samples, ast_format_rate(out->subclass)));
 	} else {
 		out->delivery = ast_tv(0, 0);
 		ast_set2_flag(out, has_timing_info, AST_FRFLAG_HAS_TIMING_INFO);
@@ -397,7 +389,7 @@
 	struct ast_trans_pvt *pvt;
 	struct timeval start;
 	int cost;
-	int out_rate = format_rate(t->dstfmt);
+	int out_rate = ast_format_rate(t->dstfmt);
 
 	if (!seconds)
 		seconds = 1;




More information about the asterisk-commits mailing list