diff options
author | Rong-En Fan <rafan@FreeBSD.org> | 2008-03-01 07:24:51 +0000 |
---|---|---|
committer | Rong-En Fan <rafan@FreeBSD.org> | 2008-03-01 07:24:51 +0000 |
commit | bf1ee3290e60cf814992d9e666f310d200bb95c8 (patch) | |
tree | 54bd2c6f26a66265c81ec04eda315a445b3826e9 /devel/pwlib/files/patch-src_ptclib_dtmf_cxx | |
parent | e068a5c001f9188e89738a107e266de8fe269295 (diff) | |
download | ports-bf1ee3290e60cf814992d9e666f310d200bb95c8.tar.gz ports-bf1ee3290e60cf814992d9e666f310d200bb95c8.zip |
Notes
Diffstat (limited to 'devel/pwlib/files/patch-src_ptclib_dtmf_cxx')
-rw-r--r-- | devel/pwlib/files/patch-src_ptclib_dtmf_cxx | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/devel/pwlib/files/patch-src_ptclib_dtmf_cxx b/devel/pwlib/files/patch-src_ptclib_dtmf_cxx new file mode 100644 index 000000000000..828ee564e1d6 --- /dev/null +++ b/devel/pwlib/files/patch-src_ptclib_dtmf_cxx @@ -0,0 +1,67 @@ +--- src/ptclib/dtmf.cxx.old 2007-10-19 02:22:33.000000000 -0400 ++++ src/ptclib/dtmf.cxx 2008-01-05 21:17:37.000000000 -0500 +@@ -121,6 +121,64 @@ + } + + ++PString PDTMFDecoder::Decode(const void *buf, PINDEX bytes) ++{ ++ int x; ++ int s, kk; ++ int c, d, f, n; ++ short *buffer = (short *)buf; ++ ++ PINDEX numSamples = bytes >> 1; ++ ++ PString keyString; ++ ++ PINDEX pos; ++ for (pos = 0; pos < numSamples; pos++) { ++ ++ /* Read (and scale) the next 16 bit sample */ ++ x = ((int)(*buffer++)) / (32768/FSC); ++ ++ /* Input amplitude */ ++ if (x > 0) ++ ia += (x - ia) / 128; ++ else ++ ia += (-x - ia) / 128; ++ ++ /* For each tone */ ++ s = 0; ++ for(kk = 0; kk < 8; kk++) { ++ ++ /* Turn the crank */ ++ c = (P2 * (x - k[kk])) / FSC; ++ d = x + c; ++ f = (p1[kk] * (d - h[kk])) / FSC; ++ n = x - k[kk] - c; ++ k[kk] = h[kk] + f; ++ h[kk] = f + d; ++ ++ /* Detect and Average */ ++ if (n > 0) ++ y[kk] += (n - y[kk]) / 64; ++ else ++ y[kk] += (-n - y[kk]) / 64; ++ ++ /* Threshold */ ++ if (y[kk] > FSC/10 && y[kk] > ia) ++ s |= 1 << kk; ++ } ++ ++ /* Hysteresis and noise supressor */ ++ if (s != so) { ++ nn = 0; ++ so = s; ++ } else if (nn++ == 520 && s < 256 && key[s] != '?') { ++ PTRACE(3,"DTMF\tDetected '" << key[s] << "' in PCM-16 stream"); ++ keyString += key[s]; ++ } ++ } ++ return keyString; ++} ++ + PString PDTMFDecoder::Decode(const short * sampleData, PINDEX numSamples) + { + int x; |