/* * Copyright (c) 2014 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 VIDEO_REPORT_BLOCK_STATS_H_ #define VIDEO_REPORT_BLOCK_STATS_H_ #include #include #include "modules/rtp_rtcp/include/rtcp_statistics.h" namespace webrtc { // TODO(nisse): Usefulness of this class is somewhat unclear. The inputs are // cumulative counters, from which we compute deltas, and then accumulate the // deltas. May be needed on the send side, to handle wraparound in the short // counters received over RTCP, but should not be needed on the receive side // where we can use large enough types for all counters we need. // Helper class for rtcp statistics. class ReportBlockStats { public: ReportBlockStats(); ~ReportBlockStats(); // Updates stats and stores report block. void Store(uint32_t ssrc, const RtcpStatistics& rtcp_stats); // Returns the total fraction of lost packets (or -1 if less than two report // blocks have been stored). int FractionLostInPercent() const; private: // The information from an RTCP report block that we need. struct Report { uint32_t extended_highest_sequence_number; int32_t packets_lost; }; // Updates the total number of packets/lost packets. // Stores the report. void StoreAndAddPacketIncrement(uint32_t ssrc, const Report& report); // The total number of packets/lost packets. uint32_t num_sequence_numbers_; uint32_t num_lost_sequence_numbers_; // Map holding the last stored report (mapped by the source SSRC). std::map prev_reports_; }; } // namespace webrtc #endif // VIDEO_REPORT_BLOCK_STATS_H_