diff --git a/talk/media/webrtc/fakewebrtcvoiceengine.h b/talk/media/webrtc/fakewebrtcvoiceengine.h index 53b9f5308..e3b7537cf 100644 --- a/talk/media/webrtc/fakewebrtcvoiceengine.h +++ b/talk/media/webrtc/fakewebrtcvoiceengine.h @@ -539,10 +539,6 @@ class FakeWebRtcVoiceEngine #ifdef USE_WEBRTC_DEV_BRANCH WEBRTC_FUNC(SetFECStatus, (int channel, bool enable)) { WEBRTC_CHECK_CHANNEL(channel); - if (strcmp(channels_[channel]->send_codec.plname, "opus")) { - // Return -1 if current send codec is not Opus. - return -1; - } channels_[channel]->codec_fec = enable; return 0; } diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc index aa161a2bd..7df478844 100644 --- a/talk/media/webrtc/webrtcvoiceengine.cc +++ b/talk/media/webrtc/webrtcvoiceengine.cc @@ -1985,7 +1985,6 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs( memset(&send_codec, 0, sizeof(send_codec)); bool nack_enabled = nack_enabled_; - bool enable_fec = false; // Set send codec (the first non-telephone-event/CN codec) for (std::vector::const_iterator it = codecs.begin(); @@ -2036,6 +2035,19 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs( if (bitrate_from_params != 0) { voe_codec.rate = bitrate_from_params; } + + // For Opus, we also enable inband FEC if it is requested. + if (IsOpusFecEnabled(*it)) { + LOG(LS_INFO) << "Enabling Opus FEC on channel " << channel; +#ifdef USE_WEBRTC_DEV_BRANCH + if (engine()->voe()->codec()->SetFECStatus(channel, true) == -1) { + // Enable in-band FEC of the Opus codec. Treat any failure as a fatal + // internal error. + LOG_RTCERR2(SetFECStatus, channel, true); + return false; + } +#endif // USE_WEBRTC_DEV_BRANCH + } } // We'll use the first codec in the list to actually send audio data. @@ -2066,8 +2078,6 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs( } else { send_codec = voe_codec; nack_enabled = IsNackEnabled(*it); - // For Opus as the send codec, we enable inband FEC if requested. - enable_fec = IsOpus(*it) && IsOpusFecEnabled(*it); } found_send_codec = true; break; @@ -2088,19 +2098,6 @@ bool WebRtcVoiceMediaChannel::SetSendCodecs( if (!SetSendCodec(channel, send_codec)) return false; - // Opus FEC should be enabled after SetSendCodec. - if (enable_fec) { - LOG(LS_INFO) << "Enabling FEC on channel " << channel; -#ifdef USE_WEBRTC_DEV_BRANCH - if (engine()->voe()->codec()->SetFECStatus(channel, true) == -1) { - // Enable in-band FEC of the Opus codec. Treat any failure as a fatal - // internal error. - LOG_RTCERR2(SetFECStatus, channel, true); - return false; - } -#endif // USE_WEBRTC_DEV_BRANCH - } - // Always update the |send_codec_| to the currently set send codec. send_codec_.reset(new webrtc::CodecInst(send_codec)); diff --git a/talk/media/webrtc/webrtcvoiceengine_unittest.cc b/talk/media/webrtc/webrtcvoiceengine_unittest.cc index 341042a12..58893b98a 100644 --- a/talk/media/webrtc/webrtcvoiceengine_unittest.cc +++ b/talk/media/webrtc/webrtcvoiceengine_unittest.cc @@ -1214,7 +1214,6 @@ TEST_F(WebRtcVoiceEngineTestFake, SetSendCodecIsacNoFec) { int channel_num = voe_.GetLastChannel(); std::vector codecs; codecs.push_back(kIsacCodec); - EXPECT_EQ(-1, voe_.SetFECStatus(channel_num, true)); EXPECT_TRUE(channel_->SetSendCodecs(codecs)); EXPECT_FALSE(voe_.GetCodecFEC(channel_num)); }