diff --git a/webrtc/modules/audio_coding/main/acm2/codec_manager.cc b/webrtc/modules/audio_coding/main/acm2/codec_manager.cc index 7db6919b2e..7796786866 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 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) { 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 @@ int CodecManager::RegisterEncoder(const CodecInst& send_codec) { 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 @@ void CodecManager::RegisterEncoder(AudioEncoder* external_speech_encoder) { 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 b31092cb11..229d367f61 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 @@ AudioEncoder* RentACodec::RentEncoderStack(AudioEncoder* speech_encoder, 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& m) { auto it = m.find(speech_encoder->SampleRateHz()); return it == m.end() ? rtc::Optional() 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 d2f40ed3d2..ae6c98b34c 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_F(RentACodecTestF, VerifyCngFrames) { } 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 @@ void TestCngAndRedResetSpeechEncoder(bool use_cng, bool use_red) { 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"));