Remove dual stream functionality in VoiceEngine

This is old code that is no longer in use. The clean-up is part of the
ACM redesign work. The corresponding code in ACM will be deleted in a
follow-up CL.

BUG=3520
R=henrika@webrtc.org, pbos@webrtc.org

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

git-svn-id: http://webrtc.googlecode.com/svn/trunk@8060 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/webrtc/fakewebrtcvoiceengine.h b/talk/media/webrtc/fakewebrtcvoiceengine.h
index b8450be..8108965 100644
--- a/talk/media/webrtc/fakewebrtcvoiceengine.h
+++ b/talk/media/webrtc/fakewebrtcvoiceengine.h
@@ -534,12 +534,6 @@
     codec = channels_[channel]->send_codec;
     return 0;
   }
-  WEBRTC_STUB(SetSecondarySendCodec, (int channel,
-                                      const webrtc::CodecInst& codec,
-                                      int red_payload_type));
-  WEBRTC_STUB(RemoveSecondarySendCodec, (int channel));
-  WEBRTC_STUB(GetSecondarySendCodec, (int channel,
-                                      webrtc::CodecInst& codec));
   WEBRTC_FUNC(GetRecCodec, (int channel, webrtc::CodecInst& codec)) {
     WEBRTC_CHECK_CHANNEL(channel);
     const Channel* c = channels_[channel];
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index 5b24b9b..dec40cb 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -4134,47 +4134,6 @@
     }
 }
 
-int Channel::SetSecondarySendCodec(const CodecInst& codec,
-                                   int red_payload_type) {
-  // Sanity check for payload type.
-  if (red_payload_type < 0 || red_payload_type > 127) {
-    _engineStatisticsPtr->SetLastError(
-        VE_PLTYPE_ERROR, kTraceError,
-        "SetRedPayloadType() invalid RED payload type");
-    return -1;
-  }
-
-  if (SetRedPayloadType(red_payload_type) < 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
-        "SetSecondarySendCodec() Failed to register RED ACM");
-    return -1;
-  }
-  if (audio_coding_->RegisterSecondarySendCodec(codec) < 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
-        "SetSecondarySendCodec() Failed to register secondary send codec in "
-        "ACM");
-    return -1;
-  }
-
-  return 0;
-}
-
-void Channel::RemoveSecondarySendCodec() {
-  audio_coding_->UnregisterSecondarySendCodec();
-}
-
-int Channel::GetSecondarySendCodec(CodecInst* codec) {
-  if (audio_coding_->SecondarySendCodec(codec) < 0) {
-    _engineStatisticsPtr->SetLastError(
-        VE_AUDIO_CODING_MODULE_ERROR, kTraceError,
-        "GetSecondarySendCodec() Failed to get secondary sent codec from ACM");
-    return -1;
-  }
-  return 0;
-}
-
 // Assuming this method is called with valid payload type.
 int Channel::SetRedPayloadType(int red_payload_type) {
   CodecInst codec;
diff --git a/webrtc/voice_engine/channel.h b/webrtc/voice_engine/channel.h
index eedd35a..d7656ce 100644
--- a/webrtc/voice_engine/channel.h
+++ b/webrtc/voice_engine/channel.h
@@ -206,11 +206,6 @@
     int32_t SetSendCNPayloadType(int type, PayloadFrequencies frequency);
     int SetOpusMaxPlaybackRate(int frequency_hz);
 
-    // VoE dual-streaming.
-    int SetSecondarySendCodec(const CodecInst& codec, int red_payload_type);
-    void RemoveSecondarySendCodec();
-    int GetSecondarySendCodec(CodecInst* codec);
-
     // VoENetwork
     int32_t RegisterExternalTransport(Transport& transport);
     int32_t DeRegisterExternalTransport();
diff --git a/webrtc/voice_engine/include/voe_codec.h b/webrtc/voice_engine/include/voe_codec.h
index 234596a..a61b49b 100644
--- a/webrtc/voice_engine/include/voe_codec.h
+++ b/webrtc/voice_engine/include/voe_codec.h
@@ -64,23 +64,6 @@
     // |channel|.
     virtual int GetSendCodec(int channel, CodecInst& codec) = 0;
 
-    // Sets the |codec| as secondary codec for |channel|. Registering a
-    // secondary send codec enables dual-streaming. In dual-streaming mode,
-    // payloads of the primary and the secondary codecs are packed in RED
-    // payloads with |red_payload_type| as payload type. The Secondary codec
-    // MUST have the same sampling rate as the primary codec, otherwise the
-    // codec cannot be registered and -1 is returned. This method fails if a
-    // primary codec is not yet set.
-    virtual int SetSecondarySendCodec(int channel, const CodecInst& codec,
-                                      int red_payload_type) = 0;
-
-    // Removes the secondary codec from |channel|. This will terminate
-    // dual-streaming.
-    virtual int RemoveSecondarySendCodec(int channel) = 0;
-
-    // Gets |codec| which is used as secondary codec in |channel|.
-    virtual int GetSecondarySendCodec(int channel, CodecInst& codec) = 0;
-
     // Gets the currently received |codec| for a specific |channel|.
     virtual int GetRecCodec(int channel, CodecInst& codec) = 0;
 
diff --git a/webrtc/voice_engine/voe_codec_impl.cc b/webrtc/voice_engine/voe_codec_impl.cc
index 6f470be..aa54a1f 100644
--- a/webrtc/voice_engine/voe_codec_impl.cc
+++ b/webrtc/voice_engine/voe_codec_impl.cc
@@ -514,111 +514,6 @@
     }
 }
 
-int VoECodecImpl::SetSecondarySendCodec(int channel, const CodecInst& codec,
-                                        int red_payload_type) {
-  CodecInst copy_codec;
-  ExternalToACMCodecRepresentation(copy_codec, codec);
-
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "SetSecondarySendCodec(channel=%d, codec)", channel);
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "codec: plname=%s, pacsize=%d, plfreq=%d, pltype=%d, "
-               "channels=%d, rate=%d", codec.plname, codec.pacsize,
-               codec.plfreq, codec.pltype, codec.channels, codec.rate);
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-
-  // External sanity checks performed outside the ACM
-  if ((STR_CASE_CMP(copy_codec.plname, "L16") == 0) &&
-      (copy_codec.pacsize >= 960)) {
-    _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError,
-                          "SetSecondarySendCodec() invalid L16 packet size");
-    return -1;
-  }
-
-  // None of the following codecs can be registered as the secondary encoder.
-  if (!STR_CASE_CMP(copy_codec.plname, "CN") ||
-      !STR_CASE_CMP(copy_codec.plname, "TELEPHONE-EVENT") ||
-      !STR_CASE_CMP(copy_codec.plname, "RED"))  {
-    _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError,
-                          "SetSecondarySendCodec() invalid codec name");
-    return -1;
-  }
-
-  // Only mono and stereo are supported.
-  if ((copy_codec.channels != 1) && (copy_codec.channels != 2)) {
-    _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError,
-                          "SetSecondarySendCodec() invalid number of channels");
-    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,
-                          "SetSecondarySendCodec() failed to locate channel");
-    return -1;
-  }
-  if (!AudioCodingModule::IsCodecValid(copy_codec)) {
-    _shared->SetLastError(VE_INVALID_ARGUMENT, kTraceError,
-                          "SetSecondarySendCodec() invalid codec");
-    return -1;
-  }
-  if (channelPtr->SetSecondarySendCodec(copy_codec, red_payload_type) != 0) {
-    _shared->SetLastError(VE_CANNOT_SET_SECONDARY_SEND_CODEC, kTraceError,
-                          "SetSecondarySendCodec() failed to set secondary "
-                          "send codec");
-    return -1;
-  }
-  return 0;
-}
-
-int VoECodecImpl::GetSecondarySendCodec(int channel, CodecInst& codec) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "GetSecondarySendCodec(channel=%d, codec=?)", 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,
-                          "GetSecondarySendCodec() failed to locate channel");
-    return -1;
-  }
-  CodecInst acm_codec;
-  if (channelPtr->GetSecondarySendCodec(&acm_codec) != 0) {
-    _shared->SetLastError(VE_CANNOT_GET_SECONDARY_SEND_CODEC, kTraceError,
-                          "GetSecondarySendCodec() failed to get secondary "
-                          "send codec");
-    return -1;
-  }
-  ACMToExternalCodecRepresentation(codec, acm_codec);
-  WEBRTC_TRACE(kTraceStateInfo, kTraceVoice,
-               VoEId(_shared->instance_id(), -1),
-               "GetSecondarySendCodec() => plname=%s, pacsize=%d, plfreq=%d, "
-               "channels=%d, rate=%d", codec.plname, codec.pacsize,
-               codec.plfreq, codec.channels, codec.rate);
-  return 0;
-}
-
-int VoECodecImpl::RemoveSecondarySendCodec(int channel) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "RemoveSecondarySendCodec(channel=%d)", channel);
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "RemoveSecondarySendCodec() failed to locate "
-                          "channel");
-    return -1;
-  }
-  channelPtr->RemoveSecondarySendCodec();
-  return 0;
-}
-
 #endif  // WEBRTC_VOICE_ENGINE_CODEC_API
 
 }  // namespace webrtc
diff --git a/webrtc/voice_engine/voe_codec_impl.h b/webrtc/voice_engine/voe_codec_impl.h
index f001df8..ab26adc 100644
--- a/webrtc/voice_engine/voe_codec_impl.h
+++ b/webrtc/voice_engine/voe_codec_impl.h
@@ -56,14 +56,6 @@
 
     virtual int SetOpusMaxPlaybackRate(int channel, int frequency_hz);
 
-    // Dual-streaming
-    virtual int SetSecondarySendCodec(int channel, const CodecInst& codec,
-                                      int red_payload_type);
-
-    virtual int RemoveSecondarySendCodec(int channel);
-
-    virtual int GetSecondarySendCodec(int channel, CodecInst& codec);
-
 protected:
     VoECodecImpl(voe::SharedData* shared);
     virtual ~VoECodecImpl();
diff --git a/webrtc/voice_engine/voe_codec_unittest.cc b/webrtc/voice_engine/voe_codec_unittest.cc
index 7e440b2..53894f9 100644
--- a/webrtc/voice_engine/voe_codec_unittest.cc
+++ b/webrtc/voice_engine/voe_codec_unittest.cc
@@ -101,74 +101,6 @@
   int red_payload_type_;
 };
 
-
-TEST_F(VoECodecTest,
-       DISABLED_ON_ANDROID(DualStreamSetSecondaryBeforePrimaryFails)) {
-  // Setting secondary before a primary is registered should fail.
-  EXPECT_EQ(-1, voe_codec_->SetSecondarySendCodec(channel_, valid_secondary_,
-                                                  red_payload_type_));
-  red_payload_type_ = 1;
-}
-
-TEST_F(VoECodecTest,
-       DISABLED_ON_ANDROID(DualStreamRegisterWithWrongInputsFails)) {
-  // Register primary codec.
-  EXPECT_EQ(0, voe_codec_->SetSendCodec(channel_, primary_));
-
-  // Wrong secondary.
-  EXPECT_EQ(-1, voe_codec_->SetSecondarySendCodec(channel_, invalid_secondary_,
-                                                  red_payload_type_));
-
-  // Wrong payload.
-  EXPECT_EQ(-1, voe_codec_->SetSecondarySendCodec(channel_, valid_secondary_,
-                                                  -1));
-  // Wrong channel.
-  EXPECT_EQ(-1, voe_codec_->SetSecondarySendCodec(channel_ + 1,
-                                                  valid_secondary_,
-                                                  red_payload_type_));
-}
-
-TEST_F(VoECodecTest, DISABLED_ON_ANDROID(DualStreamGetSecodaryEncoder)) {
-  // Register primary codec.
-  EXPECT_EQ(0, voe_codec_->SetSendCodec(channel_, primary_));
-
-  // Register a valid codec.
-  EXPECT_EQ(0, voe_codec_->SetSecondarySendCodec(channel_, valid_secondary_,
-                                                 red_payload_type_));
-  CodecInst my_codec;
-
-  // Get secondary codec from wrong channel.
-  EXPECT_EQ(-1, voe_codec_->GetSecondarySendCodec(channel_ + 1, my_codec));
-
-  // Get secondary and compare.
-  memset(&my_codec, 0, sizeof(my_codec));
-  EXPECT_EQ(0, voe_codec_->GetSecondarySendCodec(channel_, my_codec));
-
-  EXPECT_EQ(valid_secondary_.plfreq, my_codec.plfreq);
-  EXPECT_EQ(valid_secondary_.channels, my_codec.channels);
-  EXPECT_EQ(valid_secondary_.pacsize, my_codec.pacsize);
-  EXPECT_EQ(valid_secondary_.rate, my_codec.rate);
-  EXPECT_EQ(valid_secondary_.pltype, my_codec.pltype);
-  EXPECT_EQ(0, STR_CASE_CMP(valid_secondary_.plname, my_codec.plname));
-}
-
-TEST_F(VoECodecTest, DISABLED_ON_ANDROID(DualStreamRemoveSecondaryCodec)) {
-  // Register primary codec.
-  EXPECT_EQ(0, voe_codec_->SetSendCodec(channel_, primary_));
-
-  // Register a valid codec.
-  EXPECT_EQ(0, voe_codec_->SetSecondarySendCodec(channel_, valid_secondary_,
-                                                 red_payload_type_));
-  // Remove from wrong channel.
-  EXPECT_EQ(-1, voe_codec_->RemoveSecondarySendCodec(channel_ + 1));
-  EXPECT_EQ(0, voe_codec_->RemoveSecondarySendCodec(channel_));
-
-  CodecInst my_codec;
-
-  // Get should fail, if secondary is removed.
-  EXPECT_EQ(-1, voe_codec_->GetSecondarySendCodec(channel_, my_codec));
-}
-
 TEST(VoECodecInst, TestCompareCodecInstances) {
   CodecInst codec1, codec2;
   memset(&codec1, 0, sizeof(CodecInst));