| Index: webrtc/modules/rtp_rtcp/source/rtcp_packet.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc
|
| index cae479e39d8d280edc9f58da652f251ba739f8c0..a67378d2b9eea9a87e5919903c75dbec38f38243 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc
|
| @@ -417,42 +417,6 @@ void CreateXrBlockHeader(uint8_t block_type,
|
| AssignUWord16(buffer, pos, block_length);
|
| }
|
|
|
| -// DLRR Report Block (RFC 3611).
|
| -//
|
| -// 0 1 2 3
|
| -// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
| -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| -// | BT=5 | reserved | block length |
|
| -// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
| -// | SSRC_1 (SSRC of first receiver) | sub-
|
| -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block
|
| -// | last RR (LRR) | 1
|
| -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
| -// | delay since last RR (DLRR) |
|
| -// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|
| -// | SSRC_2 (SSRC of second receiver) | sub-
|
| -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block
|
| -// : ... : 2
|
| -
|
| -void CreateDlrr(const std::vector<Xr::DlrrBlock>& dlrrs,
|
| - uint8_t* buffer,
|
| - size_t* pos) {
|
| - for (std::vector<Xr::DlrrBlock>::const_iterator it = dlrrs.begin();
|
| - it != dlrrs.end(); ++it) {
|
| - if ((*it).empty()) {
|
| - continue;
|
| - }
|
| - uint16_t block_length = 3 * (*it).size();
|
| - CreateXrBlockHeader(kBtDlrr, block_length, buffer, pos);
|
| - for (Xr::DlrrBlock::const_iterator it_block = (*it).begin();
|
| - it_block != (*it).end(); ++it_block) {
|
| - AssignUWord32(buffer, pos, (*it_block).SSRC);
|
| - AssignUWord32(buffer, pos, (*it_block).LastRR);
|
| - AssignUWord32(buffer, pos, (*it_block).DelayLastRR);
|
| - }
|
| - }
|
| -}
|
| -
|
| // VoIP Metrics Report Block (RFC 3611).
|
| //
|
| // 0 1 2 3
|
| @@ -891,7 +855,10 @@ bool Xr::Create(uint8_t* packet,
|
| block.Create(packet + *index);
|
| *index += Rrtr::kLength;
|
| }
|
| - CreateDlrr(dlrr_blocks_, packet, index);
|
| + for (const Dlrr& block : dlrr_blocks_) {
|
| + block.Create(packet + *index);
|
| + *index += block.BlockLength();
|
| + }
|
| CreateVoipMetric(voip_metric_blocks_, packet, index);
|
| return true;
|
| }
|
| @@ -907,12 +874,12 @@ bool Xr::WithRrtr(Rrtr* rrtr) {
|
| }
|
|
|
| bool Xr::WithDlrr(Dlrr* dlrr) {
|
| - assert(dlrr);
|
| + RTC_DCHECK(dlrr);
|
| if (dlrr_blocks_.size() >= kMaxNumberOfDlrrBlocks) {
|
| LOG(LS_WARNING) << "Max DLRR blocks reached.";
|
| return false;
|
| }
|
| - dlrr_blocks_.push_back(dlrr->dlrr_block_);
|
| + dlrr_blocks_.push_back(std::move(*dlrr));
|
| return true;
|
| }
|
|
|
| @@ -927,33 +894,13 @@ bool Xr::WithVoipMetric(VoipMetric* voip_metric) {
|
| }
|
|
|
| size_t Xr::DlrrLength() const {
|
| - const size_t kBlockHeaderLen = 4;
|
| - const size_t kSubBlockLen = 12;
|
| size_t length = 0;
|
| - for (std::vector<DlrrBlock>::const_iterator it = dlrr_blocks_.begin();
|
| - it != dlrr_blocks_.end(); ++it) {
|
| - if (!(*it).empty()) {
|
| - length += kBlockHeaderLen + kSubBlockLen * (*it).size();
|
| - }
|
| + for (const Dlrr& block : dlrr_blocks_) {
|
| + length += block.BlockLength();
|
| }
|
| return length;
|
| }
|
|
|
| -bool Dlrr::WithDlrrItem(uint32_t ssrc,
|
| - uint32_t last_rr,
|
| - uint32_t delay_last_rr) {
|
| - if (dlrr_block_.size() >= kMaxNumberOfDlrrItems) {
|
| - LOG(LS_WARNING) << "Max DLRR items reached.";
|
| - return false;
|
| - }
|
| - RTCPPacketXRDLRRReportBlockItem dlrr;
|
| - dlrr.SSRC = ssrc;
|
| - dlrr.LastRR = last_rr;
|
| - dlrr.DelayLastRR = delay_last_rr;
|
| - dlrr_block_.push_back(dlrr);
|
| - return true;
|
| -}
|
| -
|
| RawPacket::RawPacket(size_t buffer_length)
|
| : buffer_length_(buffer_length), length_(0) {
|
| buffer_.reset(new uint8_t[buffer_length]);
|
|
|