diff options
Diffstat (limited to 'voice_engine/channel.cc')
-rw-r--r-- | voice_engine/channel.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/voice_engine/channel.cc b/voice_engine/channel.cc index 9e616a35..37016ced 100644 --- a/voice_engine/channel.cc +++ b/voice_engine/channel.cc @@ -2107,11 +2107,11 @@ int32_t Channel::ReceivedRTPPacket(const int8_t* data, int32_t length) { rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType); if (header.payload_type_frequency < 0) return -1; + bool in_order = IsPacketInOrder(header); rtp_receive_statistics_->IncomingPacket(header, length, - IsPacketRetransmitted(header)); + IsPacketRetransmitted(header, in_order)); rtp_payload_registry_->SetIncomingPayloadType(header); - return ReceivePacket(received_packet, length, header, - IsPacketInOrder(header)) ? 0 : -1; + return ReceivePacket(received_packet, length, header, in_order) ? 0 : -1; } bool Channel::ReceivePacket(const uint8_t* packet, @@ -2171,7 +2171,8 @@ bool Channel::IsPacketInOrder(const RTPHeader& header) const { return statistician->IsPacketInOrder(header.sequenceNumber); } -bool Channel::IsPacketRetransmitted(const RTPHeader& header) const { +bool Channel::IsPacketRetransmitted(const RTPHeader& header, + bool in_order) const { // Retransmissions are handled separately if RTX is enabled. if (rtp_payload_registry_->RtxEnabled()) return false; @@ -2182,7 +2183,7 @@ bool Channel::IsPacketRetransmitted(const RTPHeader& header) const { // Check if this is a retransmission. uint16_t min_rtt = 0; _rtpRtcpModule->RTT(rtp_receiver_->SSRC(), NULL, NULL, &min_rtt, NULL); - return !IsPacketInOrder(header) && + return !in_order && statistician->IsRetransmitOfOldPacket(header, min_rtt); } |