diff --git a/talk/app/webrtc/mediaconstraintsinterface.h b/talk/app/webrtc/mediaconstraintsinterface.h index 36257db715..2ac251623c 100644 --- a/talk/app/webrtc/mediaconstraintsinterface.h +++ b/talk/app/webrtc/mediaconstraintsinterface.h @@ -133,9 +133,6 @@ class MediaConstraintsInterface { static const char kHighBitrate[]; // googHighBitrate static const char kVeryHighBitrate[]; // googVeryHighBitrate static const char kPayloadPadding[]; // googPayloadPadding - - // PeerConnection codec constraint keys. This should be combined with the - // values above. // kOpusFec controls whether we ask the other side to turn on FEC for Opus. static const char kOpusFec[]; // googOpusFec diff --git a/talk/media/base/codec.cc b/talk/media/base/codec.cc index 6e65560c2e..bc7401a78f 100644 --- a/talk/media/base/codec.cc +++ b/talk/media/base/codec.cc @@ -118,6 +118,10 @@ void Codec::SetParam(const std::string& name, int value) { params[name] = talk_base::ToString(value); } +bool Codec::RemoveParam(const std::string& name) { + return params.erase(name) == 1; +} + void Codec::AddFeedbackParam(const FeedbackParam& param) { feedback_params.Add(param); } diff --git a/talk/media/base/codec.h b/talk/media/base/codec.h index 0e9bf3ca07..863e289e8b 100644 --- a/talk/media/base/codec.h +++ b/talk/media/base/codec.h @@ -104,6 +104,10 @@ struct Codec { void SetParam(const std::string& name, const std::string& value); void SetParam(const std::string& name, int value); + // It is safe to input a non-existent parameter. + // Returns true if the parameter existed, false if it did not exist. + bool RemoveParam(const std::string& name); + bool HasFeedbackParam(const FeedbackParam& param) const; void AddFeedbackParam(const FeedbackParam& param); diff --git a/talk/media/base/codec_unittest.cc b/talk/media/base/codec_unittest.cc index 35d1ab7613..ea7a131122 100644 --- a/talk/media/base/codec_unittest.cc +++ b/talk/media/base/codec_unittest.cc @@ -278,7 +278,7 @@ TEST_F(CodecTest, TestDataCodecMatches) { EXPECT_FALSE(c1.Matches(DataCodec(95, "D", 0))); } -TEST_F(CodecTest, TestSetParamAndGetParam) { +TEST_F(CodecTest, TestSetParamGetParamAndRemoveParam) { AudioCodec codec; codec.SetParam("a", "1"); codec.SetParam("b", "x"); @@ -295,6 +295,8 @@ TEST_F(CodecTest, TestSetParamAndGetParam) { EXPECT_TRUE(codec.GetParam("b", &str_value)); EXPECT_EQ("x", str_value); EXPECT_FALSE(codec.GetParam("c", &str_value)); + EXPECT_TRUE(codec.RemoveParam("a")); + EXPECT_FALSE(codec.RemoveParam("c")); } TEST_F(CodecTest, TestIntersectFeedbackParams) { diff --git a/talk/media/webrtc/webrtcvoiceengine.cc b/talk/media/webrtc/webrtcvoiceengine.cc index f1460a6cb8..7df4788442 100644 --- a/talk/media/webrtc/webrtcvoiceengine.cc +++ b/talk/media/webrtc/webrtcvoiceengine.cc @@ -423,7 +423,7 @@ static int GetOpusBitrateFromParams(const AudioCodec& codec) { return bitrate; } -// Return true params[kCodecParamUseInbandFec] == kParamValueTrue, false +// Return true if params[kCodecParamUseInbandFec] == "1", false // otherwise. static bool IsOpusFecEnabled(const AudioCodec& codec) { int value; @@ -431,11 +431,11 @@ static bool IsOpusFecEnabled(const AudioCodec& codec) { } // Set params[kCodecParamUseInbandFec]. Caller should make sure codec is Opus. -static void SetOpusFec(AudioCodec *codec, bool opus_fec) { +static void SetOpusFec(AudioCodec* codec, bool opus_fec) { if (opus_fec) { - codec->params[kCodecParamUseInbandFec] = kParamValueTrue; + codec->SetParam(kCodecParamUseInbandFec, 1); } else { - codec->params.erase(kCodecParamUseInbandFec); + codec->RemoveParam(kCodecParamUseInbandFec); } } @@ -909,7 +909,7 @@ bool WebRtcVoiceEngine::ApplyOptions(const AudioOptions& options_in) { } } - bool opus_fec = false; + bool opus_fec; if (options.opus_fec.Get(&opus_fec)) { LOG(LS_INFO) << "Opus FEC is enabled? " << opus_fec; for (std::vector::iterator it = codecs_.begin();