| Index: webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc | 
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc b/webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc | 
| index e1d6d4852c923ab1ca118297af5650c7e2efdfcd..0b1de6d5889cee1659b0e74c6531840f33f7454b 100644 | 
| --- a/webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc | 
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_packet_history.cc | 
| @@ -16,6 +16,7 @@ | 
| #include <limits> | 
| #include <set> | 
|  | 
| +#include "webrtc/base/checks.h" | 
| #include "webrtc/modules/rtp_rtcp/source/rtp_utility.h" | 
| #include "webrtc/system_wrappers/interface/critical_section_wrapper.h" | 
| #include "webrtc/system_wrappers/interface/logging.h" | 
| @@ -118,6 +119,7 @@ int32_t RTPPacketHistory::PutRTPPacket(const uint8_t* packet, | 
| (capture_time_ms > 0) ? capture_time_ms : clock_->TimeInMilliseconds(); | 
| stored_packets_[prev_index_].send_time = 0;  // Packet not sent. | 
| stored_packets_[prev_index_].storage_type = type; | 
| +  stored_packets_[prev_index_].has_been_retransmitted = false; | 
|  | 
| ++prev_index_; | 
| if (prev_index_ >= stored_packets_.size()) { | 
| @@ -173,10 +175,9 @@ bool RTPPacketHistory::GetPacketAndSetSendTime(uint16_t sequence_number, | 
| size_t* packet_length, | 
| int64_t* stored_time_ms) { | 
| CriticalSectionScoped cs(critsect_.get()); | 
| -  assert(*packet_length >= IP_PACKET_SIZE); | 
| -  if (!store_) { | 
| +  RTC_CHECK_GE(*packet_length, static_cast<size_t>(IP_PACKET_SIZE)); | 
| +  if (!store_) | 
| return false; | 
| -  } | 
|  | 
| int32_t index = 0; | 
| bool found = FindSeqNum(sequence_number, &index); | 
| @@ -193,17 +194,22 @@ bool RTPPacketHistory::GetPacketAndSetSendTime(uint16_t sequence_number, | 
| return false; | 
| } | 
|  | 
| -  // Verify elapsed time since last retrieve. | 
| +  // Verify elapsed time since last retrieve, but only for retransmissions and | 
| +  // always send packet upon first retransmission request. | 
| int64_t now = clock_->TimeInMilliseconds(); | 
| -  if (min_elapsed_time_ms > 0 && | 
| +  if (min_elapsed_time_ms > 0 && retransmit && | 
| +      stored_packets_[index].has_been_retransmitted && | 
| ((now - stored_packets_[index].send_time) < min_elapsed_time_ms)) { | 
| return false; | 
| } | 
|  | 
| -  if (retransmit && stored_packets_[index].storage_type == kDontRetransmit) { | 
| -    // No bytes copied since this packet shouldn't be retransmitted or is | 
| -    // of zero size. | 
| -    return false; | 
| +  if (retransmit) { | 
| +    if (stored_packets_[index].storage_type == kDontRetransmit) { | 
| +      // No bytes copied since this packet shouldn't be retransmitted or is | 
| +      // of zero size. | 
| +      return false; | 
| +    } | 
| +    stored_packets_[index].has_been_retransmitted = true; | 
| } | 
| stored_packets_[index].send_time = clock_->TimeInMilliseconds(); | 
| GetPacket(index, packet, packet_length, stored_time_ms); | 
|  |