setCodecPreferences: dont insert red codec twice
this could happen if setCodecPreferences is used to prefer
red over opus as it is done for red+opus.
BUG=webrtc:13287
Change-Id: I3d61cd8f1a364572bc531a75dcc239c3919138cc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/237800
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Philipp Hancke <philipp.hancke@googlemail.com>
Cr-Commit-Position: refs/heads/main@{#35344}
diff --git a/pc/media_session.cc b/pc/media_session.cc
index c64924a..426eadc 100644
--- a/pc/media_session.cc
+++ b/pc/media_session.cc
@@ -1084,6 +1084,9 @@
break;
}
} else if (IsRedCodec(codec)) {
+ // For RED, do not insert the codec again if it was already
+ // inserted. audio/red for opus gets enabled by having RED before
+ // the primary codec.
const auto fmtp =
codec.params.find(cricket::kCodecParamNotInNameValueFormat);
if (fmtp != codec.params.end()) {
@@ -1091,7 +1094,10 @@
rtc::split(fmtp->second, '/', &redundant_payloads);
if (redundant_payloads.size() > 0 &&
redundant_payloads[0] == id) {
- filtered_codecs.push_back(codec);
+ if (std::find(filtered_codecs.begin(), filtered_codecs.end(),
+ codec) == filtered_codecs.end()) {
+ filtered_codecs.push_back(codec);
+ }
break;
}
}