Move DeliverRtcp function to ArrayView

Bug: webrtc:42225170
Change-Id: Icdc1d89dce85117f29ede86267133deb570ad602
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/399420
Reviewed-by: Evan Shrubsole <eshr@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#45108}
diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc
index f703ae0..ab2383f 100644
--- a/audio/audio_receive_stream.cc
+++ b/audio/audio_receive_stream.cc
@@ -429,9 +429,9 @@
   return channel_receive_->SetMinimumPlayoutDelay(delay_ms);
 }
 
-void AudioReceiveStreamImpl::DeliverRtcp(const uint8_t* packet, size_t length) {
+void AudioReceiveStreamImpl::DeliverRtcp(ArrayView<const uint8_t> packet) {
   RTC_DCHECK_RUN_ON(&worker_thread_checker_);
-  channel_receive_->ReceivedRTCPPacket(packet, length);
+  channel_receive_->ReceivedRTCPPacket(packet.data(), packet.size());
 }
 
 void AudioReceiveStreamImpl::SetSyncGroup(absl::string_view sync_group) {
diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h
index bc24812..0d78482 100644
--- a/audio/audio_receive_stream.h
+++ b/audio/audio_receive_stream.h
@@ -20,6 +20,7 @@
 #include <vector>
 
 #include "absl/strings/string_view.h"
+#include "api/array_view.h"
 #include "api/audio/audio_frame.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio_codecs/audio_format.h"
@@ -123,7 +124,7 @@
                                          int64_t time_ms) override;
   bool SetMinimumPlayoutDelay(int delay_ms) override;
 
-  void DeliverRtcp(const uint8_t* packet, size_t length);
+  void DeliverRtcp(ArrayView<const uint8_t> packet);
 
   void SetSyncGroup(absl::string_view sync_group);
 
diff --git a/audio/audio_receive_stream_unittest.cc b/audio/audio_receive_stream_unittest.cc
index 35d846b..e969923 100644
--- a/audio/audio_receive_stream_unittest.cc
+++ b/audio/audio_receive_stream_unittest.cc
@@ -242,7 +242,7 @@
     EXPECT_CALL(*helper.channel_receive(),
                 ReceivedRTCPPacket(&rtcp_packet[0], rtcp_packet.size()))
         .WillOnce(Return());
-    recv_stream->DeliverRtcp(&rtcp_packet[0], rtcp_packet.size());
+    recv_stream->DeliverRtcp(rtcp_packet);
     recv_stream->UnregisterFromTransport();
   }
 }
diff --git a/audio/audio_send_stream.cc b/audio/audio_send_stream.cc
index 692527d..5c7fa93 100644
--- a/audio/audio_send_stream.cc
+++ b/audio/audio_send_stream.cc
@@ -20,6 +20,7 @@
 
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
+#include "api/array_view.h"
 #include "api/audio/audio_frame.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio_codecs/audio_encoder.h"
@@ -489,9 +490,9 @@
   return stats;
 }
 
-void AudioSendStream::DeliverRtcp(const uint8_t* packet, size_t length) {
+void AudioSendStream::DeliverRtcp(ArrayView<const uint8_t> packet) {
   RTC_DCHECK_RUN_ON(&worker_thread_checker_);
-  channel_send_->ReceivedRTCPPacket(packet, length);
+  channel_send_->ReceivedRTCPPacket(packet.data(), packet.size());
   // Poll if overhead has changed, which it can do if ack triggers us to stop
   // sending mid/rid.
   UpdateOverheadPerPacket();
diff --git a/audio/audio_send_stream.h b/audio/audio_send_stream.h
index 4fee61b..9bac560 100644
--- a/audio/audio_send_stream.h
+++ b/audio/audio_send_stream.h
@@ -18,6 +18,7 @@
 #include <utility>
 #include <vector>
 
+#include "api/array_view.h"
 #include "api/call/bitrate_allocation.h"
 #include "api/environment/environment.h"
 #include "api/field_trials_view.h"
@@ -102,7 +103,7 @@
   webrtc::AudioSendStream::Stats GetStats(
       bool has_remote_tracks) const override;
 
-  void DeliverRtcp(const uint8_t* packet, size_t length);
+  void DeliverRtcp(ArrayView<const uint8_t> packet);
 
   // Implements BitrateAllocatorObserver.
   uint32_t OnBitrateUpdated(BitrateAllocationUpdate update) override;
diff --git a/call/call.cc b/call/call.cc
index d6d0e4b..f20a58a 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -26,6 +26,7 @@
 #include "absl/functional/bind_front.h"
 #include "absl/strings/string_view.h"
 #include "api/adaptation/resource.h"
+#include "api/array_view.h"
 #include "api/environment/environment.h"
 #include "api/fec_controller.h"
 #include "api/field_trials_view.h"
@@ -1406,23 +1407,24 @@
 
   receive_stats_.AddReceivedRtcpBytes(static_cast<int>(packet.size()));
   bool rtcp_delivered = false;
+  ArrayView<const uint8_t> packet_view(packet.cdata(), packet.size());
   for (VideoReceiveStream2* stream : video_receive_streams_) {
-    if (stream->DeliverRtcp(packet.cdata(), packet.size()))
+    if (stream->DeliverRtcp(packet_view))
       rtcp_delivered = true;
   }
 
   for (AudioReceiveStreamImpl* stream : audio_receive_streams_) {
-    stream->DeliverRtcp(packet.cdata(), packet.size());
+    stream->DeliverRtcp(packet_view);
     rtcp_delivered = true;
   }
 
   for (VideoSendStreamImpl* stream : video_send_streams_) {
-    stream->DeliverRtcp(packet.cdata(), packet.size());
+    stream->DeliverRtcp(packet);
     rtcp_delivered = true;
   }
 
   for (auto& kv : audio_send_ssrcs_) {
-    kv.second->DeliverRtcp(packet.cdata(), packet.size());
+    kv.second->DeliverRtcp(packet_view);
     rtcp_delivered = true;
   }
 
diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc
index 282fba8..25cc813 100644
--- a/call/rtp_video_sender.cc
+++ b/call/rtp_video_sender.cc
@@ -720,10 +720,10 @@
   return post_encode_overhead;
 }
 
-void RtpVideoSender::DeliverRtcp(const uint8_t* packet, size_t length) {
+void RtpVideoSender::DeliverRtcp(ArrayView<const uint8_t> packet) {
   // Runs on a network thread.
   for (const RtpStreamSender& stream : rtp_streams_)
-    stream.rtp_rtcp->IncomingRtcpPacket(MakeArrayView(packet, length));
+    stream.rtp_rtcp->IncomingRtcpPacket(packet);
 }
 
 void RtpVideoSender::ConfigureSsrcs(
diff --git a/call/rtp_video_sender.h b/call/rtp_video_sender.h
index 86a5338..77f60ef 100644
--- a/call/rtp_video_sender.h
+++ b/call/rtp_video_sender.h
@@ -113,9 +113,8 @@
   std::map<uint32_t, RtpPayloadState> GetRtpPayloadStates() const
       RTC_LOCKS_EXCLUDED(mutex_) override;
 
-  void DeliverRtcp(const uint8_t* packet, size_t length)
+  void DeliverRtcp(ArrayView<const uint8_t> packet)
       RTC_LOCKS_EXCLUDED(mutex_) override;
-
   // Implements webrtc::VCMProtectionCallback.
   int ProtectionRequest(const FecProtectionParams* delta_params,
                         const FecProtectionParams* key_params,
diff --git a/call/rtp_video_sender_interface.h b/call/rtp_video_sender_interface.h
index 70c0800..754fe03 100644
--- a/call/rtp_video_sender_interface.h
+++ b/call/rtp_video_sender_interface.h
@@ -40,7 +40,7 @@
   virtual std::map<uint32_t, RtpState> GetRtpStates() const = 0;
   virtual std::map<uint32_t, RtpPayloadState> GetRtpPayloadStates() const = 0;
 
-  virtual void DeliverRtcp(const uint8_t* packet, size_t length) = 0;
+  virtual void DeliverRtcp(ArrayView<const uint8_t> packet) = 0;
 
   virtual void OnBitrateAllocationUpdated(
       const VideoBitrateAllocation& bitrate) = 0;
diff --git a/call/rtp_video_sender_unittest.cc b/call/rtp_video_sender_unittest.cc
index c7c83eb..9465967 100644
--- a/call/rtp_video_sender_unittest.cc
+++ b/call/rtp_video_sender_unittest.cc
@@ -548,7 +548,7 @@
             ByteReader<uint16_t>::ReadBigEndian(payload.data()));
         return true;
       });
-  test.router()->DeliverRtcp(nack_buffer.data(), nack_buffer.size());
+  test.router()->DeliverRtcp(nack_buffer);
   test.AdvanceTime(TimeDelta::Millis(33));
 
   // Verify that both packets were retransmitted.
@@ -589,7 +589,7 @@
                   ByteReader<uint16_t>::ReadBigEndian(payload.data()));
         return true;
       });
-  test.router()->DeliverRtcp(nack_buffer.data(), nack_buffer.size());
+  test.router()->DeliverRtcp(nack_buffer);
   test.AdvanceTime(TimeDelta::Millis(33));
 }
 
@@ -988,8 +988,8 @@
             EXPECT_TRUE(rtp_packet.Parse(packet));
             return true;
           });
-  test.router()->DeliverRtcp(nack_buffer1.data(), nack_buffer1.size());
-  test.router()->DeliverRtcp(nack_buffer2.data(), nack_buffer2.size());
+  test.router()->DeliverRtcp(nack_buffer1);
+  test.router()->DeliverRtcp(nack_buffer2);
 
   test.AdvanceTime(TimeDelta::Millis(33));
 
@@ -1598,7 +1598,7 @@
             ByteReader<uint16_t>::ReadBigEndian(payload.data()));
         return true;
       });
-  test.router()->DeliverRtcp(nack_buffer.data(), nack_buffer.size());
+  test.router()->DeliverRtcp(nack_buffer);
   test.AdvanceTime(TimeDelta::Millis(33));
 
   // Verify that only base layer packet was retransmitted.
diff --git a/video/rtp_video_stream_receiver2.cc b/video/rtp_video_stream_receiver2.cc
index 4407791..f2715d3 100644
--- a/video/rtp_video_stream_receiver2.cc
+++ b/video/rtp_video_stream_receiver2.cc
@@ -1322,15 +1322,15 @@
   }
 }
 
-bool RtpVideoStreamReceiver2::DeliverRtcp(const uint8_t* rtcp_packet,
-                                          size_t rtcp_packet_length) {
+bool RtpVideoStreamReceiver2::DeliverRtcp(
+    ArrayView<const uint8_t> rtcp_packet) {
   RTC_DCHECK_RUN_ON(&packet_sequence_checker_);
 
   if (!receiving_) {
     return false;
   }
 
-  rtp_rtcp_->IncomingRtcpPacket(MakeArrayView(rtcp_packet, rtcp_packet_length));
+  rtp_rtcp_->IncomingRtcpPacket((rtcp_packet));
 
   std::optional<TimeDelta> rtt = rtp_rtcp_->LastRtt();
   if (!rtt.has_value()) {
diff --git a/video/rtp_video_stream_receiver2.h b/video/rtp_video_stream_receiver2.h
index c4a3c7a..18ee7ff 100644
--- a/video/rtp_video_stream_receiver2.h
+++ b/video/rtp_video_stream_receiver2.h
@@ -20,6 +20,7 @@
 #include <variant>
 #include <vector>
 
+#include "api/array_view.h"
 #include "api/crypto/frame_decryptor_interface.h"
 #include "api/environment/environment.h"
 #include "api/frame_transformer_interface.h"
@@ -131,7 +132,7 @@
   // Produces the transport-related timestamps; current_delay_ms is left unset.
   std::optional<Syncable::Info> GetSyncInfo() const;
 
-  bool DeliverRtcp(const uint8_t* rtcp_packet, size_t rtcp_packet_length);
+  bool DeliverRtcp(ArrayView<const uint8_t> rtcp_packet);
 
   void FrameContinuous(int64_t seq_num);
 
diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc
index c7c1c30..2e8bc0b 100644
--- a/video/video_receive_stream2.cc
+++ b/video/video_receive_stream2.cc
@@ -11,7 +11,6 @@
 #include "video/video_receive_stream2.h"
 
 #include <stdlib.h>
-#include <string.h>
 
 #include <algorithm>
 #include <cmath>
@@ -349,9 +348,9 @@
   rtp_video_stream_receiver_.SignalNetworkState(state);
 }
 
-bool VideoReceiveStream2::DeliverRtcp(const uint8_t* packet, size_t length) {
+bool VideoReceiveStream2::DeliverRtcp(ArrayView<const uint8_t> packet) {
   RTC_DCHECK_RUN_ON(&packet_sequence_checker_);
-  return rtp_video_stream_receiver_.DeliverRtcp(packet, length);
+  return rtp_video_stream_receiver_.DeliverRtcp(packet);
 }
 
 void VideoReceiveStream2::SetSync(Syncable* audio_syncable) {
diff --git a/video/video_receive_stream2.h b/video/video_receive_stream2.h
index aae2b3e..d6d27a5 100644
--- a/video/video_receive_stream2.h
+++ b/video/video_receive_stream2.h
@@ -20,6 +20,7 @@
 #include <string>
 #include <vector>
 
+#include "api/array_view.h"
 #include "api/crypto/frame_decryptor_interface.h"
 #include "api/environment/environment.h"
 #include "api/frame_transformer_interface.h"
@@ -150,7 +151,7 @@
   }
 
   void SignalNetworkState(NetworkState state);
-  bool DeliverRtcp(const uint8_t* packet, size_t length);
+  bool DeliverRtcp(ArrayView<const uint8_t> packet);
 
   void SetSync(Syncable* audio_syncable);
 
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index 9164f53..ac65b34 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -628,9 +628,9 @@
   }
 }
 
-void VideoSendStreamImpl::DeliverRtcp(const uint8_t* packet, size_t length) {
+void VideoSendStreamImpl::DeliverRtcp(ArrayView<const uint8_t> packet) {
   RTC_DCHECK_RUN_ON(&thread_checker_);
-  rtp_video_sender_->DeliverRtcp(packet, length);
+  rtp_video_sender_->DeliverRtcp(packet);
 }
 
 bool VideoSendStreamImpl::started() {
diff --git a/video/video_send_stream_impl.h b/video/video_send_stream_impl.h
index a8e7858..9885bd8 100644
--- a/video/video_send_stream_impl.h
+++ b/video/video_send_stream_impl.h
@@ -104,7 +104,7 @@
                           video_stream_encoder_for_test = nullptr);
   ~VideoSendStreamImpl() override;
 
-  void DeliverRtcp(const uint8_t* packet, size_t length);
+  void DeliverRtcp(ArrayView<const uint8_t> packet);
 
   // webrtc::VideoSendStream implementation.
   void Start() override;
diff --git a/video/video_send_stream_impl_unittest.cc b/video/video_send_stream_impl_unittest.cc
index 72ef458..3f13e64 100644
--- a/video/video_send_stream_impl_unittest.cc
+++ b/video/video_send_stream_impl_unittest.cc
@@ -102,7 +102,7 @@
               GetRtpPayloadStates,
               (),
               (const, override));
-  MOCK_METHOD(void, DeliverRtcp, (const uint8_t*, size_t), (override));
+  MOCK_METHOD(void, DeliverRtcp, (ArrayView<const uint8_t>), (override));
   MOCK_METHOD(void,
               OnBitrateAllocationUpdated,
               (const VideoBitrateAllocation&),