diff options
author | Dan Minor <dminor@mozilla.com> | 2018-01-26 11:46:51 -0500 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-03-14 10:51:46 +0100 |
commit | abf6ecee9f61e079ca93f2cb4bbdbed65688f048 (patch) | |
tree | d4b7d12f4673f99e46704ea6204c6450dac7db71 /media/webrtc | |
parent | a8f45aba816b7b5e1bd2bbdb663bdf5f044e2f5d (diff) | |
download | UXP-abf6ecee9f61e079ca93f2cb4bbdbed65688f048.tar UXP-abf6ecee9f61e079ca93f2cb4bbdbed65688f048.tar.gz UXP-abf6ecee9f61e079ca93f2cb4bbdbed65688f048.tar.lz UXP-abf6ecee9f61e079ca93f2cb4bbdbed65688f048.tar.xz UXP-abf6ecee9f61e079ca93f2cb4bbdbed65688f048.zip |
Bug 1433005 - Simplify codec pruning in NegotiateCodecs. r=bwc, a=lizzard
--HG--
extra : source : 90ae99509f1e9cb5bdf19350a5fbb1a02d34ff0a
Diffstat (limited to 'media/webrtc')
-rw-r--r-- | media/webrtc/signaling/src/jsep/JsepTrack.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/media/webrtc/signaling/src/jsep/JsepTrack.cpp b/media/webrtc/signaling/src/jsep/JsepTrack.cpp index 1b045d8ec..cf5df96bf 100644 --- a/media/webrtc/signaling/src/jsep/JsepTrack.cpp +++ b/media/webrtc/signaling/src/jsep/JsepTrack.cpp @@ -410,21 +410,26 @@ JsepTrack::NegotiateCodecs( // TODO(bug 814227): Remove this once we're ready to put multiple codecs in an // answer. For now, remove all but the first codec unless the red codec - // exists, and then we include the others per RFC 5109, section 14.2. - // Note: now allows keeping the telephone-event codec, if it appears, as the - // last codec in the list. + // exists, in which case we include the others per RFC 5109, section 14.2. if (!codecs->empty() && !red) { - int newSize = dtmf ? 2 : 1; - for (size_t i = 1; i < codecs->size(); ++i) { - if (!dtmf || dtmf != (*codecs)[i]) { - delete (*codecs)[i]; - (*codecs)[i] = nullptr; + std::vector<JsepCodecDescription*> codecsToKeep; + + bool foundPreferredCodec = false; + for (auto codec: *codecs) { + if (codec == dtmf) { + codecsToKeep.push_back(codec); + // TODO: keep ulpfec when we enable it in Bug 875922 + // } else if (codec == ulpfec) { + // codecsToKeep.push_back(codec); + } else if (!foundPreferredCodec) { + codecsToKeep.insert(codecsToKeep.begin(), codec); + foundPreferredCodec = true; + } else { + delete codec; } } - if (dtmf) { - (*codecs)[newSize-1] = dtmf; - } - codecs->resize(newSize); + + *codecs = codecsToKeep; } } |