Index: webrtc/voice_engine/voe_dtmf_impl.cc |
diff --git a/webrtc/voice_engine/voe_dtmf_impl.cc b/webrtc/voice_engine/voe_dtmf_impl.cc |
deleted file mode 100644 |
index c8cc52cce7280c5b6afa9161972453e4c64f4e9b..0000000000000000000000000000000000000000 |
--- a/webrtc/voice_engine/voe_dtmf_impl.cc |
+++ /dev/null |
@@ -1,217 +0,0 @@ |
-/* |
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#include "webrtc/voice_engine/voe_dtmf_impl.h" |
- |
-#include "webrtc/base/criticalsection.h" |
-#include "webrtc/system_wrappers/include/trace.h" |
-#include "webrtc/voice_engine/channel.h" |
-#include "webrtc/voice_engine/include/voe_errors.h" |
-#include "webrtc/voice_engine/output_mixer.h" |
-#include "webrtc/voice_engine/transmit_mixer.h" |
-#include "webrtc/voice_engine/voice_engine_impl.h" |
- |
-namespace webrtc { |
- |
-VoEDtmf* VoEDtmf::GetInterface(VoiceEngine* voiceEngine) { |
-#ifndef WEBRTC_VOICE_ENGINE_DTMF_API |
- return NULL; |
-#else |
- if (NULL == voiceEngine) { |
- return NULL; |
- } |
- VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine); |
- s->AddRef(); |
- return s; |
-#endif |
-} |
- |
-#ifdef WEBRTC_VOICE_ENGINE_DTMF_API |
- |
-VoEDtmfImpl::VoEDtmfImpl(voe::SharedData* shared) |
- : _dtmfFeedback(true), _dtmfDirectFeedback(false), _shared(shared) { |
- WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "VoEDtmfImpl::VoEDtmfImpl() - ctor"); |
-} |
- |
-VoEDtmfImpl::~VoEDtmfImpl() { |
- WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "VoEDtmfImpl::~VoEDtmfImpl() - dtor"); |
-} |
- |
-int VoEDtmfImpl::SendTelephoneEvent(int channel, |
- int eventCode, |
- bool outOfBand, |
- int lengthMs, |
- int attenuationDb) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SendTelephoneEvent(channel=%d, eventCode=%d, outOfBand=%d," |
- "length=%d, attenuationDb=%d)", |
- channel, eventCode, (int)outOfBand, lengthMs, attenuationDb); |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); |
- voe::Channel* channelPtr = ch.channel(); |
- if (channelPtr == NULL) { |
- _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError, |
- "SendTelephoneEvent() failed to locate channel"); |
- return -1; |
- } |
- if (!channelPtr->Sending()) { |
- _shared->SetLastError(VE_NOT_SENDING, kTraceError, |
- "SendTelephoneEvent() sending is not active"); |
- return -1; |
- } |
- |
- // Sanity check |
- const int maxEventCode = outOfBand ? static_cast<int>(kMaxTelephoneEventCode) |
- : static_cast<int>(kMaxDtmfEventCode); |
- const bool testFailed = ((eventCode < 0) || (eventCode > maxEventCode) || |
- (lengthMs < kMinTelephoneEventDuration) || |
- (lengthMs > kMaxTelephoneEventDuration) || |
- (attenuationDb < kMinTelephoneEventAttenuation) || |
- (attenuationDb > kMaxTelephoneEventAttenuation)); |
- if (testFailed) { |
- _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, |
- "SendTelephoneEvent() invalid parameter(s)"); |
- return -1; |
- } |
- |
- const bool isDtmf = (eventCode >= 0) && (eventCode <= kMaxDtmfEventCode); |
- const bool playDtmfToneDirect = |
- isDtmf && (_dtmfFeedback && _dtmfDirectFeedback); |
- |
- if (playDtmfToneDirect) { |
- // Mute the microphone signal while playing back the tone directly. |
- // This is to reduce the risk of introducing echo from the added output. |
- _shared->transmit_mixer()->UpdateMuteMicrophoneTime(lengthMs); |
- |
- // Play out local feedback tone directly (same approach for both inband |
- // and outband). |
- // Reduce the length of the the tone with 80ms to reduce risk of echo. |
- // For non-direct feedback, outband and inband cases are handled |
- // differently. |
- _shared->output_mixer()->PlayDtmfTone(eventCode, lengthMs - 80, |
- attenuationDb); |
- } |
- |
- if (outOfBand) { |
- // The RTP/RTCP module will always deliver OnPlayTelephoneEvent when |
- // an event is transmitted. It is up to the VoE to utilize it or not. |
- // This flag ensures that feedback/playout is enabled; however, the |
- // channel object must still parse out the Dtmf events (0-15) from |
- // all possible events (0-255). |
- const bool playDTFMEvent = (_dtmfFeedback && !_dtmfDirectFeedback); |
- |
- return channelPtr->SendTelephoneEventOutband(eventCode, lengthMs, |
- attenuationDb, playDTFMEvent); |
- } else { |
- // For Dtmf tones, we want to ensure that inband tones are played out |
- // in sync with the transmitted audio. This flag is utilized by the |
- // channel object to determine if the queued Dtmf e vent shall also |
- // be fed to the output mixer in the same step as input audio is |
- // replaced by inband Dtmf tones. |
- const bool playDTFMEvent = |
- (isDtmf && _dtmfFeedback && !_dtmfDirectFeedback); |
- |
- return channelPtr->SendTelephoneEventInband(eventCode, lengthMs, |
- attenuationDb, playDTFMEvent); |
- } |
-} |
- |
-int VoEDtmfImpl::SetSendTelephoneEventPayloadType(int channel, |
- unsigned char type) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetSendTelephoneEventPayloadType(channel=%d, type=%u)", channel, |
- type); |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); |
- voe::Channel* channelPtr = ch.channel(); |
- if (channelPtr == NULL) { |
- _shared->SetLastError( |
- VE_CHANNEL_NOT_VALID, kTraceError, |
- "SetSendTelephoneEventPayloadType() failed to locate channel"); |
- return -1; |
- } |
- return channelPtr->SetSendTelephoneEventPayloadType(type); |
-} |
- |
-int VoEDtmfImpl::GetSendTelephoneEventPayloadType(int channel, |
- unsigned char& type) { |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel); |
- voe::Channel* channelPtr = ch.channel(); |
- if (channelPtr == NULL) { |
- _shared->SetLastError( |
- VE_CHANNEL_NOT_VALID, kTraceError, |
- "GetSendTelephoneEventPayloadType() failed to locate channel"); |
- return -1; |
- } |
- return channelPtr->GetSendTelephoneEventPayloadType(type); |
-} |
- |
-int VoEDtmfImpl::PlayDtmfTone(int eventCode, int lengthMs, int attenuationDb) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "PlayDtmfTone(eventCode=%d, lengthMs=%d, attenuationDb=%d)", |
- eventCode, lengthMs, attenuationDb); |
- |
- if (!_shared->statistics().Initialized()) { |
- _shared->SetLastError(VE_NOT_INITED, kTraceError); |
- return -1; |
- } |
- if (!_shared->audio_device()->Playing()) { |
- _shared->SetLastError(VE_NOT_PLAYING, kTraceError, |
- "PlayDtmfTone() no channel is playing out"); |
- return -1; |
- } |
- if ((eventCode < kMinDtmfEventCode) || (eventCode > kMaxDtmfEventCode) || |
- (lengthMs < kMinTelephoneEventDuration) || |
- (lengthMs > kMaxTelephoneEventDuration) || |
- (attenuationDb < kMinTelephoneEventAttenuation) || |
- (attenuationDb > kMaxTelephoneEventAttenuation)) { |
- _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError, |
- "PlayDtmfTone() invalid tone parameter(s)"); |
- return -1; |
- } |
- return _shared->output_mixer()->PlayDtmfTone(eventCode, lengthMs, |
- attenuationDb); |
-} |
- |
-int VoEDtmfImpl::SetDtmfFeedbackStatus(bool enable, bool directFeedback) { |
- WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1), |
- "SetDtmfFeedbackStatus(enable=%d, directFeeback=%d)", |
- (int)enable, (int)directFeedback); |
- |
- rtc::CritScope cs(_shared->crit_sec()); |
- |
- _dtmfFeedback = enable; |
- _dtmfDirectFeedback = directFeedback; |
- |
- return 0; |
-} |
- |
-int VoEDtmfImpl::GetDtmfFeedbackStatus(bool& enabled, bool& directFeedback) { |
- rtc::CritScope cs(_shared->crit_sec()); |
- |
- enabled = _dtmfFeedback; |
- directFeedback = _dtmfDirectFeedback; |
- return 0; |
-} |
-#endif // #ifdef WEBRTC_VOICE_ENGINE_DTMF_API |
- |
-} // namespace webrtc |