Index: webrtc/voice_engine/channel.cc |
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc |
index 11af45edc837fb8f94eb9da43edf9ba2be86dde9..695aa1dee2434f85d6a1730771056b6ed9067fb6 100644 |
--- a/webrtc/voice_engine/channel.cc |
+++ b/webrtc/voice_engine/channel.cc |
@@ -40,13 +40,11 @@ |
#include "webrtc/voice_engine/transmit_mixer.h" |
#include "webrtc/voice_engine/utility.h" |
-#if defined(_WIN32) |
-#include <Qos.h> |
-#endif |
- |
namespace webrtc { |
namespace voe { |
+const int kTelephoneEventAttenuationdB = 10; |
+ |
class TransportFeedbackProxy : public TransportFeedbackObserver { |
public: |
TransportFeedbackProxy() : feedback_observer_(nullptr) { |
@@ -363,7 +361,7 @@ void Channel::OnPlayTelephoneEvent(uint8_t event, |
" volume=%u)", |
event, lengthMs, volume); |
- if (!_playOutbandDtmfEvent || (event > 15)) { |
+ if (event > 15) { |
// Ignore callback since feedback is disabled or event is not a |
// Dtmf tone event. |
return; |
@@ -761,14 +759,11 @@ Channel::Channel(int32_t channelId, |
_outputFilePlayerId(VoEModuleId(instanceId, channelId) + 1025), |
_outputFileRecorderId(VoEModuleId(instanceId, channelId) + 1026), |
_outputFileRecording(false), |
- _inbandDtmfQueue(VoEModuleId(instanceId, channelId)), |
- _inbandDtmfGenerator(VoEModuleId(instanceId, channelId)), |
_outputExternalMedia(false), |
_inputExternalMediaCallbackPtr(NULL), |
_outputExternalMediaCallbackPtr(NULL), |
_timeStamp(0), // This is just an offset, RTP module will add it's own |
// random offset |
- _sendTelephoneEventPayloadType(106), |
ntp_estimator_(Clock::GetRealTimeClock()), |
jitter_buffer_playout_timestamp_(0), |
playout_timestamp_rtp_(0), |
@@ -796,8 +791,6 @@ Channel::Channel(int32_t channelId, |
_panLeft(1.0f), |
_panRight(1.0f), |
_outputGain(1.0f), |
- _playOutbandDtmfEvent(false), |
- _playInbandDtmfEvent(false), |
_lastLocalTimeStamp(0), |
_lastPayloadType(0), |
_includeAudioLevelIndication(false), |
@@ -830,8 +823,6 @@ Channel::Channel(int32_t channelId, |
config.Get<NetEqFastAccelerate>().enabled; |
audio_coding_.reset(AudioCodingModule::Create(acm_config)); |
- _inbandDtmfQueue.ResetDtmf(); |
- _inbandDtmfGenerator.Init(); |
_outputAudioLevel.Clear(); |
RtpRtcp::Configuration configuration; |
@@ -2212,21 +2203,18 @@ int Channel::GetChannelOutputVolumeScaling(float& scaling) const { |
return 0; |
} |
-int Channel::SendTelephoneEventOutband(unsigned char eventCode, |
- int lengthMs, |
- int attenuationDb, |
- bool playDtmfEvent) { |
+int Channel::SendTelephoneEventOutband(int event, int duration_ms) { |
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
- "Channel::SendTelephoneEventOutband(..., playDtmfEvent=%d)", |
- playDtmfEvent); |
+ "Channel::SendTelephoneEventOutband(...)"); |
+ RTC_DCHECK_LE(0, event); |
+ RTC_DCHECK_GE(255, event); |
+ RTC_DCHECK_LE(0, duration_ms); |
+ RTC_DCHECK_GE(65535, duration_ms); |
if (!Sending()) { |
return -1; |
} |
- |
- _playOutbandDtmfEvent = playDtmfEvent; |
- |
- if (_rtpRtcpModule->SendTelephoneEventOutband(eventCode, lengthMs, |
- attenuationDb) != 0) { |
+ if (_rtpRtcpModule->SendTelephoneEventOutband( |
+ event, duration_ms, kTelephoneEventAttenuationdB) != 0) { |
_engineStatisticsPtr->SetLastError( |
VE_SEND_DTMF_FAILED, kTraceWarning, |
"SendTelephoneEventOutband() failed to send event"); |
@@ -2235,32 +2223,14 @@ int Channel::SendTelephoneEventOutband(unsigned char eventCode, |
return 0; |
} |
-int Channel::SendTelephoneEventInband(unsigned char eventCode, |
- int lengthMs, |
- int attenuationDb, |
- bool playDtmfEvent) { |
- WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
- "Channel::SendTelephoneEventInband(..., playDtmfEvent=%d)", |
- playDtmfEvent); |
- |
- _playInbandDtmfEvent = playDtmfEvent; |
- _inbandDtmfQueue.AddDtmf(eventCode, lengthMs, attenuationDb); |
- |
- return 0; |
-} |
- |
-int Channel::SetSendTelephoneEventPayloadType(unsigned char type) { |
+int Channel::SetSendTelephoneEventPayloadType(int payload_type) { |
WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId), |
"Channel::SetSendTelephoneEventPayloadType()"); |
- if (type > 127) { |
- _engineStatisticsPtr->SetLastError( |
- VE_INVALID_ARGUMENT, kTraceError, |
- "SetSendTelephoneEventPayloadType() invalid type"); |
- return -1; |
- } |
- CodecInst codec = {}; |
+ RTC_DCHECK_LE(0, payload_type); |
+ RTC_DCHECK_GE(127, payload_type); |
+ CodecInst codec = {0}; |
codec.plfreq = 8000; |
- codec.pltype = type; |
+ codec.pltype = payload_type; |
memcpy(codec.plname, "telephone-event", 16); |
if (_rtpRtcpModule->RegisterSendPayload(codec) != 0) { |
_rtpRtcpModule->DeRegisterSendPayload(codec.pltype); |
@@ -2272,12 +2242,6 @@ int Channel::SetSendTelephoneEventPayloadType(unsigned char type) { |
return -1; |
} |
} |
- _sendTelephoneEventPayloadType = type; |
- return 0; |
-} |
- |
-int Channel::GetSendTelephoneEventPayloadType(unsigned char& type) { |
- type = _sendTelephoneEventPayloadType; |
return 0; |
} |
@@ -3027,8 +2991,6 @@ uint32_t Channel::PrepareEncodeAndSend(int mixingFrequency) { |
} |
} |
- InsertInbandDtmfTone(); |
- |
if (_includeAudioLevelIndication) { |
size_t length = |
_audioFrame.samples_per_channel_ * _audioFrame.num_channels_; |
@@ -3348,64 +3310,6 @@ int32_t Channel::MixAudioWithFile(AudioFrame& audioFrame, int mixingFrequency) { |
return 0; |
} |
-int Channel::InsertInbandDtmfTone() { |
- // Check if we should start a new tone. |
- if (_inbandDtmfQueue.PendingDtmf() && !_inbandDtmfGenerator.IsAddingTone() && |
- _inbandDtmfGenerator.DelaySinceLastTone() > |
- kMinTelephoneEventSeparationMs) { |
- int8_t eventCode(0); |
- uint16_t lengthMs(0); |
- uint8_t attenuationDb(0); |
- |
- eventCode = _inbandDtmfQueue.NextDtmf(&lengthMs, &attenuationDb); |
- _inbandDtmfGenerator.AddTone(eventCode, lengthMs, attenuationDb); |
- if (_playInbandDtmfEvent) { |
- // Add tone to output mixer using a reduced length to minimize |
- // risk of echo. |
- _outputMixerPtr->PlayDtmfTone(eventCode, lengthMs - 80, attenuationDb); |
- } |
- } |
- |
- if (_inbandDtmfGenerator.IsAddingTone()) { |
- uint16_t frequency(0); |
- _inbandDtmfGenerator.GetSampleRate(frequency); |
- |
- if (frequency != _audioFrame.sample_rate_hz_) { |
- // Update sample rate of Dtmf tone since the mixing frequency |
- // has changed. |
- _inbandDtmfGenerator.SetSampleRate( |
- (uint16_t)(_audioFrame.sample_rate_hz_)); |
- // Reset the tone to be added taking the new sample rate into |
- // account. |
- _inbandDtmfGenerator.ResetTone(); |
- } |
- |
- int16_t toneBuffer[320]; |
- uint16_t toneSamples(0); |
- // Get 10ms tone segment and set time since last tone to zero |
- if (_inbandDtmfGenerator.Get10msTone(toneBuffer, toneSamples) == -1) { |
- WEBRTC_TRACE(kTraceWarning, kTraceVoice, VoEId(_instanceId, _channelId), |
- "Channel::EncodeAndSend() inserting Dtmf failed"); |
- return -1; |
- } |
- |
- // Replace mixed audio with DTMF tone. |
- for (size_t sample = 0; sample < _audioFrame.samples_per_channel_; |
- sample++) { |
- for (size_t channel = 0; channel < _audioFrame.num_channels_; channel++) { |
- const size_t index = sample * _audioFrame.num_channels_ + channel; |
- _audioFrame.data_[index] = toneBuffer[sample]; |
- } |
- } |
- |
- assert(_audioFrame.samples_per_channel_ == toneSamples); |
- } else { |
- // Add 10ms to "delay-since-last-tone" counter |
- _inbandDtmfGenerator.UpdateDelaySinceLastTone(); |
- } |
- return 0; |
-} |
- |
void Channel::UpdatePlayoutTimestamp(bool rtcp) { |
uint32_t playout_timestamp = 0; |