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(),