[rtp_rtcp] Dlrr::SubBlock struct renamed to ReceiveTimeInfo
This structure is used outside Dlrr creating/parsing. but RTCPReceiveTimeInfo structure doesn't follow naming style. rtcp::ReceiveTimeInfo added to replace both Dlrr::SubBlock (when creating/parsing packets) and RTCPReceiveTimeInfo (for other uses). this CL is a split of https://codereview.webrtc.org/1557593002/ BUG=webrtc:5260 R=asapersson@webrtc.org, åsapersson Review URL: https://codereview.webrtc.org/1631683002 . Cr-Commit-Position: refs/heads/master@{#11380}
This commit is contained in:
parent
5c7f110ec6
commit
d0c7bba4f4
@ -45,7 +45,7 @@ bool Dlrr::Parse(const uint8_t* buffer, uint16_t block_length_32bits) {
|
||||
size_t blocks_count = block_length_32bits / 3;
|
||||
const uint8_t* read_at = buffer + kBlockHeaderLength;
|
||||
sub_blocks_.resize(blocks_count);
|
||||
for (SubBlock& sub_block : sub_blocks_) {
|
||||
for (ReceiveTimeInfo& sub_block : sub_blocks_) {
|
||||
sub_block.ssrc = ByteReader<uint32_t>::ReadBigEndian(&read_at[0]);
|
||||
sub_block.last_rr = ByteReader<uint32_t>::ReadBigEndian(&read_at[4]);
|
||||
sub_block.delay_since_last_rr =
|
||||
@ -71,7 +71,7 @@ void Dlrr::Create(uint8_t* buffer) const {
|
||||
ByteWriter<uint16_t>::WriteBigEndian(&buffer[2], 3 * sub_blocks_.size());
|
||||
// Create sub blocks.
|
||||
uint8_t* write_at = buffer + kBlockHeaderLength;
|
||||
for (const SubBlock& sub_block : sub_blocks_) {
|
||||
for (const ReceiveTimeInfo& sub_block : sub_blocks_) {
|
||||
ByteWriter<uint32_t>::WriteBigEndian(&write_at[0], sub_block.ssrc);
|
||||
ByteWriter<uint32_t>::WriteBigEndian(&write_at[4], sub_block.last_rr);
|
||||
ByteWriter<uint32_t>::WriteBigEndian(&write_at[8],
|
||||
@ -81,20 +81,23 @@ void Dlrr::Create(uint8_t* buffer) const {
|
||||
RTC_DCHECK_EQ(buffer + BlockLength(), write_at);
|
||||
}
|
||||
|
||||
bool Dlrr::WithDlrrItem(uint32_t ssrc,
|
||||
uint32_t last_rr,
|
||||
uint32_t delay_last_rr) {
|
||||
bool Dlrr::WithDlrrItem(const ReceiveTimeInfo& block) {
|
||||
if (sub_blocks_.size() >= kMaxNumberOfDlrrItems) {
|
||||
LOG(LS_WARNING) << "Max DLRR items reached.";
|
||||
return false;
|
||||
}
|
||||
SubBlock block;
|
||||
block.ssrc = ssrc;
|
||||
block.last_rr = last_rr;
|
||||
block.delay_since_last_rr = delay_last_rr;
|
||||
sub_blocks_.push_back(block);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Dlrr::WithDlrrItem(uint32_t ssrc,
|
||||
uint32_t last_rr,
|
||||
uint32_t delay_last_rr) {
|
||||
ReceiveTimeInfo block;
|
||||
block.ssrc = ssrc;
|
||||
block.last_rr = last_rr;
|
||||
block.delay_since_last_rr = delay_last_rr;
|
||||
return WithDlrrItem(block);
|
||||
}
|
||||
} // namespace rtcp
|
||||
} // namespace webrtc
|
||||
|
||||
@ -18,17 +18,19 @@
|
||||
|
||||
namespace webrtc {
|
||||
namespace rtcp {
|
||||
struct ReceiveTimeInfo {
|
||||
// RFC 3611 4.5
|
||||
ReceiveTimeInfo() : ssrc(0), last_rr(0), delay_since_last_rr(0) {}
|
||||
ReceiveTimeInfo(uint32_t ssrc, uint32_t last_rr, uint32_t delay)
|
||||
: ssrc(ssrc), last_rr(last_rr), delay_since_last_rr(delay) {}
|
||||
uint32_t ssrc;
|
||||
uint32_t last_rr;
|
||||
uint32_t delay_since_last_rr;
|
||||
};
|
||||
|
||||
// DLRR Report Block: Delay since the Last Receiver Report (RFC 3611).
|
||||
class Dlrr {
|
||||
public:
|
||||
struct SubBlock {
|
||||
// RFC 3611 4.5
|
||||
uint32_t ssrc;
|
||||
uint32_t last_rr;
|
||||
uint32_t delay_since_last_rr;
|
||||
};
|
||||
|
||||
static const uint8_t kBlockType = 5;
|
||||
static const size_t kMaxNumberOfDlrrItems = 100;
|
||||
|
||||
@ -48,15 +50,16 @@ class Dlrr {
|
||||
void Create(uint8_t* buffer) const;
|
||||
|
||||
// Max 100 DLRR Items can be added per DLRR report block.
|
||||
bool WithDlrrItem(const ReceiveTimeInfo& time_info);
|
||||
bool WithDlrrItem(uint32_t ssrc, uint32_t last_rr, uint32_t delay_last_rr);
|
||||
|
||||
const std::vector<SubBlock>& sub_blocks() const { return sub_blocks_; }
|
||||
const std::vector<ReceiveTimeInfo>& sub_blocks() const { return sub_blocks_; }
|
||||
|
||||
private:
|
||||
static const size_t kBlockHeaderLength = 4;
|
||||
static const size_t kSubBlockLength = 12;
|
||||
|
||||
std::vector<SubBlock> sub_blocks_;
|
||||
std::vector<ReceiveTimeInfo> sub_blocks_;
|
||||
};
|
||||
} // namespace rtcp
|
||||
} // namespace webrtc
|
||||
|
||||
@ -15,16 +15,17 @@
|
||||
#include "webrtc/modules/rtp_rtcp/source/byte_io.h"
|
||||
|
||||
using webrtc::rtcp::Dlrr;
|
||||
using webrtc::rtcp::ReceiveTimeInfo;
|
||||
|
||||
namespace webrtc {
|
||||
namespace {
|
||||
|
||||
const uint32_t kSsrc = 0x12345678;
|
||||
const uint32_t kLastRR = 0x23344556;
|
||||
const uint32_t kDelay = 0x33343536;
|
||||
const uint8_t kBlock[] = {0x05, 0x00, 0x00, 0x03, 0x12, 0x34, 0x56, 0x78,
|
||||
0x23, 0x34, 0x45, 0x56, 0x33, 0x34, 0x35, 0x36};
|
||||
const size_t kBlockSizeBytes = sizeof(kBlock);
|
||||
} // namespace
|
||||
|
||||
TEST(RtcpPacketDlrrTest, Empty) {
|
||||
Dlrr dlrr;
|
||||
@ -49,7 +50,7 @@ TEST(RtcpPacketDlrrTest, Parse) {
|
||||
EXPECT_TRUE(dlrr.Parse(kBlock, block_length));
|
||||
|
||||
EXPECT_EQ(1u, dlrr.sub_blocks().size());
|
||||
const Dlrr::SubBlock& block = dlrr.sub_blocks().front();
|
||||
const ReceiveTimeInfo& block = dlrr.sub_blocks().front();
|
||||
EXPECT_EQ(kSsrc, block.ssrc);
|
||||
EXPECT_EQ(kLastRR, block.last_rr);
|
||||
EXPECT_EQ(kDelay, block.delay_since_last_rr);
|
||||
@ -97,6 +98,4 @@ TEST(RtcpPacketDlrrTest, CreateAndParseMaxSubBlocks) {
|
||||
EXPECT_TRUE(parsed.Parse(buffer, block_length));
|
||||
EXPECT_TRUE(parsed.sub_blocks().size() == Dlrr::kMaxNumberOfDlrrItems);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace webrtc
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user