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, ¶m));
- 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"));