| 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
|
|
|