| Index: webrtc/modules/rtp_rtcp/source/flexfec_sender.cc | 
| diff --git a/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc b/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc | 
| index 55e8e5266919bbb978b44e8d5fcd1fff356549c1..ec8bbdcbe9cae9fb3e48f3beb730d3f8e7c335b8 100644 | 
| --- a/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc | 
| +++ b/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc | 
| @@ -38,6 +38,25 @@ const int kMsToRtpTimestamp = kVideoPayloadTypeFrequency / 1000; | 
| // How often to log the generated FEC packets to the text log. | 
| constexpr int64_t kPacketLogIntervalMs = 10000; | 
|  | 
| +RtpHeaderExtensionMap RegisterBweExtensions( | 
| +    const std::vector<RtpExtension>& rtp_header_extensions) { | 
| +  RtpHeaderExtensionMap map; | 
| +  for (const auto& extension : rtp_header_extensions) { | 
| +    if (extension.uri == TransportSequenceNumber::kUri) { | 
| +      map.Register<TransportSequenceNumber>(extension.id); | 
| +    } else if (extension.uri == AbsoluteSendTime::kUri) { | 
| +      map.Register<AbsoluteSendTime>(extension.id); | 
| +    } else if (extension.uri == TransmissionOffset::kUri) { | 
| +      map.Register<TransmissionOffset>(extension.id); | 
| +    } else { | 
| +      LOG(LS_INFO) << "FlexfecSender only supports RTP header extensions for " | 
| +                   << "BWE, so the extension " << extension.ToString() | 
| +                   << " will not be used."; | 
| +    } | 
| +  } | 
| +  return map; | 
| +} | 
| + | 
| }  // namespace | 
|  | 
| FlexfecSender::FlexfecSender( | 
| @@ -57,7 +76,7 @@ FlexfecSender::FlexfecSender( | 
| protected_media_ssrc_(protected_media_ssrc), | 
| seq_num_(random_.Rand(1, kMaxInitRtpSeqNumber)), | 
| ulpfec_generator_(ForwardErrorCorrection::CreateFlexfec()), | 
| -      rtp_header_extension_map_() { | 
| +      rtp_header_extension_map_(RegisterBweExtensions(rtp_header_extensions)) { | 
| // This object should not have been instantiated if FlexFEC is disabled. | 
| RTC_DCHECK_GE(payload_type, 0); | 
| RTC_DCHECK_LE(payload_type, 127); | 
| @@ -65,24 +84,6 @@ FlexfecSender::FlexfecSender( | 
| // It's OK to create this object on a different thread/task queue than | 
| // the one used during main operation. | 
| sequence_checker_.Detach(); | 
| - | 
| -  // Register RTP header extensions for BWE. | 
| -  for (const auto& extension : rtp_header_extensions) { | 
| -    if (extension.uri == RtpExtension::kTransportSequenceNumberUri) { | 
| -      rtp_header_extension_map_.Register(kRtpExtensionTransportSequenceNumber, | 
| -                                         extension.id); | 
| -    } else if (extension.uri == RtpExtension::kAbsSendTimeUri) { | 
| -      rtp_header_extension_map_.Register(kRtpExtensionAbsoluteSendTime, | 
| -                                         extension.id); | 
| -    } else if (extension.uri == RtpExtension::kTimestampOffsetUri) { | 
| -      rtp_header_extension_map_.Register(kRtpExtensionTransmissionTimeOffset, | 
| -                                         extension.id); | 
| -    } else { | 
| -      LOG(LS_WARNING) << "RTP header extension with id: " << extension.id | 
| -                      << ", uri: " << extension.uri | 
| -                      << ", is unsupported by FlexfecSender."; | 
| -    } | 
| -  } | 
| } | 
|  | 
| FlexfecSender::~FlexfecSender() = default; | 
| @@ -158,8 +159,10 @@ FlexfecSender::GetFecPackets() { | 
| return fec_packets_to_send; | 
| } | 
|  | 
| +// The overhead is BWE RTP header extensions and FlexFEC header. | 
| size_t FlexfecSender::MaxPacketOverhead() const { | 
| -  return kFlexfecMaxHeaderSize; | 
| +  return rtp_header_extension_map_.GetTotalLengthInBytes() + | 
| +         kFlexfecMaxHeaderSize; | 
| } | 
|  | 
| }  // namespace webrtc | 
|  |