| Index: talk/media/webrtc/webrtcmediaengine.cc
|
| diff --git a/talk/media/webrtc/webrtcmediaengine.cc b/talk/media/webrtc/webrtcmediaengine.cc
|
| index cf6a5cf2e59689fbaf877fcf7d69ab41eba78ef3..af202bd6130c79ec544754b91bada11ecdc3215a 100644
|
| --- a/talk/media/webrtc/webrtcmediaengine.cc
|
| +++ b/talk/media/webrtc/webrtcmediaengine.cc
|
| @@ -68,4 +68,44 @@ MediaEngineInterface* WebRtcMediaEngineFactory::Create(
|
| return CreateWebRtcMediaEngine(adm, encoder_factory, decoder_factory);
|
| }
|
|
|
| +const char* kBweExtensionPriorities[] = {
|
| + kRtpTransportSequenceNumberHeaderExtension,
|
| + kRtpAbsoluteSenderTimeHeaderExtension, kRtpTimestampOffsetHeaderExtension};
|
| +
|
| +const size_t kBweExtensionPrioritiesLength =
|
| + ARRAY_SIZE(kBweExtensionPriorities);
|
| +
|
| +int GetPriority(const RtpHeaderExtension& extension,
|
| + const char* extension_prios[],
|
| + size_t extension_prios_length) {
|
| + for (size_t i = 0; i < extension_prios_length; ++i) {
|
| + if (extension.uri == extension_prios[i])
|
| + return static_cast<int>(i);
|
| + }
|
| + return -1;
|
| +}
|
| +
|
| +std::vector<RtpHeaderExtension> FilterRedundantRtpExtensions(
|
| + const std::vector<RtpHeaderExtension>& extensions,
|
| + const char* extension_prios[],
|
| + size_t extension_prios_length) {
|
| + if (extensions.empty())
|
| + return std::vector<RtpHeaderExtension>();
|
| + std::vector<RtpHeaderExtension> filtered;
|
| + std::map<int, const RtpHeaderExtension*> sorted;
|
| + for (auto& extension : extensions) {
|
| + int priority =
|
| + GetPriority(extension, extension_prios, extension_prios_length);
|
| + if (priority == -1) {
|
| + filtered.push_back(extension);
|
| + continue;
|
| + } else {
|
| + sorted[priority] = &extension;
|
| + }
|
| + }
|
| + if (!sorted.empty())
|
| + filtered.push_back(*sorted.begin()->second);
|
| + return filtered;
|
| +}
|
| +
|
| } // namespace cricket
|
|
|