Move the FEC enabling logic from CodecManager to Rent-A-Codec

BUG=webrtc:5028

Review URL: https://codereview.webrtc.org/1476743002

Cr-Commit-Position: refs/heads/master@{#10785}
diff --git a/webrtc/modules/audio_coding/main/acm2/codec_manager.cc b/webrtc/modules/audio_coding/main/acm2/codec_manager.cc
index 7db6919..7796786 100644
--- a/webrtc/modules/audio_coding/main/acm2/codec_manager.cc
+++ b/webrtc/modules/audio_coding/main/acm2/codec_manager.cc
@@ -173,10 +173,6 @@
     rent_a_codec_.RentEncoderStack(enc, &codec_stack_params_);
     RTC_DCHECK(CurrentEncoder());
 
-    codec_stack_params_.use_codec_fec =
-        codec_stack_params_.use_codec_fec &&
-        enc->SetFec(codec_stack_params_.use_codec_fec);
-
     send_codec_inst_ = send_codec;
     return 0;
   }
@@ -202,10 +198,6 @@
     send_codec_inst_.rate = send_codec.rate;
   }
 
-  codec_stack_params_.use_codec_fec =
-      codec_stack_params_.use_codec_fec &&
-      CurrentEncoder()->SetFec(codec_stack_params_.use_codec_fec);
-
   return 0;
 }
 
@@ -222,16 +214,6 @@
   static const char kName[] = "external";
   memcpy(send_codec_inst_.plname, kName, sizeof(kName));
 
-  if (codec_stack_params_.use_codec_fec) {
-    // Switch FEC on. On failure, remember that FEC is off.
-    if (!external_speech_encoder->SetFec(true))
-      codec_stack_params_.use_codec_fec = false;
-  } else {
-    // Switch FEC off. This shouldn't fail.
-    const bool success = external_speech_encoder->SetFec(false);
-    RTC_DCHECK(success);
-  }
-
   rent_a_codec_.RentEncoderStack(external_speech_encoder, &codec_stack_params_);
 }
 
diff --git a/webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc b/webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc
index b31092c..229d367 100644
--- a/webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc
+++ b/webrtc/modules/audio_coding/main/acm2/rent_a_codec.cc
@@ -253,6 +253,16 @@
                                            StackParameters* param) {
   RTC_DCHECK(speech_encoder);
 
+  if (param->use_codec_fec) {
+    // Switch FEC on. On failure, remember that FEC is off.
+    if (!speech_encoder->SetFec(true))
+      param->use_codec_fec = false;
+  } else {
+    // Switch FEC off. This shouldn't fail.
+    const bool success = speech_encoder->SetFec(false);
+    RTC_DCHECK(success);
+  }
+
   auto pt = [&speech_encoder](const std::map<int, int>& m) {
     auto it = m.find(speech_encoder->SampleRateHz());
     return it == m.end() ? rtc::Optional<int>()
diff --git a/webrtc/modules/audio_coding/main/acm2/rent_a_codec_unittest.cc b/webrtc/modules/audio_coding/main/acm2/rent_a_codec_unittest.cc
index d2f40ed..ae6c98b 100644
--- a/webrtc/modules/audio_coding/main/acm2/rent_a_codec_unittest.cc
+++ b/webrtc/modules/audio_coding/main/acm2/rent_a_codec_unittest.cc
@@ -101,18 +101,20 @@
 }
 
 TEST(RentACodecTest, ExternalEncoder) {
+  const int kSampleRateHz = 8000;
   MockAudioEncoder external_encoder;
+  EXPECT_CALL(external_encoder, SampleRateHz())
+      .WillRepeatedly(Return(kSampleRateHz));
+  EXPECT_CALL(external_encoder, NumChannels()).WillRepeatedly(Return(1));
+  EXPECT_CALL(external_encoder, SetFec(false)).WillRepeatedly(Return(true));
+
   RentACodec rac;
   RentACodec::StackParameters param;
   EXPECT_EQ(&external_encoder, rac.RentEncoderStack(&external_encoder, &param));
-  const int kSampleRateHz = 8000;
   const int kPacketSizeSamples = kSampleRateHz / 100;
   int16_t audio[kPacketSizeSamples] = {0};
   uint8_t encoded[kPacketSizeSamples];
   AudioEncoder::EncodedInfo info;
-  EXPECT_CALL(external_encoder, SampleRateHz())
-      .WillRepeatedly(Return(kSampleRateHz));
-  EXPECT_CALL(external_encoder, NumChannels()).WillRepeatedly(Return(1));
 
   {
     ::testing::InSequence s;
@@ -160,6 +162,7 @@
   EXPECT_CALL(speech_encoder, Max10MsFramesInAPacket())
       .WillRepeatedly(Return(2));
   EXPECT_CALL(speech_encoder, SampleRateHz()).WillRepeatedly(Return(8000));
+  EXPECT_CALL(speech_encoder, SetFec(false)).WillRepeatedly(Return(true));
   {
     ::testing::InSequence s;
     EXPECT_CALL(speech_encoder, Mark("disabled"));