Remove StreamStatistician::IsPacketInOrder
this function is now only used in combination with StreamStatistician::IsRetransmitOfOldPacket but IsRetransmitOfOldPacket internally checks if packet is in_order, thus making extra check unnecessary In addition to making code simpler, removing this checks avoids taking two extra CritSection on common code path of incoming rtp packet. Bug: webrtc:8016 Change-Id: I050004e256b5698ce700e3416aa86b55f446a270 Reviewed-on: https://webrtc-review.googlesource.com/85361 Reviewed-by: Niels Moller <nisse@webrtc.org> Reviewed-by: Erik Språng <sprang@webrtc.org> Reviewed-by: Fredrik Solenberg <solenberg@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/master@{#23762}
This commit is contained in:

committed by
Commit Bot

parent
968b1dd0d7
commit
64b17c2aca
@ -872,9 +872,8 @@ void Channel::OnRtpPacket(const RtpPacketReceived& packet) {
|
|||||||
header.payload_type_frequency =
|
header.payload_type_frequency =
|
||||||
rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType);
|
rtp_payload_registry_->GetPayloadTypeFrequency(header.payloadType);
|
||||||
if (header.payload_type_frequency >= 0) {
|
if (header.payload_type_frequency >= 0) {
|
||||||
bool in_order = IsPacketInOrder(header);
|
rtp_receive_statistics_->IncomingPacket(header, packet.size(),
|
||||||
rtp_receive_statistics_->IncomingPacket(
|
IsPacketRetransmitted(header));
|
||||||
header, packet.size(), IsPacketRetransmitted(header, in_order));
|
|
||||||
|
|
||||||
ReceivePacket(packet.data(), packet.size(), header);
|
ReceivePacket(packet.data(), packet.size(), header);
|
||||||
}
|
}
|
||||||
@ -895,22 +894,13 @@ bool Channel::ReceivePacket(const uint8_t* packet,
|
|||||||
pl->typeSpecific);
|
pl->typeSpecific);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Channel::IsPacketInOrder(const RTPHeader& header) const {
|
bool Channel::IsPacketRetransmitted(const RTPHeader& header) const {
|
||||||
StreamStatistician* statistician =
|
|
||||||
rtp_receive_statistics_->GetStatistician(header.ssrc);
|
|
||||||
if (!statistician)
|
|
||||||
return false;
|
|
||||||
return statistician->IsPacketInOrder(header.sequenceNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Channel::IsPacketRetransmitted(const RTPHeader& header,
|
|
||||||
bool in_order) const {
|
|
||||||
StreamStatistician* statistician =
|
StreamStatistician* statistician =
|
||||||
rtp_receive_statistics_->GetStatistician(header.ssrc);
|
rtp_receive_statistics_->GetStatistician(header.ssrc);
|
||||||
if (!statistician)
|
if (!statistician)
|
||||||
return false;
|
return false;
|
||||||
// Check if this is a retransmission.
|
// Check if this is a retransmission.
|
||||||
return !in_order && statistician->IsRetransmitOfOldPacket(header);
|
return statistician->IsRetransmitOfOldPacket(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t Channel::ReceivedRTCPPacket(const uint8_t* data, size_t length) {
|
int32_t Channel::ReceivedRTCPPacket(const uint8_t* data, size_t length) {
|
||||||
|
@ -314,8 +314,7 @@ class Channel
|
|||||||
bool ReceivePacket(const uint8_t* packet,
|
bool ReceivePacket(const uint8_t* packet,
|
||||||
size_t packet_length,
|
size_t packet_length,
|
||||||
const RTPHeader& header);
|
const RTPHeader& header);
|
||||||
bool IsPacketInOrder(const RTPHeader& header) const;
|
bool IsPacketRetransmitted(const RTPHeader& header) const;
|
||||||
bool IsPacketRetransmitted(const RTPHeader& header, bool in_order) const;
|
|
||||||
int ResendPackets(const uint16_t* sequence_numbers, int length);
|
int ResendPackets(const uint16_t* sequence_numbers, int length);
|
||||||
void UpdatePlayoutTimestamp(bool rtcp);
|
void UpdatePlayoutTimestamp(bool rtcp);
|
||||||
|
|
||||||
|
@ -60,9 +60,6 @@ class StreamStatistician {
|
|||||||
// Returns true if the packet with RTP header |header| is likely to be a
|
// Returns true if the packet with RTP header |header| is likely to be a
|
||||||
// retransmitted packet, false otherwise.
|
// retransmitted packet, false otherwise.
|
||||||
virtual bool IsRetransmitOfOldPacket(const RTPHeader& header) const = 0;
|
virtual bool IsRetransmitOfOldPacket(const RTPHeader& header) const = 0;
|
||||||
|
|
||||||
// Returns true if |sequence_number| is received in order, false otherwise.
|
|
||||||
virtual bool IsPacketInOrder(uint16_t sequence_number) const = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ReceiveStatistics : public ReceiveStatisticsProvider {
|
class ReceiveStatistics : public ReceiveStatisticsProvider {
|
||||||
|
@ -310,11 +310,6 @@ bool StreamStatisticianImpl::IsRetransmitOfOldPacket(
|
|||||||
return time_diff_ms > rtp_time_stamp_diff_ms + max_delay_ms;
|
return time_diff_ms > rtp_time_stamp_diff_ms + max_delay_ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool StreamStatisticianImpl::IsPacketInOrder(uint16_t sequence_number) const {
|
|
||||||
rtc::CritScope cs(&stream_lock_);
|
|
||||||
return InOrderPacketInternal(sequence_number);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool StreamStatisticianImpl::InOrderPacketInternal(
|
bool StreamStatisticianImpl::InOrderPacketInternal(
|
||||||
uint16_t sequence_number) const {
|
uint16_t sequence_number) const {
|
||||||
// First packet is always in order.
|
// First packet is always in order.
|
||||||
|
@ -42,7 +42,6 @@ class StreamStatisticianImpl : public StreamStatistician {
|
|||||||
StreamDataCounters* data_counters) const override;
|
StreamDataCounters* data_counters) const override;
|
||||||
uint32_t BitrateReceived() const override;
|
uint32_t BitrateReceived() const override;
|
||||||
bool IsRetransmitOfOldPacket(const RTPHeader& header) const override;
|
bool IsRetransmitOfOldPacket(const RTPHeader& header) const override;
|
||||||
bool IsPacketInOrder(uint16_t sequence_number) const override;
|
|
||||||
|
|
||||||
void IncomingPacket(const RTPHeader& rtp_header,
|
void IncomingPacket(const RTPHeader& rtp_header,
|
||||||
size_t packet_length,
|
size_t packet_length,
|
||||||
|
@ -286,8 +286,6 @@ void RtpVideoStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) {
|
|||||||
|
|
||||||
header.payload_type_frequency = kVideoPayloadTypeFrequency;
|
header.payload_type_frequency = kVideoPayloadTypeFrequency;
|
||||||
|
|
||||||
bool in_order = IsPacketInOrder(header);
|
|
||||||
|
|
||||||
ReceivePacket(packet.data(), packet.size(), header);
|
ReceivePacket(packet.data(), packet.size(), header);
|
||||||
// Update receive statistics after ReceivePacket.
|
// Update receive statistics after ReceivePacket.
|
||||||
// Receive statistics will be reset if the payload type changes (make sure
|
// Receive statistics will be reset if the payload type changes (make sure
|
||||||
@ -295,8 +293,8 @@ void RtpVideoStreamReceiver::OnRtpPacket(const RtpPacketReceived& packet) {
|
|||||||
if (!packet.recovered()) {
|
if (!packet.recovered()) {
|
||||||
// TODO(nisse): We should pass a recovered flag to stats, to aid
|
// TODO(nisse): We should pass a recovered flag to stats, to aid
|
||||||
// fixing bug bugs.webrtc.org/6339.
|
// fixing bug bugs.webrtc.org/6339.
|
||||||
rtp_receive_statistics_->IncomingPacket(
|
rtp_receive_statistics_->IncomingPacket(header, packet.size(),
|
||||||
header, packet.size(), IsPacketRetransmitted(header, in_order));
|
IsPacketRetransmitted(header));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (RtpPacketSinkInterface* secondary_sink : secondary_sinks_) {
|
for (RtpPacketSinkInterface* secondary_sink : secondary_sinks_) {
|
||||||
@ -528,16 +526,8 @@ void RtpVideoStreamReceiver::StopReceive() {
|
|||||||
receiving_ = false;
|
receiving_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RtpVideoStreamReceiver::IsPacketInOrder(const RTPHeader& header) const {
|
bool RtpVideoStreamReceiver::IsPacketRetransmitted(
|
||||||
StreamStatistician* statistician =
|
const RTPHeader& header) const {
|
||||||
rtp_receive_statistics_->GetStatistician(header.ssrc);
|
|
||||||
if (!statistician)
|
|
||||||
return false;
|
|
||||||
return statistician->IsPacketInOrder(header.sequenceNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RtpVideoStreamReceiver::IsPacketRetransmitted(const RTPHeader& header,
|
|
||||||
bool in_order) const {
|
|
||||||
// Retransmissions are handled separately if RTX is enabled.
|
// Retransmissions are handled separately if RTX is enabled.
|
||||||
if (config_.rtp.rtx_ssrc != 0)
|
if (config_.rtp.rtx_ssrc != 0)
|
||||||
return false;
|
return false;
|
||||||
@ -545,7 +535,7 @@ bool RtpVideoStreamReceiver::IsPacketRetransmitted(const RTPHeader& header,
|
|||||||
rtp_receive_statistics_->GetStatistician(header.ssrc);
|
rtp_receive_statistics_->GetStatistician(header.ssrc);
|
||||||
if (!statistician)
|
if (!statistician)
|
||||||
return false;
|
return false;
|
||||||
return !in_order && statistician->IsRetransmitOfOldPacket(header);
|
return statistician->IsRetransmitOfOldPacket(header);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RtpVideoStreamReceiver::UpdateHistograms() {
|
void RtpVideoStreamReceiver::UpdateHistograms() {
|
||||||
|
@ -150,8 +150,7 @@ class RtpVideoStreamReceiver : public RtpData,
|
|||||||
const RTPHeader& header);
|
const RTPHeader& header);
|
||||||
void NotifyReceiverOfEmptyPacket(uint16_t seq_num);
|
void NotifyReceiverOfEmptyPacket(uint16_t seq_num);
|
||||||
void NotifyReceiverOfFecPacket(const RTPHeader& header);
|
void NotifyReceiverOfFecPacket(const RTPHeader& header);
|
||||||
bool IsPacketInOrder(const RTPHeader& header) const;
|
bool IsPacketRetransmitted(const RTPHeader& header) const;
|
||||||
bool IsPacketRetransmitted(const RTPHeader& header, bool in_order) const;
|
|
||||||
void UpdateHistograms();
|
void UpdateHistograms();
|
||||||
bool IsRedEnabled() const;
|
bool IsRedEnabled() const;
|
||||||
void InsertSpsPpsIntoTracker(uint8_t payload_type);
|
void InsertSpsPpsIntoTracker(uint8_t payload_type);
|
||||||
|
Reference in New Issue
Block a user