[asterisk-commits] russell: trunk r110303 - /trunk/main/file.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Mar 20 15:08:26 CDT 2008


Author: russell
Date: Thu Mar 20 15:08:26 2008
New Revision: 110303

URL: http://svn.digium.com/view/asterisk?view=rev&rev=110303
Log:
Fix a bug when using zaptel timing for playing back files that have a sample rate
other than 8 kHz.  The issue here is that format modules give a "whennext" sample
value, which is used to calculate when to set a timer for to retrieve the next
frame.  However, the zaptel timer operates on 8 kHz samples, so this must be taken
into account.

(another part of issue #12164, reported by milazzo and jsmith, patch by me)

Modified:
    trunk/main/file.c

Modified: trunk/main/file.c
URL: http://svn.digium.com/view/asterisk/trunk/main/file.c?view=diff&rev=110303&r1=110302&r2=110303
==============================================================================
--- trunk/main/file.c (original)
+++ trunk/main/file.c Thu Mar 20 15:08:26 2008
@@ -665,9 +665,17 @@
 	}
 	if (whennext != s->lasttimeout) {
 #ifdef HAVE_ZAPTEL
-		if (s->owner->timingfd > -1)
-			ast_settimeout(s->owner, whennext, ast_fsread_audio, s);
-		else
+		if (s->owner->timingfd > -1) {
+			int zap_timer_samples = whennext;
+			int rate;
+			/* whennext is in samples, but zaptel timers operate in 8 kHz samples. */
+			if ((rate = ast_format_rate(s->fmt->format)) != 8000) {
+				float factor;
+				factor = ((float) rate) / ((float) 8000.0); 
+				zap_timer_samples = (int) ( ((float) zap_timer_samples) / factor );
+			}
+			ast_settimeout(s->owner, zap_timer_samples, ast_fsread_audio, s);
+		} else
 #endif		
 			s->owner->streamid = ast_sched_add(s->owner->sched, 
 				whennext / (ast_format_rate(s->fmt->format) / 1000), ast_fsread_audio, s);




More information about the asterisk-commits mailing list