From a5eba6c98b0f524f69fba2a3cdb6676bbfcd3723 Mon Sep 17 00:00:00 2001 From: Danil Chapovalov Date: Fri, 15 Jan 2016 12:40:15 +0100 Subject: [PATCH] [rtp_rtcp] rtcp::Remb moved into own file Cleaning/Parsing will be done in the https://codereview.webrtc.org/1552773002/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BUG=webrtc:5260 R=asapersson@webrtc.org, åsapersson Review URL: https://codereview.webrtc.org/1590883002 . Cr-Commit-Position: refs/heads/master@{#11268} --- webrtc/modules/modules.gyp | 1 + webrtc/modules/rtp_rtcp/BUILD.gn | 2 + webrtc/modules/rtp_rtcp/rtp_rtcp.gypi | 2 + webrtc/modules/rtp_rtcp/source/rtcp_packet.cc | 84 ------------- webrtc/modules/rtp_rtcp/source/rtcp_packet.h | 56 --------- .../rtp_rtcp/source/rtcp_packet/remb.cc | 117 ++++++++++++++++++ .../rtp_rtcp/source/rtcp_packet/remb.h | 60 +++++++++ .../source/rtcp_packet/remb_unittest.cc | 46 +++++++ .../rtp_rtcp/source/rtcp_packet_unittest.cc | 21 ---- .../rtp_rtcp/source/rtcp_receiver_unittest.cc | 1 + webrtc/modules/rtp_rtcp/source/rtcp_sender.cc | 1 + 11 files changed, 230 insertions(+), 161 deletions(-) create mode 100644 webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc create mode 100644 webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h create mode 100644 webrtc/modules/rtp_rtcp/source/rtcp_packet/remb_unittest.cc diff --git a/webrtc/modules/modules.gyp b/webrtc/modules/modules.gyp index a7dc0ffe53..9995447eef 100644 --- a/webrtc/modules/modules.gyp +++ b/webrtc/modules/modules.gyp @@ -313,6 +313,7 @@ 'rtp_rtcp/source/rtcp_packet/nack_unittest.cc', 'rtp_rtcp/source/rtcp_packet/pli_unittest.cc', 'rtp_rtcp/source/rtcp_packet/receiver_report_unittest.cc', + 'rtp_rtcp/source/rtcp_packet/remb_unittest.cc', 'rtp_rtcp/source/rtcp_packet/report_block_unittest.cc', 'rtp_rtcp/source/rtcp_packet/rrtr_unittest.cc', 'rtp_rtcp/source/rtcp_packet/sli_unittest.cc', diff --git a/webrtc/modules/rtp_rtcp/BUILD.gn b/webrtc/modules/rtp_rtcp/BUILD.gn index a3d3403172..bea0abafc4 100644 --- a/webrtc/modules/rtp_rtcp/BUILD.gn +++ b/webrtc/modules/rtp_rtcp/BUILD.gn @@ -64,6 +64,8 @@ source_set("rtp_rtcp") { "source/rtcp_packet/psfb.h", "source/rtcp_packet/receiver_report.cc", "source/rtcp_packet/receiver_report.h", + "source/rtcp_packet/remb.cc", + "source/rtcp_packet/remb.h", "source/rtcp_packet/report_block.cc", "source/rtcp_packet/report_block.h", "source/rtcp_packet/rrtr.cc", diff --git a/webrtc/modules/rtp_rtcp/rtp_rtcp.gypi b/webrtc/modules/rtp_rtcp/rtp_rtcp.gypi index d340f746be..ccd0fa0351 100644 --- a/webrtc/modules/rtp_rtcp/rtp_rtcp.gypi +++ b/webrtc/modules/rtp_rtcp/rtp_rtcp.gypi @@ -59,6 +59,8 @@ 'source/rtcp_packet/psfb.h', 'source/rtcp_packet/receiver_report.cc', 'source/rtcp_packet/receiver_report.h', + 'source/rtcp_packet/remb.cc', + 'source/rtcp_packet/remb.h', 'source/rtcp_packet/report_block.cc', 'source/rtcp_packet/report_block.h', 'source/rtcp_packet/rrtr.cc', diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc index eef2978371..533564d277 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet.cc @@ -29,10 +29,8 @@ using webrtc::RTCPUtility::PT_SR; using webrtc::RTCPUtility::PT_XR; using webrtc::RTCPUtility::RTCPPacketAPP; -using webrtc::RTCPUtility::RTCPPacketPSFBAPP; using webrtc::RTCPUtility::RTCPPacketPSFBFIR; using webrtc::RTCPUtility::RTCPPacketPSFBFIRItem; -using webrtc::RTCPUtility::RTCPPacketPSFBREMBItem; using webrtc::RTCPUtility::RTCPPacketPSFBRPSI; using webrtc::RTCPUtility::RTCPPacketReportBlockItem; using webrtc::RTCPUtility::RTCPPacketRTPFBNACK; @@ -63,24 +61,6 @@ void AssignUWord32(uint8_t* buffer, size_t* offset, uint32_t value) { *offset += 4; } -void ComputeMantissaAnd6bitBase2Exponent(uint32_t input_base10, - uint8_t bits_mantissa, - uint32_t* mantissa, - uint8_t* exp) { - // input_base10 = mantissa * 2^exp - assert(bits_mantissa <= 32); - uint32_t mantissa_max = (1 << bits_mantissa) - 1; - uint8_t exponent = 0; - for (uint32_t i = 0; i < 64; ++i) { - if (input_base10 <= (mantissa_max << i)) { - exponent = i; - break; - } - } - *exp = exponent; - *mantissa = (input_base10 >> exponent); -} - // Sender report (SR) (RFC 3550). // 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 @@ -230,48 +210,6 @@ void CreateFir(const RTCPPacketPSFBFIR& fir, AssignUWord24(buffer, pos, 0); } -// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb). -// -// 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 -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// |V=2|P| FMT=15 | PT=206 | length | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | SSRC of packet sender | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | SSRC of media source | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | Unique identifier 'R' 'E' 'M' 'B' | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | Num SSRC | BR Exp | BR Mantissa | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | SSRC feedback | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | ... | - -void CreateRemb(const RTCPPacketPSFBAPP& remb, - const RTCPPacketPSFBREMBItem& remb_item, - uint8_t* buffer, - size_t* pos) { - uint32_t mantissa = 0; - uint8_t exp = 0; - ComputeMantissaAnd6bitBase2Exponent(remb_item.BitRate, 18, &mantissa, &exp); - - AssignUWord32(buffer, pos, remb.SenderSSRC); - AssignUWord32(buffer, pos, kUnusedMediaSourceSsrc0); - AssignUWord8(buffer, pos, 'R'); - AssignUWord8(buffer, pos, 'E'); - AssignUWord8(buffer, pos, 'M'); - AssignUWord8(buffer, pos, 'B'); - AssignUWord8(buffer, pos, remb_item.NumberOfSSRCs); - AssignUWord8(buffer, pos, (exp << 2) + ((mantissa >> 16) & 0x03)); - AssignUWord8(buffer, pos, mantissa >> 8); - AssignUWord8(buffer, pos, mantissa); - for (uint8_t i = 0; i < remb_item.NumberOfSSRCs; ++i) { - AssignUWord32(buffer, pos, remb_item.SSRCs[i]); - } -} - // From RFC 3611: RTP Control Protocol Extended Reports (RTCP XR). // // Format for XR packets: @@ -513,28 +451,6 @@ bool Fir::Create(uint8_t* packet, return true; } -bool Remb::Create(uint8_t* packet, - size_t* index, - size_t max_length, - RtcpPacket::PacketReadyCallback* callback) const { - while (*index + BlockLength() > max_length) { - if (!OnBufferFull(packet, index, callback)) - return false; - } - const uint8_t kFmt = 15; - CreateHeader(kFmt, PT_PSFB, HeaderLength(), packet, index); - CreateRemb(remb_, remb_item_, packet, index); - return true; -} - -void Remb::AppliesTo(uint32_t ssrc) { - if (remb_item_.NumberOfSSRCs >= kMaxNumberOfSsrcs) { - LOG(LS_WARNING) << "Max number of REMB feedback SSRCs reached."; - return; - } - remb_item_.SSRCs[remb_item_.NumberOfSSRCs++] = ssrc; -} - bool Xr::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet.h index 01c97c38ba..1d89d7cbb0 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet.h @@ -353,62 +353,6 @@ class Fir : public RtcpPacket { RTCPUtility::RTCPPacketPSFBFIRItem fir_item_; }; -// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb). -// -// 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 -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// |V=2|P| FMT=15 | PT=206 | length | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | SSRC of packet sender | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | SSRC of media source | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | Unique identifier 'R' 'E' 'M' 'B' | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | Num SSRC | BR Exp | BR Mantissa | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | SSRC feedback | -// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ -// | ... - -class Remb : public RtcpPacket { - public: - Remb() : RtcpPacket() { - memset(&remb_, 0, sizeof(remb_)); - memset(&remb_item_, 0, sizeof(remb_item_)); - } - - virtual ~Remb() {} - - void From(uint32_t ssrc) { - remb_.SenderSSRC = ssrc; - } - void AppliesTo(uint32_t ssrc); - - void WithBitrateBps(uint32_t bitrate_bps) { - remb_item_.BitRate = bitrate_bps; - } - - protected: - bool Create(uint8_t* packet, - size_t* index, - size_t max_length, - RtcpPacket::PacketReadyCallback* callback) const override; - - private: - static const int kMaxNumberOfSsrcs = 0xff; - - size_t BlockLength() const { - return (remb_item_.NumberOfSSRCs + 5) * 4; - } - - RTCPUtility::RTCPPacketPSFBAPP remb_; - RTCPUtility::RTCPPacketPSFBREMBItem remb_item_; - - RTC_DISALLOW_COPY_AND_ASSIGN(Remb); -}; - // From RFC 3611: RTP Control Protocol Extended Reports (RTCP XR). // // Format for XR packets: diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc new file mode 100644 index 0000000000..59c809e154 --- /dev/null +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2016 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. + */ + +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h" + +#include "webrtc/base/logging.h" +#include "webrtc/modules/rtp_rtcp/source/byte_io.h" + +using webrtc::RTCPUtility::PT_PSFB; +using webrtc::RTCPUtility::RTCPPacketPSFBAPP; +using webrtc::RTCPUtility::RTCPPacketPSFBREMBItem; + +namespace webrtc { +namespace rtcp { +namespace { +const uint32_t kUnusedMediaSourceSsrc0 = 0; + +void AssignUWord8(uint8_t* buffer, size_t* offset, uint8_t value) { + buffer[(*offset)++] = value; +} + +void AssignUWord32(uint8_t* buffer, size_t* offset, uint32_t value) { + ByteWriter::WriteBigEndian(buffer + *offset, value); + *offset += 4; +} + +void ComputeMantissaAnd6bitBase2Exponent(uint32_t input_base10, + uint8_t bits_mantissa, + uint32_t* mantissa, + uint8_t* exp) { + // input_base10 = mantissa * 2^exp + assert(bits_mantissa <= 32); + uint32_t mantissa_max = (1 << bits_mantissa) - 1; + uint8_t exponent = 0; + for (uint32_t i = 0; i < 64; ++i) { + if (input_base10 <= (mantissa_max << i)) { + exponent = i; + break; + } + } + *exp = exponent; + *mantissa = (input_base10 >> exponent); +} + +// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb). +// +// 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 +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// |V=2|P| FMT=15 | PT=206 | length | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | SSRC of packet sender | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | SSRC of media source | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | Unique identifier 'R' 'E' 'M' 'B' | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | Num SSRC | BR Exp | BR Mantissa | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | SSRC feedback | +// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +// | ... | +void CreateRemb(const RTCPPacketPSFBAPP& remb, + const RTCPPacketPSFBREMBItem& remb_item, + uint8_t* buffer, + size_t* pos) { + uint32_t mantissa = 0; + uint8_t exp = 0; + ComputeMantissaAnd6bitBase2Exponent(remb_item.BitRate, 18, &mantissa, &exp); + + AssignUWord32(buffer, pos, remb.SenderSSRC); + AssignUWord32(buffer, pos, kUnusedMediaSourceSsrc0); + AssignUWord8(buffer, pos, 'R'); + AssignUWord8(buffer, pos, 'E'); + AssignUWord8(buffer, pos, 'M'); + AssignUWord8(buffer, pos, 'B'); + AssignUWord8(buffer, pos, remb_item.NumberOfSSRCs); + AssignUWord8(buffer, pos, (exp << 2) + ((mantissa >> 16) & 0x03)); + AssignUWord8(buffer, pos, mantissa >> 8); + AssignUWord8(buffer, pos, mantissa); + for (uint8_t i = 0; i < remb_item.NumberOfSSRCs; ++i) { + AssignUWord32(buffer, pos, remb_item.SSRCs[i]); + } +} +} // namespace + +bool Remb::Create(uint8_t* packet, + size_t* index, + size_t max_length, + RtcpPacket::PacketReadyCallback* callback) const { + while (*index + BlockLength() > max_length) { + if (!OnBufferFull(packet, index, callback)) + return false; + } + const uint8_t kFmt = 15; + CreateHeader(kFmt, PT_PSFB, HeaderLength(), packet, index); + CreateRemb(remb_, remb_item_, packet, index); + return true; +} + +void Remb::AppliesTo(uint32_t ssrc) { + if (remb_item_.NumberOfSSRCs >= kMaxNumberOfSsrcs) { + LOG(LS_WARNING) << "Max number of REMB feedback SSRCs reached."; + return; + } + remb_item_.SSRCs[remb_item_.NumberOfSSRCs++] = ssrc; +} + +} // namespace rtcp +} // namespace webrtc diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h new file mode 100644 index 0000000000..56dbb8b766 --- /dev/null +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2016 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_RTCP_PACKET_REMB_H_ +#define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REMB_H_ + +#include +#include "webrtc/base/basictypes.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" + +namespace webrtc { +namespace rtcp { +// Receiver Estimated Max Bitrate (REMB) (draft-alvestrand-rmcat-remb). +class Remb : public RtcpPacket { + public: + Remb() : RtcpPacket() { + memset(&remb_, 0, sizeof(remb_)); + memset(&remb_item_, 0, sizeof(remb_item_)); + } + + virtual ~Remb() {} + + void From(uint32_t ssrc) { + remb_.SenderSSRC = ssrc; + } + void AppliesTo(uint32_t ssrc); + + void WithBitrateBps(uint32_t bitrate_bps) { + remb_item_.BitRate = bitrate_bps; + } + + protected: + bool Create(uint8_t* packet, + size_t* index, + size_t max_length, + RtcpPacket::PacketReadyCallback* callback) const override; + + private: + static const int kMaxNumberOfSsrcs = 0xff; + + size_t BlockLength() const { + return (remb_item_.NumberOfSSRCs + 5) * 4; + } + + RTCPUtility::RTCPPacketPSFBAPP remb_; + RTCPUtility::RTCPPacketPSFBREMBItem remb_item_; + + RTC_DISALLOW_COPY_AND_ASSIGN(Remb); +}; +} // namespace rtcp +} // namespace webrtc +#endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REMB_H_ diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb_unittest.cc new file mode 100644 index 0000000000..487a076b1a --- /dev/null +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb_unittest.cc @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016 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. + */ + +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h" + +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "webrtc/test/rtcp_packet_parser.h" + +using webrtc::rtcp::RawPacket; +using webrtc::rtcp::Remb; +using webrtc::test::RtcpPacketParser; + +namespace webrtc { + +const uint32_t kSenderSsrc = 0x12345678; +const uint32_t kRemoteSsrc = 0x23456789; + +TEST(RtcpPacketRembTest, Remb) { + Remb remb; + remb.From(kSenderSsrc); + remb.AppliesTo(kRemoteSsrc); + remb.AppliesTo(kRemoteSsrc + 1); + remb.AppliesTo(kRemoteSsrc + 2); + remb.WithBitrateBps(261011); + + rtc::scoped_ptr packet(remb.Build()); + RtcpPacketParser parser; + parser.Parse(packet->Buffer(), packet->Length()); + EXPECT_EQ(1, parser.psfb_app()->num_packets()); + EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc()); + EXPECT_EQ(1, parser.remb_item()->num_packets()); + EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps()); + std::vector ssrcs = parser.remb_item()->last_ssrc_list(); + EXPECT_EQ(kRemoteSsrc, ssrcs[0]); + EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]); + EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]); +} +} // namespace webrtc diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet_unittest.cc index 22f61f5cab..c9610560d6 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet_unittest.cc @@ -27,7 +27,6 @@ using webrtc::rtcp::Dlrr; using webrtc::rtcp::Fir; using webrtc::rtcp::RawPacket; using webrtc::rtcp::ReceiverReport; -using webrtc::rtcp::Remb; using webrtc::rtcp::ReportBlock; using webrtc::rtcp::Rpsi; using webrtc::rtcp::Rrtr; @@ -324,26 +323,6 @@ TEST(RtcpPacketTest, BuildWithTooSmallBuffer) { EXPECT_FALSE(rr.BuildExternalBuffer(buffer, kBufferSize, &verifier)); } -TEST(RtcpPacketTest, Remb) { - Remb remb; - remb.From(kSenderSsrc); - remb.AppliesTo(kRemoteSsrc); - remb.AppliesTo(kRemoteSsrc + 1); - remb.AppliesTo(kRemoteSsrc + 2); - remb.WithBitrateBps(261011); - - rtc::scoped_ptr packet(remb.Build()); - RtcpPacketParser parser; - parser.Parse(packet->Buffer(), packet->Length()); - EXPECT_EQ(1, parser.psfb_app()->num_packets()); - EXPECT_EQ(kSenderSsrc, parser.psfb_app()->Ssrc()); - EXPECT_EQ(1, parser.remb_item()->num_packets()); - EXPECT_EQ(261011, parser.remb_item()->last_bitrate_bps()); - std::vector ssrcs = parser.remb_item()->last_ssrc_list(); - EXPECT_EQ(kRemoteSsrc, ssrcs[0]); - EXPECT_EQ(kRemoteSsrc + 1, ssrcs[1]); - EXPECT_EQ(kRemoteSsrc + 2, ssrcs[2]); -} TEST(RtcpPacketTest, XrWithNoReportBlocks) { Xr xr; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc index 5d2fda347e..6a6a1cfa2f 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_receiver_unittest.cc @@ -25,6 +25,7 @@ #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h" diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc index 848d73b2c4..03164f0a15 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc @@ -28,6 +28,7 @@ #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h" +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/sli.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h" #include "webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"