sayer/1.4-spce2.6
Stefan Sayer 16 years ago
parent 7b7bf45b1a
commit 575b2e1bc1

@ -238,19 +238,24 @@ void AmDtmfDetector::process(AmEvent *evt)
evt->processed = true;
}
void AmDtmfDetector::flushKey(unsigned int event_id) {
// flush the current key if it corresponds to the one with event_id
if (m_eventPending && m_current_eventid_i && event_id == m_current_eventid) {
reportEvent();
}
}
void AmDtmfDetector::registerKeyReleased(int event, Dtmf::EventSource source,
const struct timeval& start,
const struct timeval& stop,
bool flush,
bool has_eventid, unsigned int event_id)
{
// Old event has not been sent yet
// push out it now
if (flush || (m_eventPending && m_currentEvent != event) ||
(m_eventPending && has_eventid && m_current_eventid_i && (event_id != m_current_eventid)))
{
reportEvent();
}
if ((m_eventPending && m_currentEvent != event) ||
(m_eventPending && has_eventid && m_current_eventid_i && (event_id != m_current_eventid))) {
reportEvent();
}
m_eventPending = true;
m_currentEvent = event;
@ -277,7 +282,7 @@ void AmDtmfDetector::registerKeyReleased(int event, Dtmf::EventSource source,
}
}
void AmDtmfDetector::registerKeyPressed(int event, Dtmf::EventSource type)
void AmDtmfDetector::registerKeyPressed(int event, Dtmf::EventSource type, bool has_eventid, unsigned int event_id)
{
struct timeval tm;
gettimeofday(&tm, NULL);
@ -298,6 +303,11 @@ void AmDtmfDetector::registerKeyPressed(int event, Dtmf::EventSource type)
if (delta_msec > 0)
memcpy(&m_lastReportTime, &tm, sizeof(struct timeval));
}
if (has_eventid) {
m_current_eventid_i = true;
m_current_eventid = event_id;
}
}
void AmDtmfDetector::checkTimeout()
@ -379,7 +389,7 @@ void AmRtpDtmfDetector::process(AmRtpDtmfEvent *evt)
(m_currentTS_i && (evt->ts() != m_currentTS)))
{
// Previous event does not end correctly so send out it now...
sendPending(true);
m_keysink->flushKey(m_currentTS);
// ... and reinitialize to process current event
gettimeofday(&m_startTime, NULL);
m_eventPending = true;
@ -388,17 +398,17 @@ void AmRtpDtmfDetector::process(AmRtpDtmfEvent *evt)
m_currentTS_i = true;
}
}
m_keysink->registerKeyPressed(m_currentEvent, Dtmf::SOURCE_RTP);
m_keysink->registerKeyPressed(m_currentEvent, Dtmf::SOURCE_RTP, true, m_currentTS);
}
}
void AmRtpDtmfDetector::sendPending(bool flush)
void AmRtpDtmfDetector::sendPending()
{
if (m_eventPending)
{
struct timeval end_time;
gettimeofday(&end_time, NULL);
m_keysink->registerKeyReleased(m_currentEvent, Dtmf::SOURCE_RTP, m_startTime, end_time, flush, true, m_currentTS);
m_keysink->registerKeyReleased(m_currentEvent, Dtmf::SOURCE_RTP, m_startTime, end_time, true, m_currentTS);
m_eventPending = false;
m_currentTS_i = false;
m_lastTS = m_currentTS;

@ -129,18 +129,26 @@ class AmKeyPressSink {
* @param source which detector posted this event
* @param start time when key was pressed
* @param stop time when key was released
* @param flush whether key should be registered as own keypress immediately
* @param has_eventid whether event has an id
* @param event_id id of the event
*/
virtual void registerKeyReleased(int event, Dtmf::EventSource source,
const struct timeval& start, const struct timeval& stop, bool flush=false,
const struct timeval& start, const struct timeval& stop,
bool has_eventid = false, unsigned int event_id = 0) = 0;
/**
* Through this method the AmDtmfDetector receives events that was
* detected by specific detectors.
* @param event code of key released
* @param source which detector posted this event
* @param has_eventid whether event has an id
* @param event_id id of the event
*/
virtual void registerKeyPressed(int event, Dtmf::EventSource source) = 0;
virtual void registerKeyPressed(int event, Dtmf::EventSource source, bool has_eventid=false, unsigned int event_id=0) = 0;
/**
* Flush (report to session) any pending key if ti matches the event id
* @param event_id ID of the event (e.g. RTP TS)
*/
virtual void flushKey(unsigned int event_id) = 0;
};
/**
@ -355,7 +363,7 @@ class AmRtpDtmfDetector
/**
* Send out pending event
*/
void sendPending(bool flush=false);
void sendPending();
public:
/**
@ -423,20 +431,19 @@ class AmDtmfDetector
* @param source which detector posted this event
* @param start time when key was pressed
* @param stop time when key was released
* @param flush whether key should be registered as own keypress immediately
* @param has_eventid whether event has an id
* @param event_id id of the event
*/
void registerKeyReleased(int event, Dtmf::EventSource source,
const struct timeval& start, const struct timeval& stop,
bool flush=false, bool has_eventid = false, unsigned int event_id = 0);
bool has_eventid = false, unsigned int event_id = 0);
/**
* Through this method the AmDtmfDetector receives events that was
* detected by specific detectors.
* @param event code of key released
* @param source which detector posted this event
*/
void registerKeyPressed(int event, Dtmf::EventSource source);
void registerKeyPressed(int event, Dtmf::EventSource source, bool has_eventid=false, unsigned int event_id=0);
void flushKey(unsigned int event_id);
public:
/**

Loading…
Cancel
Save