Style fixes in rtcp_packet/

1. To make the files conform to chromium-style guidelines, and stop the compiler from complaing:
1.1. Move constructors out of .h file.
1.2. Move destructors out of .h file.
1.3. Move virtual functions out of .h file.
2. BlockLength() and Create() did not have consistent access modifiers in the various subclasses of RtcpPacket. Change the access level to public throughout.
3. Reorder BlockLength() and Create() where necessary, to reflect the order defined in the parent class (RtcpPacket).

BUG=None

Review-Url: https://codereview.webrtc.org/2937403002
Cr-Commit-Position: refs/heads/master@{#18633}
This commit is contained in:
eladalon
2017-06-16 07:07:47 -07:00
committed by Commit Bot
parent 6b826ef66d
commit 8fa21c49ef
36 changed files with 179 additions and 119 deletions

View File

@ -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,

View File

@ -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_;

View File

@ -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);

View File

@ -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<uint32_t>& 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<uint32_t> csrcs_;
std::string reason_;

View File

@ -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);

View File

@ -23,8 +23,8 @@ namespace rtcp {
class CompoundPacket : public RtcpPacket {
public:
CompoundPacket() {}
~CompoundPacket() override {}
CompoundPacket();
~CompoundPacket() override;
void Append(RtcpPacket* packet);

View File

@ -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];

View File

@ -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;

View File

@ -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<uint32_t> values) {
return true;
}
size_t ExtendedJitterReport::BlockLength() const {
return kHeaderLength + kJitterSizeBytes * inter_arrival_jitters_.size();
}
bool ExtendedJitterReport::Create(
uint8_t* packet,
size_t* index,

View File

@ -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<uint32_t> inter_arrival_jitters_;
};

View File

@ -118,6 +118,11 @@ void ExtendedReports::SetTargetBitrate(const TargetBitrate& bitrate) {
target_bitrate_ = rtc::Optional<TargetBitrate>(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,

View File

@ -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 {

View File

@ -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,

View File

@ -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<Request>& 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;

View File

@ -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());

View File

@ -32,14 +32,13 @@ class Nack : public Rtpfb {
void SetPacketIds(const uint16_t* nack_list, size_t length);
const std::vector<uint16_t>& 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 {

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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,

View File

@ -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<ReportBlock> report_blocks_;
};

View File

@ -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<uint32_t> 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,

View File

@ -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<uint32_t>& 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'.

View File

@ -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,

View File

@ -40,9 +40,8 @@ class Sdes : public RtcpPacket {
const std::vector<Chunk>& 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,

View File

@ -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,

View File

@ -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_;

View File

@ -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<uint16_t>::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<uint32_t, 3>::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<uint16_t>::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<uint32_t, 3>::WriteBigEndian(&buffer[index + 1],
item.target_bitrate_kbps);
index += kBitrateItemSizeBytes;
}
}
} // namespace rtcp
} // namespace webrtc

View File

@ -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<BitrateItem> bitrates_;
};

View File

@ -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,

View File

@ -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<TmmbItem>& 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;

View File

@ -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,

View File

@ -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<TmmbItem>& 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);

View File

@ -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<size_t>(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<size_t>(3));
}
void TransportFeedback::Clear() {
num_seq_no_ = 0;
last_timestamp_us_ = GetBaseTimeUs();

View File

@ -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.