Revert "Remove DTMF status methods from Voice Engine" r7276

This change caused some trouble.

TBR=henrika@webrtc.org,pbos@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/29569004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7277 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/webrtc/fakewebrtcvoiceengine.h b/talk/media/webrtc/fakewebrtcvoiceengine.h
index 1a1abb8..52a50ff 100644
--- a/talk/media/webrtc/fakewebrtcvoiceengine.h
+++ b/talk/media/webrtc/fakewebrtcvoiceengine.h
@@ -690,6 +690,8 @@
 
   WEBRTC_STUB(SetDtmfFeedbackStatus, (bool enable, bool directFeedback));
   WEBRTC_STUB(GetDtmfFeedbackStatus, (bool& enabled, bool& directFeedback));
+  WEBRTC_STUB(SetDtmfPlayoutStatus, (int channel, bool enable));
+  WEBRTC_STUB(GetDtmfPlayoutStatus, (int channel, bool& enabled));
 
   WEBRTC_FUNC(PlayDtmfTone,
       (int event_code, int length_ms = 200, int attenuation_db = 10)) {
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index 1d23afd..93a241b 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -2627,6 +2627,27 @@
 }
 
 int
+Channel::SetDtmfPlayoutStatus(bool enable)
+{
+    WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId),
+               "Channel::SetDtmfPlayoutStatus()");
+    if (audio_coding_->SetDtmfPlayoutStatus(enable) != 0)
+    {
+        _engineStatisticsPtr->SetLastError(
+            VE_AUDIO_CODING_MODULE_ERROR, kTraceWarning,
+            "SetDtmfPlayoutStatus() failed to set Dtmf playout");
+        return -1;
+    }
+    return 0;
+}
+
+bool
+Channel::DtmfPlayoutStatus() const
+{
+    return audio_coding_->DtmfPlayoutStatus();
+}
+
+int
 Channel::SetSendTelephoneEventPayloadType(unsigned char type)
 {
     WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId,_channelId),
diff --git a/webrtc/voice_engine/channel.h b/webrtc/voice_engine/channel.h
index bbc286b..535922f 100644
--- a/webrtc/voice_engine/channel.h
+++ b/webrtc/voice_engine/channel.h
@@ -294,6 +294,8 @@
                                   int attenuationDb, bool playDtmfEvent);
     int SendTelephoneEventInband(unsigned char eventCode, int lengthMs,
                                  int attenuationDb, bool playDtmfEvent);
+    int SetDtmfPlayoutStatus(bool enable);
+    bool DtmfPlayoutStatus() const;
     int SetSendTelephoneEventPayloadType(unsigned char type);
     int GetSendTelephoneEventPayloadType(unsigned char& type);
 
diff --git a/webrtc/voice_engine/include/voe_dtmf.h b/webrtc/voice_engine/include/voe_dtmf.h
index 4fd4496..4db8cbc 100644
--- a/webrtc/voice_engine/include/voe_dtmf.h
+++ b/webrtc/voice_engine/include/voe_dtmf.h
@@ -71,6 +71,13 @@
     virtual int GetSendTelephoneEventPayloadType(int channel,
                                                  unsigned char& type) = 0;
 
+    // Enables or disables local tone playout for received DTMF events
+    // out-of-band.
+    virtual int SetDtmfPlayoutStatus(int channel, bool enable) = 0;
+
+    // Gets the DTMF playout status.
+    virtual int GetDtmfPlayoutStatus(int channel, bool& enabled) = 0;
+
     // Toogles DTMF feedback state: when a DTMF tone is sent, the same tone
     // is played out on the speaker.
     virtual int SetDtmfFeedbackStatus(bool enable,
diff --git a/webrtc/voice_engine/test/auto_test/standard/dtmf_test.cc b/webrtc/voice_engine/test/auto_test/standard/dtmf_test.cc
index 18faa97..a4feb2e 100644
--- a/webrtc/voice_engine/test/auto_test/standard/dtmf_test.cc
+++ b/webrtc/voice_engine/test/auto_test/standard/dtmf_test.cc
@@ -52,6 +52,18 @@
   EXPECT_EQ(0, voe_dtmf_->SendTelephoneEvent(channel_, 110, true));
 }
 
+TEST_F(DtmfTest, ManualCanDisableDtmfPlayoutExceptOnIphone) {
+  TEST_LOG("Disabling DTMF playout (no tone should be heard) \n");
+  EXPECT_EQ(0, voe_dtmf_->SetDtmfPlayoutStatus(channel_, false));
+  EXPECT_EQ(0, voe_dtmf_->SendTelephoneEvent(channel_, 0, true));
+  Sleep(500);
+
+  TEST_LOG("Enabling DTMF playout (tone should be heard) \n");
+  EXPECT_EQ(0, voe_dtmf_->SetDtmfPlayoutStatus(channel_, true));
+  EXPECT_EQ(0, voe_dtmf_->SendTelephoneEvent(channel_, 0, true));
+  Sleep(500);
+}
+
 // This test modifies the DTMF payload type from the default 106 to 88
 // and then runs through 16 DTMF out.of-band events.
 TEST_F(DtmfTest, ManualCanChangeDtmfPayloadType) {
diff --git a/webrtc/voice_engine/voe_dtmf_impl.cc b/webrtc/voice_engine/voe_dtmf_impl.cc
index 2d775e3..70872c6 100644
--- a/webrtc/voice_engine/voe_dtmf_impl.cc
+++ b/webrtc/voice_engine/voe_dtmf_impl.cc
@@ -257,6 +257,53 @@
         enabled, directFeedback);
     return 0;
 }
+
+int VoEDtmfImpl::SetDtmfPlayoutStatus(int channel, bool enable)
+{
+    WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
+                 "SetDtmfPlayoutStatus(channel=%d, enable=%d)",
+                 channel, enable);
+
+    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,
+            "SetDtmfPlayoutStatus() failed to locate channel");
+        return -1;
+    }
+    return channelPtr->SetDtmfPlayoutStatus(enable);
+}
+
+int VoEDtmfImpl::GetDtmfPlayoutStatus(int channel, bool& enabled)
+{
+    WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
+                 "GetDtmfPlayoutStatus(channel=%d, enabled=?)", channel);
+    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,
+            "GetDtmfPlayoutStatus() failed to locate channel");
+        return -1;
+    }
+    enabled = channelPtr->DtmfPlayoutStatus();
+    WEBRTC_TRACE(kTraceStateInfo, kTraceVoice,
+        VoEId(_shared->instance_id(), -1),
+        "GetDtmfPlayoutStatus() => enabled=%d", enabled);
+    return 0;
+}
+
 #endif  // #ifdef WEBRTC_VOICE_ENGINE_DTMF_API
 
 }  // namespace webrtc
diff --git a/webrtc/voice_engine/voe_dtmf_impl.h b/webrtc/voice_engine/voe_dtmf_impl.h
index 81a95c0..9216238 100644
--- a/webrtc/voice_engine/voe_dtmf_impl.h
+++ b/webrtc/voice_engine/voe_dtmf_impl.h
@@ -42,6 +42,10 @@
                              int lengthMs = 200,
                              int attenuationDb = 10);
 
+    virtual int SetDtmfPlayoutStatus(int channel, bool enable);
+
+    virtual int GetDtmfPlayoutStatus(int channel, bool& enabled);
+
 protected:
     VoEDtmfImpl(voe::SharedData* shared);
     virtual ~VoEDtmfImpl();