Chromium Code Reviews| Index: webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h |
| diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h |
| index 56dbb8b766b031d3157c94a441be11b7484bf54d..69ecb881d774652a89705e6e5cc89273eb5a1c49 100644 |
| --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h |
| +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h |
| @@ -12,30 +12,31 @@ |
| #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTCP_PACKET_REMB_H_ |
| #include <vector> |
| + |
| #include "webrtc/base/basictypes.h" |
| -#include "webrtc/modules/rtp_rtcp/source/rtcp_packet.h" |
| +#include "webrtc/modules/rtp_rtcp/source/rtcp_packet/psfb.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 { |
| +class Remb : public Psfb { |
| public: |
| - Remb() : RtcpPacket() { |
| - memset(&remb_, 0, sizeof(remb_)); |
| - memset(&remb_item_, 0, sizeof(remb_item_)); |
| - } |
| + static const uint8_t kFeedbackMessageType = 15; |
| - virtual ~Remb() {} |
| + Remb() : bitrate_(0) {} |
| + ~Remb() override {} |
| - void From(uint32_t ssrc) { |
| - remb_.SenderSSRC = ssrc; |
| - } |
| - void AppliesTo(uint32_t ssrc); |
| + // Parse assumes header is already parsed and validated. |
| + bool Parse(const RTCPUtility::RtcpCommonHeader& header, |
| + const uint8_t* payload); // Size of the payload is in the header. |
| - void WithBitrateBps(uint32_t bitrate_bps) { |
| - remb_item_.BitRate = bitrate_bps; |
| - } |
| + bool AppliesTo(uint32_t ssrc); |
| + bool AppliesToMany(const std::vector<uint32_t>& ssrcs); |
| + void WithBitrateBps(uint32_t bitrate_bps) { bitrate_ = bitrate_bps; } |
| + |
| + uint32_t bitrate_bps() const { return bitrate_; } |
| + const std::vector<uint32_t>& ssrcs() const { return ssrcs_; } |
| protected: |
| bool Create(uint8_t* packet, |
| @@ -43,15 +44,20 @@ class Remb : public RtcpPacket { |
| size_t max_length, |
| RtcpPacket::PacketReadyCallback* callback) const override; |
| + size_t BlockLength() const override { |
| + return kHeaderLength + kCommonFeedbackLength + (2 + ssrcs_.size()) * 4; |
| + } |
| + |
| private: |
| - static const int kMaxNumberOfSsrcs = 0xff; |
| + static const size_t kMaxNumberOfSsrcs = 0xff; |
| + static const uint32_t kSignature = 0x52454D42; // 'R' 'E' 'M' 'B'. |
|
åsapersson
2016/01/20 15:33:13
perhaps call kUniqueIdentifier (as in figure)
danilchap
2016/01/20 16:13:19
Done.
|
| - size_t BlockLength() const { |
| - return (remb_item_.NumberOfSSRCs + 5) * 4; |
| - } |
| + // Media ssrc is unused, shadow base class setter and getter. |
| + void To(uint32_t); |
| + uint32_t media_ssrc() const; |
| - RTCPUtility::RTCPPacketPSFBAPP remb_; |
| - RTCPUtility::RTCPPacketPSFBREMBItem remb_item_; |
| + uint32_t bitrate_; |
|
åsapersson
2016/01/20 15:33:13
call this bitrate_bps_?
danilchap
2016/01/20 16:13:19
Done.
|
| + std::vector<uint32_t> ssrcs_; |
| RTC_DISALLOW_COPY_AND_ASSIGN(Remb); |
| }; |