[Pkg-voip-commits] r6162 - /zaptel/trunk/debian/patches/xpp_fxs_dtmf_leak

tzafrir-guest at alioth.debian.org tzafrir-guest at alioth.debian.org
Fri Sep 5 19:44:26 UTC 2008


Author: tzafrir-guest
Date: Fri Sep  5 19:44:26 2008
New Revision: 6162

URL: http://svn.debian.org/wsvn/pkg-voip/?sc=1&rev=6162
Log:
The second part of xpp_fxs_dtmf_leak.

Modified:
    zaptel/trunk/debian/patches/xpp_fxs_dtmf_leak

Modified: zaptel/trunk/debian/patches/xpp_fxs_dtmf_leak
URL: http://svn.debian.org/wsvn/pkg-voip/zaptel/trunk/debian/patches/xpp_fxs_dtmf_leak?rev=6162&op=diff
==============================================================================
--- zaptel/trunk/debian/patches/xpp_fxs_dtmf_leak (original)
+++ zaptel/trunk/debian/patches/xpp_fxs_dtmf_leak Fri Sep  5 19:44:26 2008
@@ -1,11 +1,13 @@
 Fixes: Muted DTMF PCM (from FXS modules) could "leak" to the next channel.
 (From xpp r5796).
 
-Source: svn diff -c 4353 http://svn.digium.com/svn/zaptel/branches/1.4
+Sources: 
+svn diff -c 4353 http://svn.digium.com/svn/zaptel/branches/1.4
+svn diff -c 4408 http://svn.digium.com/svn/zaptel/branches/1.4
 
 --- a/kernel/xpp/xbus-pcm.c
 +++ b/kernel/xpp/xbus-pcm.c
-@@ -858,34 +858,36 @@ void generic_card_pcm_tospan(xbus_t *xbu
+@@ -858,34 +858,43 @@ void generic_card_pcm_tospan(xbus_t *xbu
  {
  	byte		*pcm;
  	xpp_line_t	pcm_mask;
@@ -16,7 +18,11 @@
  	pcm = RPACKET_FIELD(pack, GLOBAL, PCM_READ, pcm);
  	pcm_mask = RPACKET_FIELD(pack, GLOBAL, PCM_READ, lines);
  	spin_lock_irqsave(&xpd->lock, flags);
-+	pcm_mute = xpd->mute_dtmf | xpd->silence_pcm;
++	/*
++	 * Calculate the channels we want to mute
++	 */
++	pcm_mute = ~xpd->wanted_pcm_mask;
++	pcm_mute |= xpd->mute_dtmf | xpd->silence_pcm;
  	if(!SPAN_REGISTERED(xpd))
  		goto out;
  	for (i = 0; i < xpd->channels; i++) {
@@ -24,18 +30,20 @@
 +		bool		got_data = IS_SET(pcm_mask, i);
  
 -		if(!IS_SET(xpd->wanted_pcm_mask, i)) {
--			if(IS_SET(xpd->silence_pcm, i)) {
++		if(got_data && !IS_SET(pcm_mute, i)) {
++			/* We have and want real data */
++			// memset((u_char *)r, 0x5A, ZT_CHUNKSIZE);	// DEBUG
++			// fill_beep((u_char *)r, 1, 1);	// DEBUG: BEEP
++			memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
++		} else if(IS_SET(xpd->wanted_pcm_mask | xpd->silence_pcm, i)) {
++			/* Inject SILENCE */
++			memset((u_char *)r, 0x7F, ZT_CHUNKSIZE);
+ 			if(IS_SET(xpd->silence_pcm, i)) {
 -				memset((u_char *)r, 0x7F, ZT_CHUNKSIZE);	// SILENCE
-+		if(IS_SET(xpd->wanted_pcm_mask, i)) {
-+			/* Must fill zaptel buffers */
-+			if(got_data && !IS_SET(pcm_mute, i)) {
-+				/* We have and want real data */
-+				// memset((u_char *)r, 0x5A, ZT_CHUNKSIZE);	// DEBUG
-+				// fill_beep((u_char *)r, 1, 1);	// DEBUG: BEEP
-+				memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
-+			} else {
-+				/* Inject SILENCE */
-+				memset((u_char *)r, 0x7F, ZT_CHUNKSIZE);
++				/*
++				 * This will clear the EC buffers until next tick
++				 * So we don't have noise residues from the past.
++				 */
  				memset(xpd->ec_chunk2[i], 0x7F, ZT_CHUNKSIZE);
  				memset(xpd->ec_chunk1[i], 0x7F, ZT_CHUNKSIZE);
  			}




More information about the Pkg-voip-commits mailing list