Use RtcpPacket to send FIR in RtcpSender

BUG=webrtc:2450

Review URL: https://codereview.webrtc.org/1261323003

Cr-Commit-Position: refs/heads/master@{#9677}
diff --git a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
index 6967754..57c77a9 100644
--- a/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
+++ b/webrtc/modules/rtp_rtcp/source/rtcp_sender.cc
@@ -564,36 +564,17 @@
 }
 
 RTCPSender::BuildResult RTCPSender::BuildFIR(RtcpContext* ctx) {
-  // sanity
-  if (ctx->position + 20 >= IP_PACKET_SIZE)
-    return BuildResult::kTruncated;
-
   if (!ctx->repeat)
-    sequence_number_fir_++;  // do not increase if repetition
+    ++sequence_number_fir_;  // Do not increase if repetition.
 
-  // add full intra request indicator
-  uint8_t FMT = 4;
-  *ctx->AllocateData(1) = 0x80 + FMT;
-  *ctx->AllocateData(1) = 206;
+  rtcp::Fir fir;
+  fir.From(ssrc_);
+  fir.To(remote_ssrc_);
+  fir.WithCommandSeqNum(sequence_number_fir_);
 
-  //Length of 4
-  *ctx->AllocateData(1) = 0;
-  *ctx->AllocateData(1) = 4;
-
-  // Add our own SSRC
-  ByteWriter<uint32_t>::WriteBigEndian(ctx->AllocateData(4), ssrc_);
-
-  // RFC 5104     4.3.1.2.  Semantics
-  // SSRC of media source
-  ByteWriter<uint32_t>::WriteBigEndian(ctx->AllocateData(4), 0);
-
-  // Additional Feedback Control Information (FCI)
-  ByteWriter<uint32_t>::WriteBigEndian(ctx->AllocateData(4), remote_ssrc_);
-
-  *ctx->AllocateData(1) = sequence_number_fir_;
-  *ctx->AllocateData(1) = 0;
-  *ctx->AllocateData(1) = 0;
-  *ctx->AllocateData(1) = 0;
+  PacketBuiltCallback callback(ctx);
+  if (!callback.BuildPacket(fir))
+    return BuildResult::kTruncated;
 
   TRACE_EVENT_INSTANT0(TRACE_DISABLED_BY_DEFAULT("webrtc_rtp"),
                        "RTCPSender::FIR");