Index: webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h |
index 7b6c54452f8972df55631459761fc87a46384984..c433477707a57f6100c650ff01e3ec54d5dcacb3 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h |
@@ -14,6 +14,7 @@ |
#include <vector> |
#include "webrtc/base/constructormagic.h" |
+#include "webrtc/base/optional.h" |
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" |
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.h" |
#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/rrtr.h" |
@@ -36,16 +37,15 @@ class ExtendedReports : public RtcpPacket { |
void SetSenderSsrc(uint32_t ssrc) { sender_ssrc_ = ssrc; } |
- // Max 50 items of each of {Rrtr, Dlrr, VoipMetric} allowed per Xr. |
- bool AddRrtr(const Rrtr& rrtr); |
- bool AddDlrr(const Dlrr& dlrr); |
- bool AddVoipMetric(const VoipMetric& voip_metric); |
+ void SetRrtr(const Rrtr& rrtr); |
+ void AddDlrrItem(const ReceiveTimeInfo& time_info); |
+ void SetVoipMetric(const VoipMetric& voip_metric); |
uint32_t sender_ssrc() const { return sender_ssrc_; } |
- const std::vector<Rrtr>& rrtrs() const { return rrtr_blocks_; } |
- const std::vector<Dlrr>& dlrrs() const { return dlrr_blocks_; } |
- const std::vector<VoipMetric>& voip_metrics() const { |
- return voip_metric_blocks_; |
+ const rtc::Optional<Rrtr>& rrtr() const { return rrtr_block_; } |
+ const Dlrr& dlrr() const { return dlrr_block_; } |
+ const rtc::Optional<VoipMetric>& voip_metric() const { |
+ return voip_metric_block_; |
} |
protected: |
@@ -55,9 +55,6 @@ class ExtendedReports : public RtcpPacket { |
RtcpPacket::PacketReadyCallback* callback) const override; |
private: |
- static const size_t kMaxNumberOfRrtrBlocks = 50; |
- static const size_t kMaxNumberOfDlrrBlocks = 50; |
- static const size_t kMaxNumberOfVoipMetricBlocks = 50; |
static constexpr size_t kXrBaseLength = 4; |
size_t BlockLength() const override { |
@@ -65,10 +62,10 @@ class ExtendedReports : public RtcpPacket { |
VoipMetricLength(); |
} |
- size_t RrtrLength() const { return Rrtr::kLength * rrtr_blocks_.size(); } |
- size_t DlrrLength() const; |
+ size_t RrtrLength() const { return rrtr_block_ ? Rrtr::kLength : 0; } |
+ size_t DlrrLength() const { return dlrr_block_.BlockLength(); } |
size_t VoipMetricLength() const { |
- return VoipMetric::kLength * voip_metric_blocks_.size(); |
+ return voip_metric_block_ ? VoipMetric::kLength : 0; |
} |
void ParseRrtrBlock(const uint8_t* block, uint16_t block_length); |
@@ -76,9 +73,9 @@ class ExtendedReports : public RtcpPacket { |
void ParseVoipMetricBlock(const uint8_t* block, uint16_t block_length); |
uint32_t sender_ssrc_; |
- std::vector<Rrtr> rrtr_blocks_; |
- std::vector<Dlrr> dlrr_blocks_; |
- std::vector<VoipMetric> voip_metric_blocks_; |
+ rtc::Optional<Rrtr> rrtr_block_; |
+ Dlrr dlrr_block_; // Dlrr without items treated same as no dlrr block. |
+ rtc::Optional<VoipMetric> voip_metric_block_; |
RTC_DISALLOW_COPY_AND_ASSIGN(ExtendedReports); |
}; |