silencedetect.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef OPAL_CODEC_SILENCEDETECT_H
00031 #define OPAL_CODEC_SILENCEDETECT_H
00032
00033 #ifdef P_USE_PRAGMA
00034 #pragma interface
00035 #endif
00036
00037 #include <opal/buildopts.h>
00038 #include <rtp/rtp.h>
00039
00040
00042
00043 class OpalSilenceDetector : public PObject
00044 {
00045 PCLASSINFO(OpalSilenceDetector, PObject);
00046 public:
00047 enum Mode {
00048 NoSilenceDetection,
00049 FixedSilenceDetection,
00050 AdaptiveSilenceDetection,
00051 NumModes
00052 };
00053
00054 struct Params {
00055 Params(
00056 Mode mode = AdaptiveSilenceDetection,
00057 unsigned threshold = 0,
00058 unsigned signalDeadband = 10,
00059 unsigned silenceDeadband = 400,
00060 unsigned adaptivePeriod = 600
00061 )
00062 : m_mode(mode),
00063 m_threshold(threshold),
00064 m_signalDeadband(signalDeadband),
00065 m_silenceDeadband(silenceDeadband),
00066 m_adaptivePeriod(adaptivePeriod)
00067 { }
00068
00069 Mode m_mode;
00070 unsigned m_threshold;
00071 unsigned m_signalDeadband;
00072 unsigned m_silenceDeadband;
00073 unsigned m_adaptivePeriod;
00074 };
00075
00080 OpalSilenceDetector(
00081 const Params & newParam
00082 );
00084
00087 const PNotifier & GetReceiveHandler() const { return receiveHandler; }
00088
00096 void SetParameters(
00097 const Params & params,
00098 const int clockRate = 0
00099 );
00100
00106 void SetClockRate(
00107 const int clockRate
00108 );
00109
00112 int GetClockRate() const { return clockRate; }
00113
00122 Mode GetStatus(
00123 PBoolean * isInTalkBurst,
00124 unsigned * currentThreshold
00125 ) const;
00126
00135 virtual unsigned GetAverageSignalLevel(
00136 const BYTE * buffer,
00137 PINDEX size
00138 ) = 0;
00139
00140 private:
00143 void AdaptiveReset();
00144
00145 protected:
00146 PDECLARE_NOTIFIER(RTP_DataFrame, OpalSilenceDetector, ReceivedPacket);
00147
00148 PNotifier receiveHandler;
00149
00150 Mode mode;
00151 unsigned signalDeadband;
00152 unsigned silenceDeadband;
00153 unsigned adaptivePeriod;
00154 int clockRate;
00155
00156 unsigned lastTimestamp;
00157 unsigned receivedTime;
00158 unsigned levelThreshold;
00159 unsigned signalMinimum;
00160 unsigned silenceMaximum;
00161 unsigned signalReceivedTime;
00162 unsigned silenceReceivedTime;
00163 bool inTalkBurst;
00164 PMutex inUse;
00165 };
00166
00167
00168 class OpalPCM16SilenceDetector : public OpalSilenceDetector
00169 {
00170 PCLASSINFO(OpalPCM16SilenceDetector, OpalSilenceDetector);
00171 public:
00174 OpalPCM16SilenceDetector(
00175 const Params & newParam
00176 ) : OpalSilenceDetector(newParam) { }
00177
00188 virtual unsigned GetAverageSignalLevel(
00189 const BYTE * buffer,
00190 PINDEX size
00191 );
00193 };
00194
00195
00196 extern ostream & operator<<(ostream & strm, OpalSilenceDetector::Mode mode);
00197
00198
00199 #endif // OPAL_CODEC_SILENCEDETECT_H
00200
00201