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}
This commit is contained in:
Florent Castelli
2018-11-06 17:27:21 +01:00
committed by Commit Bot
parent 75de46a966
commit 5473a45688
2 changed files with 29 additions and 5 deletions

View File

@ -396,6 +396,7 @@ RtpCapabilities ToRtpCapabilities(
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 @@ RtpCapabilities ToRtpCapabilities(
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;
}
capabilities.codecs.push_back(ToRtpCodecCapability(cricket_codec));
have_rtx = true;
}
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,

View File

@ -574,11 +574,23 @@ TEST(RtpParametersConversionTest, ToRtpCapabilities) {
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 @@ TEST(RtpParametersConversionTest, ToRtpCapabilities) {
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(),