Use RtcpPacket to send PLI in RtcpSender
BUG=webrtc:2450
R=asapersson@webrtc.org
Review URL: https://codereview.webrtc.org/1262153003 .
Cr-Commit-Position: refs/heads/master@{#9666}
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
index 55ca9a7..6967754 100644
--- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
@@ -120,6 +120,11 @@
void OnPacketReady(uint8_t* data, size_t length) override {
context_->position += length;
}
+ bool BuildPacket(const rtcp::RtcpPacket& packet) {
+ return packet.BuildExternalBuffer(
+ &context_->buffer[context_->position],
+ context_->buffer_size - context_->position, this);
+ }
private:
RtcpContext* const context_;
@@ -501,11 +506,8 @@
report.WithReportBlock(it.second);
PacketBuiltCallback callback(ctx);
- if (!report.BuildExternalBuffer(&ctx->buffer[ctx->position],
- ctx->buffer_size - ctx->position,
- &callback)) {
+ if (!callback.BuildPacket(report))
return BuildResult::kTruncated;
- }
report_blocks_.clear();
return BuildResult::kSuccess;
@@ -522,10 +524,8 @@
sdes.WithCName(it.first, it.second);
PacketBuiltCallback callback(ctx);
- if (!sdes.BuildExternalBuffer(&ctx->buffer[ctx->position],
- ctx->buffer_size - ctx->position, &callback)) {
+ if (!callback.BuildPacket(sdes))
return BuildResult::kTruncated;
- }
return BuildResult::kSuccess;
}
@@ -537,11 +537,8 @@
report.WithReportBlock(it.second);
PacketBuiltCallback callback(ctx);
- if (!report.BuildExternalBuffer(&ctx->buffer[ctx->position],
- ctx->buffer_size - ctx->position,
- &callback)) {
+ if (!callback.BuildPacket(report))
return BuildResult::kTruncated;
- }
report_blocks_.clear();
@@ -549,25 +546,14 @@
}
RTCPSender::BuildResult RTCPSender::BuildPLI(RtcpContext* ctx) {
- // sanity
- if (ctx->position + 12 >= IP_PACKET_SIZE)
+ rtcp::Pli pli;
+ pli.From(ssrc_);
+ pli.To(remote_ssrc_);
+
+ PacketBuiltCallback callback(ctx);
+ if (!callback.BuildPacket(pli))
return BuildResult::kTruncated;
- // add picture loss indicator
- uint8_t FMT = 1;
- *ctx->AllocateData(1) = 0x80 + FMT;
- *ctx->AllocateData(1) = 206;
-
- // Used fixed length of 2
- *ctx->AllocateData(1) = 0;
- *ctx->AllocateData(1) = 2;
-
- // Add our own SSRC
- ByteWriter<uint32_t>::WriteBigEndian(ctx->AllocateData(4), ssrc_);
-
- // Add the remote SSRC
- ByteWriter<uint32_t>::WriteBigEndian(ctx->AllocateData(4), remote_ssrc_);
-
TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
"RTCPSender::PLI");
++packet_type_counter_.pli_packets;