diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc index 322bf363b4..e9d107811f 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.cc @@ -32,6 +32,11 @@ constexpr size_t App::kMaxDataSize; // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // 8 | application-dependent data ... // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +App::App() : sub_type_(0), ssrc_(0), name_(0) {} + +App::~App() = default; + bool App::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); if (packet.payload_size_bytes() < kAppBaseLength) { @@ -65,6 +70,10 @@ void App::SetData(const uint8_t* data, size_t data_length) { data_.SetData(data, data_length); } +size_t App::BlockLength() const { + return kHeaderLength + kAppBaseLength + data_.size(); +} + bool App::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h index 42a16c7a3a..1261e8456f 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/app.h @@ -21,8 +21,8 @@ class CommonHeader; class App : public RtcpPacket { public: static constexpr uint8_t kPacketType = 204; - App() : sub_type_(0), ssrc_(0), name_(0) {} - ~App() override {} + App(); + ~App() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -38,7 +38,8 @@ class App : public RtcpPacket { size_t data_size() const { return data_.size(); } const uint8_t* data() const { return data_.data(); } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, @@ -47,9 +48,6 @@ class App : public RtcpPacket { private: static constexpr size_t kAppBaseLength = 8; // Ssrc and Name. static constexpr size_t kMaxDataSize = 0xffff * 4 - kAppBaseLength; - size_t BlockLength() const override { - return kHeaderLength + kAppBaseLength + data_.size(); - } uint8_t sub_type_; uint32_t ssrc_; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.cc index 494c8708f1..965fde282a 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.cc @@ -34,6 +34,8 @@ constexpr uint8_t Bye::kPacketType; // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Bye::Bye() : sender_ssrc_(0) {} +Bye::~Bye() = default; + bool Bye::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h index c3f1cab491..e82f01c43f 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/bye.h @@ -26,7 +26,7 @@ class Bye : public RtcpPacket { static constexpr uint8_t kPacketType = 203; Bye(); - ~Bye() override {} + ~Bye() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -39,7 +39,8 @@ class Bye : public RtcpPacket { const std::vector& csrcs() const { return csrcs_; } const std::string& reason() const { return reason_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, @@ -48,8 +49,6 @@ class Bye : public RtcpPacket { private: static const int kMaxNumberOfCsrcs = 0x1f - 1; // First item is sender SSRC. - size_t BlockLength() const override; - uint32_t sender_ssrc_; std::vector csrcs_; std::string reason_; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.cc index eead45d370..d5bbee6c91 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.cc @@ -15,6 +15,10 @@ namespace webrtc { namespace rtcp { +CompoundPacket::CompoundPacket() = default; + +CompoundPacket::~CompoundPacket() = default; + void CompoundPacket::Append(RtcpPacket* packet) { RTC_CHECK(packet); appended_packets_.push_back(packet); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h index 06b67c375c..5bb23dd185 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/compound_packet.h @@ -23,8 +23,8 @@ namespace rtcp { class CompoundPacket : public RtcpPacket { public: - CompoundPacket() {} - ~CompoundPacket() override {} + CompoundPacket(); + ~CompoundPacket() override; void Append(RtcpPacket* packet); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.cc index 808a4d0d78..80b44d51eb 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.cc @@ -33,6 +33,12 @@ namespace rtcp { // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block // : ... : 2 +Dlrr::Dlrr() = default; + +Dlrr::Dlrr(const Dlrr& other) = default; + +Dlrr::~Dlrr() = default; + bool Dlrr::Parse(const uint8_t* buffer, uint16_t block_length_32bits) { RTC_DCHECK(buffer[0] == kBlockType); // kReserved = buffer[1]; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.h index c5f5c23bf1..840ca37b6f 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/dlrr.h @@ -33,9 +33,9 @@ class Dlrr { public: static const uint8_t kBlockType = 5; - Dlrr() {} - Dlrr(const Dlrr& other) = default; - ~Dlrr() {} + Dlrr(); + Dlrr(const Dlrr& other); + ~Dlrr(); Dlrr& operator=(const Dlrr& other) = default; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.cc index c296dbcac9..f7798dc3a1 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.cc @@ -39,6 +39,10 @@ constexpr uint8_t ExtendedJitterReport::kPacketType; // (inside a compound RTCP packet), and MUST have the same value for RC // (reception report count) as the receiver report. +ExtendedJitterReport::ExtendedJitterReport() = default; + +ExtendedJitterReport::~ExtendedJitterReport() = default; + bool ExtendedJitterReport::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); @@ -67,6 +71,10 @@ bool ExtendedJitterReport::SetJitterValues(std::vector values) { return true; } +size_t ExtendedJitterReport::BlockLength() const { + return kHeaderLength + kJitterSizeBytes * inter_arrival_jitters_.size(); +} + bool ExtendedJitterReport::Create( uint8_t* packet, size_t* index, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h index 2e56e33286..1771e023ca 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_jitter_report.h @@ -24,8 +24,8 @@ class ExtendedJitterReport : public RtcpPacket { static constexpr uint8_t kPacketType = 195; static constexpr size_t kMaxNumberOfJitterValues = 0x1f; - ExtendedJitterReport() {} - ~ExtendedJitterReport() override {} + ExtendedJitterReport(); + ~ExtendedJitterReport() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -36,7 +36,8 @@ class ExtendedJitterReport : public RtcpPacket { return inter_arrival_jitters_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, @@ -45,10 +46,6 @@ class ExtendedJitterReport : public RtcpPacket { private: static constexpr size_t kJitterSizeBytes = 4; - size_t BlockLength() const override { - return kHeaderLength + kJitterSizeBytes * inter_arrival_jitters_.size(); - } - std::vector inter_arrival_jitters_; }; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc index 4c02c1ab1a..583083b6ac 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.cc @@ -118,6 +118,11 @@ void ExtendedReports::SetTargetBitrate(const TargetBitrate& bitrate) { target_bitrate_ = rtc::Optional(bitrate); } +size_t ExtendedReports::BlockLength() const { + return kHeaderLength + kXrBaseLength + RrtrLength() + DlrrLength() + + VoipMetricLength() + TargetBitrateLength(); +} + bool ExtendedReports::Create(uint8_t* packet, size_t* index, size_t max_length, 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 09723ef949..cb34f370c5 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/extended_reports.h @@ -52,7 +52,8 @@ class ExtendedReports : public RtcpPacket { return target_bitrate_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, @@ -61,11 +62,6 @@ class ExtendedReports : public RtcpPacket { private: static constexpr size_t kXrBaseLength = 4; - size_t BlockLength() const override { - return kHeaderLength + kXrBaseLength + RrtrLength() + DlrrLength() + - VoipMetricLength() + TargetBitrateLength(); - } - size_t RrtrLength() const { return rrtr_block_ ? Rrtr::kLength : 0; } size_t DlrrLength() const { return dlrr_block_.BlockLength(); } size_t VoipMetricLength() const { diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.cc index 7f62e18c9b..069a13c64a 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.cc @@ -43,6 +43,11 @@ constexpr uint8_t Fir::kFeedbackMessageType; // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | Seq nr. | Reserved = 0 | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +Fir::Fir() = default; + +Fir::~Fir() = default; + bool Fir::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); RTC_DCHECK_EQ(packet.fmt(), kFeedbackMessageType); @@ -72,6 +77,10 @@ bool Fir::Parse(const CommonHeader& packet) { return true; } +size_t Fir::BlockLength() const { + return kHeaderLength + kCommonFeedbackLength + kFciLength * items_.size(); +} + bool Fir::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h index 59f3b61729..8d772d87fa 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/fir.h @@ -30,8 +30,8 @@ class Fir : public Psfb { uint8_t seq_nr; }; - Fir() {} - ~Fir() override {} + Fir(); + ~Fir() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -41,7 +41,8 @@ class Fir : public Psfb { } const std::vector& requests() const { return items_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, @@ -49,9 +50,7 @@ class Fir : public Psfb { private: static constexpr size_t kFciLength = 8; - size_t BlockLength() const override { - return kHeaderLength + kCommonFeedbackLength + kFciLength * items_.size(); - } + // SSRC of media source is not used in FIR packet. Shadow base functions. void SetMediaSsrc(uint32_t ssrc); uint32_t media_ssrc() const; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.cc index 956b16f784..a51764f04b 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.cc @@ -75,6 +75,11 @@ bool Nack::Parse(const CommonHeader& packet) { return true; } +size_t Nack::BlockLength() const { + return kHeaderLength + kCommonFeedbackLength + + packed_.size() * kNackItemLength; +} + bool Nack::Create(uint8_t* packet, size_t* index, size_t max_length, @@ -116,11 +121,6 @@ bool Nack::Create(uint8_t* packet, return true; } -size_t Nack::BlockLength() const { - return kHeaderLength + kCommonFeedbackLength + - packed_.size() * kNackItemLength; -} - void Nack::SetPacketIds(const uint16_t* nack_list, size_t length) { RTC_DCHECK(nack_list); RTC_DCHECK(packet_ids_.empty()); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h index 65a6593565..2b5acec0ea 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/nack.h @@ -32,14 +32,13 @@ class Nack : public Rtpfb { void SetPacketIds(const uint16_t* nack_list, size_t length); const std::vector& packet_ids() const { return packet_ids_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, RtcpPacket::PacketReadyCallback* callback) const override; - size_t BlockLength() const override; - private: static constexpr size_t kNackItemLength = 4; struct PackedNack { diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.cc index 7838fccf82..ade6c2a874 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.cc @@ -49,6 +49,10 @@ bool Pli::Parse(const CommonHeader& packet) { return true; } +size_t Pli::BlockLength() const { + return kHeaderLength + kCommonFeedbackLength; +} + bool Pli::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h index 1cfde4f219..c3682bdcaa 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/pli.h @@ -26,16 +26,12 @@ class Pli : public Psfb { bool Parse(const CommonHeader& packet); - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, RtcpPacket::PacketReadyCallback* callback) const override; - - private: - size_t BlockLength() const override { - return kHeaderLength + kCommonFeedbackLength; - } }; } // namespace rtcp diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.cc index 12a4444cc9..1ec6826e6b 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.cc @@ -44,6 +44,10 @@ bool RapidResyncRequest::Parse(const CommonHeader& packet) { return true; } +size_t RapidResyncRequest::BlockLength() const { + return kHeaderLength + kCommonFeedbackLength; +} + bool RapidResyncRequest::Create( uint8_t* packet, size_t* index, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h index eb45e14f79..ba101a3b09 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h @@ -29,16 +29,12 @@ class RapidResyncRequest : public Rtpfb { // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& header); - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, RtcpPacket::PacketReadyCallback* callback) const override; - - private: - size_t BlockLength() const override { - return kHeaderLength + kCommonFeedbackLength; - } }; } // namespace rtcp } // namespace webrtc diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.cc index 93da4dcd1b..03a9dbd86e 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.cc @@ -29,6 +29,11 @@ constexpr uint8_t ReceiverReport::kPacketType; // +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // | report block(s) | // | .... | + +ReceiverReport::ReceiverReport() : sender_ssrc_(0) {} + +ReceiverReport::~ReceiverReport() = default; + bool ReceiverReport::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); @@ -55,6 +60,11 @@ bool ReceiverReport::Parse(const CommonHeader& packet) { return true; } +size_t ReceiverReport::BlockLength() const { + return kHeaderLength + kRrBaseLength + + report_blocks_.size() * ReportBlock::kLength; +} + bool ReceiverReport::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h index 09aa0fef3b..2b8b190293 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/receiver_report.h @@ -24,8 +24,8 @@ class CommonHeader; class ReceiverReport : public RtcpPacket { public: static constexpr uint8_t kPacketType = 201; - ReceiverReport() : sender_ssrc_(0) {} - ~ReceiverReport() override {} + ReceiverReport(); + ~ReceiverReport() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -38,7 +38,8 @@ class ReceiverReport : public RtcpPacket { return report_blocks_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, @@ -48,11 +49,6 @@ class ReceiverReport : public RtcpPacket { static const size_t kRrBaseLength = 4; static const size_t kMaxNumberOfReportBlocks = 0x1F; - size_t BlockLength() const override { - return kHeaderLength + kRrBaseLength + - report_blocks_.size() * ReportBlock::kLength; - } - uint32_t sender_ssrc_; std::vector report_blocks_; }; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc index ec7b51ad00..c6f89728ff 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.cc @@ -38,6 +38,11 @@ constexpr uint8_t Remb::kFeedbackMessageType; // 16 | SSRC feedback | // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // : ... : + +Remb::Remb() : bitrate_bps_(0) {} + +Remb::~Remb() = default; + bool Remb::Parse(const CommonHeader& packet) { RTC_DCHECK(packet.type() == kPacketType); RTC_DCHECK_EQ(packet.fmt(), kFeedbackMessageType); @@ -92,6 +97,10 @@ bool Remb::SetSsrcs(std::vector ssrcs) { return true; } +size_t Remb::BlockLength() const { + return kHeaderLength + kCommonFeedbackLength + (2 + ssrcs_.size()) * 4; +} + bool Remb::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h index fdcce1082a..42c2a96ce1 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/remb.h @@ -26,8 +26,8 @@ class Remb : public Psfb { static constexpr uint8_t kFeedbackMessageType = 15; static constexpr size_t kMaxNumberOfSsrcs = 0xff; - Remb() : bitrate_bps_(0) {} - ~Remb() override {} + Remb(); + ~Remb() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -38,16 +38,13 @@ class Remb : public Psfb { uint64_t bitrate_bps() const { return bitrate_bps_; } const std::vector& ssrcs() const { return ssrcs_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, RtcpPacket::PacketReadyCallback* callback) const override; - size_t BlockLength() const override { - return kHeaderLength + kCommonFeedbackLength + (2 + ssrcs_.size()) * 4; - } - private: static constexpr uint32_t kUniqueIdentifier = 0x52454D42; // 'R' 'E' 'M' 'B'. diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.cc index 9b06b2501e..2e395d7297 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.cc @@ -155,6 +155,10 @@ bool Sdes::AddCName(uint32_t ssrc, std::string cname) { return true; } +size_t Sdes::BlockLength() const { + return block_length_; +} + bool Sdes::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h index 46382ac1a5..34885dc00d 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sdes.h @@ -40,9 +40,8 @@ class Sdes : public RtcpPacket { const std::vector& chunks() const { return chunks_; } - size_t BlockLength() const override { return block_length_; } + size_t BlockLength() const override; - protected: bool Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.cc index 312b3f96d1..3cadd431b3 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.cc @@ -43,6 +43,8 @@ SenderReport::SenderReport() sender_packet_count_(0), sender_octet_count_(0) {} +SenderReport::~SenderReport() = default; + bool SenderReport::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); @@ -74,6 +76,11 @@ bool SenderReport::Parse(const CommonHeader& packet) { return true; } +size_t SenderReport::BlockLength() const { + return kHeaderLength + kSenderBaseLength + + report_blocks_.size() * ReportBlock::kLength; +} + bool SenderReport::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h index c62e505898..0e39eb52e6 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/sender_report.h @@ -26,7 +26,7 @@ class SenderReport : public RtcpPacket { static constexpr uint8_t kPacketType = 200; SenderReport(); - ~SenderReport() override {} + ~SenderReport() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -55,7 +55,8 @@ class SenderReport : public RtcpPacket { return report_blocks_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, @@ -65,11 +66,6 @@ class SenderReport : public RtcpPacket { static const size_t kMaxNumberOfReportBlocks = 0x1f; const size_t kSenderBaseLength = 24; - size_t BlockLength() const override { - return kHeaderLength + kSenderBaseLength + - report_blocks_.size() * ReportBlock::kLength; - } - uint32_t sender_ssrc_; NtpTime ntp_; uint32_t rtp_timestamp_; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.cc index e3a813a854..913264223f 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.cc @@ -65,21 +65,6 @@ TargetBitrate::BitrateItem::BitrateItem(uint8_t spatial_layer, TargetBitrate::TargetBitrate() {} TargetBitrate::~TargetBitrate() {} -void TargetBitrate::Create(uint8_t* buffer) const { - buffer[0] = kBlockType; - buffer[1] = 0; // Reserved. - const size_t block_length_words = (BlockLength() / 4) - 1; - ByteWriter::WriteBigEndian(&buffer[2], block_length_words); - - size_t index = kTargetBitrateHeaderSizeBytes; - for (const BitrateItem& item : bitrates_) { - buffer[index] = (item.spatial_layer << 4) | item.temporal_layer; - ByteWriter::WriteBigEndian(&buffer[index + 1], - item.target_bitrate_kbps); - index += kBitrateItemSizeBytes; - } -} - bool TargetBitrate::Parse(const uint8_t* block, uint16_t block_length) { if (block_length < 1) { LOG(LS_WARNING) @@ -130,5 +115,20 @@ size_t TargetBitrate::BlockLength() const { bitrates_.size() * kBitrateItemSizeBytes; } +void TargetBitrate::Create(uint8_t* buffer) const { + buffer[0] = kBlockType; + buffer[1] = 0; // Reserved. + const size_t block_length_words = (BlockLength() / 4) - 1; + ByteWriter::WriteBigEndian(&buffer[2], block_length_words); + + size_t index = kTargetBitrateHeaderSizeBytes; + for (const BitrateItem& item : bitrates_) { + buffer[index] = (item.spatial_layer << 4) | item.temporal_layer; + ByteWriter::WriteBigEndian(&buffer[index + 1], + item.target_bitrate_kbps); + index += kBitrateItemSizeBytes; + } +} + } // namespace rtcp } // namespace webrtc diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.h index 013c222f8e..d3f672a192 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/target_bitrate.h @@ -47,10 +47,10 @@ class TargetBitrate { bool Parse(const uint8_t* block, uint16_t block_length); - void Create(uint8_t* buffer) const; - size_t BlockLength() const; + void Create(uint8_t* buffer) const; + private: std::vector bitrates_; }; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.cc index 702afd8a8c..d9c3227ddb 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.cc @@ -42,6 +42,11 @@ constexpr uint8_t Tmmbn::kFeedbackMessageType; // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | MxTBR Exp | MxTBR Mantissa |Measured Overhead| // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +Tmmbn::Tmmbn() = default; + +Tmmbn::~Tmmbn() = default; + bool Tmmbn::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); RTC_DCHECK_EQ(packet.fmt(), kFeedbackMessageType); @@ -74,6 +79,11 @@ void Tmmbn::AddTmmbr(const TmmbItem& item) { items_.push_back(item); } +size_t Tmmbn::BlockLength() const { + return kHeaderLength + kCommonFeedbackLength + + TmmbItem::kLength * items_.size(); +} + bool Tmmbn::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h index a02aad6422..8b32366e24 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbn.h @@ -27,8 +27,8 @@ class Tmmbn : public Rtpfb { public: static constexpr uint8_t kFeedbackMessageType = 4; - Tmmbn() {} - ~Tmmbn() override {} + Tmmbn(); + ~Tmmbn() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -37,18 +37,14 @@ class Tmmbn : public Rtpfb { const std::vector& items() const { return items_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, RtcpPacket::PacketReadyCallback* callback) const override; private: - size_t BlockLength() const override { - return kHeaderLength + kCommonFeedbackLength + - TmmbItem::kLength * items_.size(); - } - // Media ssrc is unused, shadow base class setter and getter. void SetMediaSsrc(uint32_t ssrc); uint32_t media_ssrc() const; diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.cc index 0ba131187b..fd0719ea5e 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.cc @@ -43,6 +43,11 @@ constexpr uint8_t Tmmbr::kFeedbackMessageType; // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // | MxTBR Exp | MxTBR Mantissa |Measured Overhead| // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + +Tmmbr::Tmmbr() = default; + +Tmmbr::~Tmmbr() = default; + bool Tmmbr::Parse(const CommonHeader& packet) { RTC_DCHECK_EQ(packet.type(), kPacketType); RTC_DCHECK_EQ(packet.fmt(), kFeedbackMessageType); @@ -75,6 +80,11 @@ void Tmmbr::AddTmmbr(const TmmbItem& item) { items_.push_back(item); } +size_t Tmmbr::BlockLength() const { + return kHeaderLength + kCommonFeedbackLength + + TmmbItem::kLength * items_.size(); +} + bool Tmmbr::Create(uint8_t* packet, size_t* index, size_t max_length, diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h index 2915c9d4bc..4d1bf11e06 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/tmmbr.h @@ -27,8 +27,8 @@ class Tmmbr : public Rtpfb { public: static constexpr uint8_t kFeedbackMessageType = 3; - Tmmbr() {} - ~Tmmbr() override {} + Tmmbr(); + ~Tmmbr() override; // Parse assumes header is already parsed and validated. bool Parse(const CommonHeader& packet); @@ -37,18 +37,14 @@ class Tmmbr : public Rtpfb { const std::vector& requests() const { return items_; } - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* index, size_t max_length, RtcpPacket::PacketReadyCallback* callback) const override; private: - size_t BlockLength() const override { - return kHeaderLength + kCommonFeedbackLength + - TmmbItem::kLength * items_.size(); - } - // Media ssrc is unused, shadow base class setter. void SetMediaSsrc(uint32_t ssrc); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc index ec7c6163b3..796577cc59 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc @@ -545,6 +545,11 @@ bool TransportFeedback::IsConsistent() const { return true; } +size_t TransportFeedback::BlockLength() const { + // Round size_bytes_ up to multiple of 32bits. + return (size_bytes_ + 3) & (~static_cast(3)); +} + // Serialize packet. bool TransportFeedback::Create(uint8_t* packet, size_t* position, @@ -602,11 +607,6 @@ bool TransportFeedback::Create(uint8_t* packet, return true; } -size_t TransportFeedback::BlockLength() const { - // Round size_bytes_ up to multiple of 32bits. - return (size_bytes_ + 3) & (~static_cast(3)); -} - void TransportFeedback::Clear() { num_seq_no_ = 0; last_timestamp_us_ = GetBaseTimeUs(); diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h index 25f1111914..35fe90bb88 100644 --- a/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h +++ b/webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h @@ -69,14 +69,13 @@ class TransportFeedback : public Rtpfb { // This function is for tests. bool IsConsistent() const; - protected: + size_t BlockLength() const override; + bool Create(uint8_t* packet, size_t* position, size_t max_length, PacketReadyCallback* callback) const override; - size_t BlockLength() const override; - private: // Size in bytes of a delta time in rtcp packet. // Valid values are 0 (packet wasn't received), 1 or 2.