From 65550b96ed6163f2258b34232a546c27784f4e4a Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Tue, 6 Nov 2007 00:08:24 +0000 Subject: [PATCH] spandsp dtmf detection configurable as default dtmf detector git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@546 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- core/AmConfig.cpp | 11 +++++++++++ core/AmConfig.h | 3 +++ core/AmDtmfDetector.cpp | 10 ++++++---- core/sems.conf.sample | 9 +++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/core/AmConfig.cpp b/core/AmConfig.cpp index d0ea7ac4..30ae9af2 100644 --- a/core/AmConfig.cpp +++ b/core/AmConfig.cpp @@ -61,6 +61,8 @@ bool AmConfig::SingleCodecInOK = false; unsigned int AmConfig::DeadRtpTime = DEAD_RTP_TIME; bool AmConfig::IgnoreRTPXHdrs = false; string AmConfig::DefaultApplication = ""; +Dtmf::InbandDetectorType +AmConfig::DefaultDTMFDetector = Dtmf::SEMSInternal; vector AmConfig::CodecOrder; @@ -282,6 +284,15 @@ int AmConfig::readConfiguration() } } + if(cfg.hasParameter("dtmf_detector")){ + if (cfg.getParameter("dtmf_detector") == "spandsp") { +#ifndef USE_SPANDSP + WARN("spandsp support not compiled in.\n"); +#endif + DefaultDTMFDetector = Dtmf::SpanDSP; + } + } + return defaultSessionTimerConfig.readFromConfig(cfg); } diff --git a/core/AmConfig.h b/core/AmConfig.h index 6c8c9889..d3e22167 100644 --- a/core/AmConfig.h +++ b/core/AmConfig.h @@ -29,6 +29,7 @@ #define _AmConfig_h_ #include "AmSdp.h" +#include "AmDtmfDetector.h" #include #include @@ -101,6 +102,8 @@ struct AmConfig /** Ignore RTP Extension headers? */ static bool IgnoreRTPXHdrs; + static Dtmf::InbandDetectorType DefaultDTMFDetector; + /** Init function. Resolves SMTP server address. */ static int init(); diff --git a/core/AmDtmfDetector.cpp b/core/AmDtmfDetector.cpp index 3d25a21d..025b9510 100644 --- a/core/AmDtmfDetector.cpp +++ b/core/AmDtmfDetector.cpp @@ -181,9 +181,11 @@ AmDtmfDetector::AmDtmfDetector(AmSession *session) m_eventPending(false), m_sipEventReceived(false), m_inbandEventReceived(false), m_rtpEventReceived(false) { - m_inbandDetector.reset(new AmSemsInbandDtmfDetector(this)); - m_inband_type = Dtmf::SEMSInternal; - +#ifndef USE_SPANDSP + setInbandDetector(Dtmf::SEMSInternal); +#else + setInbandDetector(AmConfig::DefaultDTMFDetector); +#endif } void AmDtmfDetector::setInbandDetector(Dtmf::InbandDetectorType t) { @@ -649,7 +651,7 @@ void AmSpanDSPInbandDtmfDetector::tone_report_func(void *user_data, int code, in } void AmSpanDSPInbandDtmfDetector::tone_report_f(int code, int level, int delay) { - // DBG("tone report %c, %d, %d\n", code, level, delay); + // DBG("spandsp reports tone %c, %d, %d\n", code, level, delay); if (code) { // key pressed gettimeofday(&key_start, NULL); m_lastCode = code; diff --git a/core/sems.conf.sample b/core/sems.conf.sample index 59ebd1be..70c6f15b 100644 --- a/core/sems.conf.sample +++ b/core/sems.conf.sample @@ -216,3 +216,12 @@ media_processor_threads=1 # # ignore_rtpxheaders=yes +# optional parameter: dtmf_detector={spandsp|internal} +# +# sets inband DTMF detector to use. spandsp support must be compiled in +# for this to have effect if dtmf_detector=spandsp. +# +# default: internal +# +#dtmf_detector=spandsp +