Index: webrtc/modules/rtp_rtcp/source/rtcp_sender.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc |
index 6967754fe62f737e73f450314da31bf1ebd9dcdd..f55f33b6a660f47e53dd90b2a5e6a255de2ca024 100644 |
--- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc |
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc |
@@ -612,30 +612,17 @@ RTCPSender::BuildResult RTCPSender::BuildFIR(RtcpContext* ctx) { |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
*/ |
RTCPSender::BuildResult RTCPSender::BuildSLI(RtcpContext* ctx) { |
- // sanity |
- if (ctx->position + 16 >= IP_PACKET_SIZE) |
- return BuildResult::kTruncated; |
- |
- // add slice loss indicator |
- uint8_t FMT = 2; |
- *ctx->AllocateData(1) = 0x80 + FMT; |
- *ctx->AllocateData(1) = 206; |
- |
- // Used fixed length of 3 |
- *ctx->AllocateData(1) = 0; |
- *ctx->AllocateData(1) = 3; |
+ rtcp::Sli sli; |
+ sli.From(ssrc_); |
+ sli.To(remote_ssrc_); |
+ // Crop picture id to 6 least significant bits. |
+ sli.WithPictureId(ctx->picture_id & 0x3F); |
+ sli.WithFirstMb(0); |
+ sli.WithNumberOfMb(0x1FFF); // 13 bits, only ones for now. |
- // 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_); |
- |
- // Add first, number & picture ID 6 bits |
- // first = 0, 13 - bits |
- // number = 0x1fff, 13 - bits only ones for now |
- uint32_t sliField = (0x1fff << 6) + (0x3f & ctx->picture_id); |
- ByteWriter<uint32_t>::WriteBigEndian(ctx->AllocateData(4), sliField); |
+ PacketBuiltCallback callback(ctx); |
+ if (!callback.BuildPacket(sli)) |
+ return BuildResult::kTruncated; |
return BuildResult::kSuccess; |
} |