[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:
Danil Chapovalov 2016-01-26 14:12:46 +01:00
parent 5c7f110ec6
commit d0c7bba4f4
3 changed files with 27 additions and 22 deletions

View File

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

View File

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

View File

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