Remove multiple RTX codec entries in GetRtpReceiver/SenderCapabilities

The spec says there should only be a single entry with no parameters.

Bug: webrtc:9970
Change-Id: I8b55f10b8cb795021269827c6e0e9f12ab86a3c9
Reviewed-on: https://webrtc-review.googlesource.com/c/109588
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#25550}
diff --git a/pc/rtpparametersconversion.cc b/pc/rtpparametersconversion.cc
index a57066e..bf3bce3 100644
--- a/pc/rtpparametersconversion.cc
+++ b/pc/rtpparametersconversion.cc
@@ -396,6 +396,7 @@
   bool have_red = false;
   bool have_ulpfec = false;
   bool have_flexfec = false;
+  bool have_rtx = false;
   for (const C& cricket_codec : cricket_codecs) {
     if (cricket_codec.name == cricket::kRedCodecName) {
       have_red = true;
@@ -403,8 +404,19 @@
       have_ulpfec = true;
     } else if (cricket_codec.name == cricket::kFlexfecCodecName) {
       have_flexfec = true;
+    } else if (cricket_codec.name == cricket::kRtxCodecName) {
+      if (have_rtx) {
+        // There should only be one RTX codec entry
+        continue;
+      }
+      have_rtx = true;
     }
-    capabilities.codecs.push_back(ToRtpCodecCapability(cricket_codec));
+    auto codec_capability = ToRtpCodecCapability(cricket_codec);
+    if (cricket_codec.name == cricket::kRtxCodecName) {
+      // RTX codec should not have any parameter
+      codec_capability.parameters.clear();
+    }
+    capabilities.codecs.push_back(codec_capability);
   }
   for (const RtpExtension& cricket_extension : cricket_extensions) {
     capabilities.header_extensions.emplace_back(cricket_extension.uri,
diff --git a/pc/rtpparametersconversion_unittest.cc b/pc/rtpparametersconversion_unittest.cc
index 257d26e..f4f1b92 100644
--- a/pc/rtpparametersconversion_unittest.cc
+++ b/pc/rtpparametersconversion_unittest.cc
@@ -574,11 +574,23 @@
   flexfec.id = 102;
   flexfec.clockrate = 90000;
 
+  cricket::VideoCodec rtx;
+  rtx.name = "rtx";
+  rtx.id = 104;
+  rtx.params.insert({"apt", "101"});
+
+  cricket::VideoCodec rtx2;
+  rtx2.name = "rtx";
+  rtx2.id = 105;
+  rtx2.params.insert({"apt", "109"});
+
   RtpCapabilities capabilities = ToRtpCapabilities<cricket::VideoCodec>(
-      {vp8, ulpfec}, {{"uri", 1}, {"uri2", 3}});
-  ASSERT_EQ(2u, capabilities.codecs.size());
+      {vp8, ulpfec, rtx, rtx2}, {{"uri", 1}, {"uri2", 3}});
+  ASSERT_EQ(3u, capabilities.codecs.size());
   EXPECT_EQ("VP8", capabilities.codecs[0].name);
   EXPECT_EQ("ulpfec", capabilities.codecs[1].name);
+  EXPECT_EQ("rtx", capabilities.codecs[2].name);
+  EXPECT_EQ(0u, capabilities.codecs[2].parameters.size());
   ASSERT_EQ(2u, capabilities.header_extensions.size());
   EXPECT_EQ("uri", capabilities.header_extensions[0].uri);
   EXPECT_EQ(1, capabilities.header_extensions[0].preferred_id);
@@ -587,8 +599,8 @@
   EXPECT_EQ(0u, capabilities.fec.size());
 
   capabilities = ToRtpCapabilities<cricket::VideoCodec>(
-      {vp8, red, ulpfec}, cricket::RtpHeaderExtensions());
-  EXPECT_EQ(3u, capabilities.codecs.size());
+      {vp8, red, ulpfec, rtx}, cricket::RtpHeaderExtensions());
+  EXPECT_EQ(4u, capabilities.codecs.size());
   EXPECT_EQ(2u, capabilities.fec.size());
   EXPECT_NE(capabilities.fec.end(),
             std::find(capabilities.fec.begin(), capabilities.fec.end(),