[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