/* * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_MODULES_RTP_RTCP_SOURCE_PACKET_LOSS_STATS_H_ #define WEBRTC_MODULES_RTP_RTCP_SOURCE_PACKET_LOSS_STATS_H_ #include #include namespace webrtc { // Keeps track of statistics of packet loss including whether losses are a // single packet or multiple packets in a row. class PacketLossStats { public: PacketLossStats(); ~PacketLossStats() {} // Adds a lost packet to the stats by sequence number. void AddLostPacket(uint16_t sequence_number); // Queries the number of packets that were lost by themselves, no neighboring // packets were lost. int GetSingleLossCount() const; // Queries the number of times that multiple packets with sequential numbers // were lost. This is the number of events with more than one packet lost, // regardless of the size of the event; int GetMultipleLossEventCount() const; // Queries the number of packets lost in multiple packet loss events. Combined // with the event count, this can be used to determine the average event size. int GetMultipleLossPacketCount() const; private: std::set lost_packets_buffer_; std::set lost_packets_wrapped_buffer_; int single_loss_historic_count_; int multiple_loss_historic_event_count_; int multiple_loss_historic_packet_count_; void ComputeLossCounts(int* out_single_loss_count, int* out_multiple_loss_event_count, int* out_multiple_loss_packet_count) const; void PruneBuffer(); }; } // namespace webrtc #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_PACKET_LOSS_STATS_H_