aboutsummaryrefslogtreecommitdiff
path: root/devel/pwlib/files/patch-src_ptclib_dtmf_cxx
diff options
context:
space:
mode:
authorRong-En Fan <rafan@FreeBSD.org>2008-03-01 07:24:51 +0000
committerRong-En Fan <rafan@FreeBSD.org>2008-03-01 07:24:51 +0000
commitbf1ee3290e60cf814992d9e666f310d200bb95c8 (patch)
tree54bd2c6f26a66265c81ec04eda315a445b3826e9 /devel/pwlib/files/patch-src_ptclib_dtmf_cxx
parente068a5c001f9188e89738a107e266de8fe269295 (diff)
downloadports-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_cxx67
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;