| Index: webrtc/video/rtp_stream_receiver.cc
 | 
| diff --git a/webrtc/video/rtp_stream_receiver.cc b/webrtc/video/rtp_stream_receiver.cc
 | 
| index 90dd0da0e1cda44c4e130aa6ef55fef9303f7b9b..f3ec6e5c2112e60f8bae6e15ba745dd16f9a2b8e 100644
 | 
| --- a/webrtc/video/rtp_stream_receiver.cc
 | 
| +++ b/webrtc/video/rtp_stream_receiver.cc
 | 
| @@ -97,7 +97,7 @@ RtpStreamReceiver::RtpStreamReceiver(
 | 
|        remb_(remb),
 | 
|        process_thread_(process_thread),
 | 
|        ntp_estimator_(clock_),
 | 
| -      rtp_header_parser_(RtpHeaderParser::Create()),
 | 
| +      rtp_header_extensions_(config_.rtp.extensions),
 | 
|        rtp_receiver_(RtpReceiver::CreateVideoReceiver(clock_,
 | 
|                                                       this,
 | 
|                                                       this,
 | 
| @@ -135,11 +135,6 @@ RtpStreamReceiver::RtpStreamReceiver(
 | 
|      remb_->AddReceiveChannel(rtp_rtcp_.get());
 | 
|    }
 | 
|  
 | 
| -  for (size_t i = 0; i < config_.rtp.extensions.size(); ++i) {
 | 
| -    EnableReceiveRtpHeaderExtension(config_.rtp.extensions[i].uri,
 | 
| -                                    config_.rtp.extensions[i].id);
 | 
| -  }
 | 
| -
 | 
|    static const int kMaxPacketAgeToNack = 450;
 | 
|    const int max_reordering_threshold = (config_.rtp.nack.rtp_history_ms > 0)
 | 
|                                             ? kMaxPacketAgeToNack
 | 
| @@ -288,11 +283,14 @@ int32_t RtpStreamReceiver::OnReceivedPayloadData(
 | 
|  
 | 
|  bool RtpStreamReceiver::OnRecoveredPacket(const uint8_t* rtp_packet,
 | 
|                                            size_t rtp_packet_length) {
 | 
| -  RTPHeader header;
 | 
| -  if (!rtp_header_parser_->Parse(rtp_packet, rtp_packet_length, &header)) {
 | 
| +  RtpPacketReceived packet;
 | 
| +  if (!packet.Parse(rtp_packet, rtp_packet_length))
 | 
|      return false;
 | 
| -  }
 | 
| -  header.payload_type_frequency = kVideoPayloadTypeFrequency;
 | 
| +  packet.IdentifyExtensions(rtp_header_extensions_);
 | 
| +  packet.set_payload_type_frequency(kVideoPayloadTypeFrequency);
 | 
| +
 | 
| +  RTPHeader header;
 | 
| +  packet.GetHeader(&header);
 | 
|    bool in_order = IsPacketInOrder(header);
 | 
|    return ReceivePacket(rtp_packet, rtp_packet_length, header, in_order);
 | 
|  }
 | 
| @@ -313,32 +311,34 @@ void RtpStreamReceiver::OnIncomingSSRCChanged(const uint32_t ssrc) {
 | 
|    rtp_rtcp_->SetRemoteSSRC(ssrc);
 | 
|  }
 | 
|  
 | 
| -void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) {
 | 
| +bool RtpStreamReceiver::OnRtpPacketReceive(RtpPacketReceived* packet) {
 | 
|    {
 | 
|      rtc::CritScope lock(&receive_cs_);
 | 
|      if (!receiving_) {
 | 
| -      return;
 | 
| +      return false;
 | 
|      }
 | 
|    }
 | 
|  
 | 
|    int64_t now_ms = clock_->TimeInMilliseconds();
 | 
| +  packet->IdentifyExtensions(rtp_header_extensions_);
 | 
| +  packet->set_payload_type_frequency(kVideoPayloadTypeFrequency);
 | 
|  
 | 
|    {
 | 
|      // Periodically log the RTP header of incoming packets.
 | 
|      rtc::CritScope lock(&receive_cs_);
 | 
|      if (now_ms - last_packet_log_ms_ > kPacketLogIntervalMs) {
 | 
|        std::stringstream ss;
 | 
| -      ss << "Packet received on SSRC: " << packet.Ssrc()
 | 
| -         << " with payload type: " << static_cast<int>(packet.PayloadType())
 | 
| -         << ", timestamp: " << packet.Timestamp()
 | 
| -         << ", sequence number: " << packet.SequenceNumber()
 | 
| -         << ", arrival time: " << packet.arrival_time_ms();
 | 
| +      ss << "Packet received on SSRC: " << packet->Ssrc()
 | 
| +         << " with payload type: " << static_cast<int>(packet->PayloadType())
 | 
| +         << ", timestamp: " << packet->Timestamp()
 | 
| +         << ", sequence number: " << packet->SequenceNumber()
 | 
| +         << ", arrival time: " << packet->arrival_time_ms();
 | 
|        int32_t time_offset;
 | 
| -      if (packet.GetExtension<TransmissionOffset>(&time_offset)) {
 | 
| +      if (packet->GetExtension<TransmissionOffset>(&time_offset)) {
 | 
|          ss << ", toffset: " << time_offset;
 | 
|        }
 | 
|        uint32_t send_time;
 | 
| -      if (packet.GetExtension<AbsoluteSendTime>(&send_time)) {
 | 
| +      if (packet->GetExtension<AbsoluteSendTime>(&send_time)) {
 | 
|          ss << ", abs send time: " << send_time;
 | 
|        }
 | 
|        LOG(LS_INFO) << ss.str();
 | 
| @@ -349,18 +349,18 @@ void RtpStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) {
 | 
|    // TODO(nisse): Delete use of GetHeader, but needs refactoring of
 | 
|    // ReceivePacket and IncomingPacket methods below.
 | 
|    RTPHeader header;
 | 
| -  packet.GetHeader(&header);
 | 
| -
 | 
| -  header.payload_type_frequency = kVideoPayloadTypeFrequency;
 | 
| +  packet->GetHeader(&header);
 | 
|  
 | 
|    bool in_order = IsPacketInOrder(header);
 | 
|    rtp_payload_registry_.SetIncomingPayloadType(header);
 | 
| -  ReceivePacket(packet.data(), packet.size(), header, in_order);
 | 
| +  ReceivePacket(packet->data(), packet->size(), header, in_order);
 | 
|    // Update receive statistics after ReceivePacket.
 | 
|    // Receive statistics will be reset if the payload type changes (make sure
 | 
|    // that the first packet is included in the stats).
 | 
|    rtp_receive_statistics_->IncomingPacket(
 | 
| -      header, packet.size(), IsPacketRetransmitted(header, in_order));
 | 
| +      header, packet->size(), IsPacketRetransmitted(header, in_order));
 | 
| +
 | 
| +  return true;
 | 
|  }
 | 
|  
 | 
|  int32_t RtpStreamReceiver::RequestKeyFrame() {
 | 
| @@ -630,16 +630,6 @@ void RtpStreamReceiver::UpdateHistograms() {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| -void RtpStreamReceiver::EnableReceiveRtpHeaderExtension(
 | 
| -    const std::string& extension, int id) {
 | 
| -  // One-byte-extension local identifiers are in the range 1-14 inclusive.
 | 
| -  RTC_DCHECK_GE(id, 1);
 | 
| -  RTC_DCHECK_LE(id, 14);
 | 
| -  RTC_DCHECK(RtpExtension::IsSupportedForVideo(extension));
 | 
| -  RTC_CHECK(rtp_header_parser_->RegisterRtpHeaderExtension(
 | 
| -      StringToRtpExtensionType(extension), id));
 | 
| -}
 | 
| -
 | 
|  void RtpStreamReceiver::InsertSpsPpsIntoTracker(uint8_t payload_type) {
 | 
|    auto codec_params_it = pt_codec_params_.find(payload_type);
 | 
|    if (codec_params_it == pt_codec_params_.end())
 | 
| 
 |