Add nullability annotations to Call receive classes

Add `absl_nonnull` and `absl_nullable` annotations to pointer arguments
in constructors and methods across receive-related classes associated
with `Call`.

Bug: none
Change-Id: Ia4546b4f1d8b8c038ebc5f2c1c43c85d5fc9278b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/473700
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#47740}
diff --git a/audio/BUILD.gn b/audio/BUILD.gn
index b43ea28..5b0cbed 100644
--- a/audio/BUILD.gn
+++ b/audio/BUILD.gn
@@ -118,6 +118,7 @@
     "../system_wrappers",
     "../system_wrappers:metrics",
     "utility:audio_frame_operations",
+    "//third_party/abseil-cpp/absl/base:nullability",
     "//third_party/abseil-cpp/absl/functional:any_invocable",
     "//third_party/abseil-cpp/absl/memory",
     "//third_party/abseil-cpp/absl/strings",
diff --git a/audio/audio_receive_stream.cc b/audio/audio_receive_stream.cc
index b5c0496..72c4ab9 100644
--- a/audio/audio_receive_stream.cc
+++ b/audio/audio_receive_stream.cc
@@ -20,6 +20,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "absl/strings/string_view.h"
 #include "api/audio/audio_frame.h"
 #include "api/audio/audio_mixer.h"
@@ -96,8 +97,8 @@
 
 AudioReceiveStreamImpl::AudioReceiveStreamImpl(
     const Environment& env,
-    PacketRouter* packet_router,
-    NetEqFactory* neteq_factory,
+    PacketRouter* absl_nonnull packet_router,
+    NetEqFactory* absl_nullable neteq_factory,
     const AudioReceiveStreamInterface::Config& config,
     const scoped_refptr<AudioState>& audio_state)
     : AudioReceiveStreamImpl(
@@ -110,10 +111,10 @@
 
 AudioReceiveStreamImpl::AudioReceiveStreamImpl(
     const Environment& env,
-    PacketRouter* packet_router,
+    PacketRouter* absl_nonnull packet_router,
     const AudioReceiveStreamInterface::Config& config,
     const scoped_refptr<AudioState>& audio_state,
-    std::unique_ptr<voe::ChannelReceiveInterface> channel_receive)
+    absl_nonnull std::unique_ptr<voe::ChannelReceiveInterface> channel_receive)
     : env_(env),
       config_(config),
       audio_state_(audio_state),
diff --git a/audio/audio_receive_stream.h b/audio/audio_receive_stream.h
index 1b9bd46..36aeaaa 100644
--- a/audio/audio_receive_stream.h
+++ b/audio/audio_receive_stream.h
@@ -20,6 +20,7 @@
 #include <string>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "absl/strings/string_view.h"
 #include "api/audio/audio_frame.h"
 #include "api/audio/audio_mixer.h"
@@ -57,17 +58,18 @@
  public:
   AudioReceiveStreamImpl(
       const Environment& env,
-      PacketRouter* packet_router,
-      NetEqFactory* neteq_factory,
+      PacketRouter* absl_nonnull packet_router,
+      NetEqFactory* absl_nullable neteq_factory,
       const webrtc::AudioReceiveStreamInterface::Config& config,
       const scoped_refptr<webrtc::AudioState>& audio_state);
   // For unit tests, which need to supply a mock channel receive.
   AudioReceiveStreamImpl(
       const Environment& env,
-      PacketRouter* packet_router,
+      PacketRouter* absl_nonnull packet_router,
       const webrtc::AudioReceiveStreamInterface::Config& config,
       const scoped_refptr<webrtc::AudioState>& audio_state,
-      std::unique_ptr<voe::ChannelReceiveInterface> channel_receive);
+      absl_nonnull std::unique_ptr<voe::ChannelReceiveInterface>
+          channel_receive);
 
   AudioReceiveStreamImpl() = delete;
   AudioReceiveStreamImpl(const AudioReceiveStreamImpl&) = delete;
diff --git a/audio/channel_receive.cc b/audio/channel_receive.cc
index 69810f2..01c961b 100644
--- a/audio/channel_receive.cc
+++ b/audio/channel_receive.cc
@@ -22,6 +22,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "absl/functional/any_invocable.h"
 #include "api/audio/audio_device.h"
 #include "api/audio/audio_mixer.h"
@@ -142,11 +143,10 @@
 class ChannelReceive : public ChannelReceiveInterface,
                        public RtcpPacketTypeCounterObserver {
  public:
-  // Used for receive streams.
   ChannelReceive(const Environment& env,
-                 NetEqFactory* neteq_factory,
-                 AudioDeviceModule* audio_device_module,
-                 Transport* rtcp_send_transport,
+                 NetEqFactory* absl_nullable neteq_factory,
+                 AudioDeviceModule* absl_nonnull audio_device_module,
+                 Transport* absl_nonnull rtcp_send_transport,
                  uint32_t remote_ssrc,
                  size_t jitter_buffer_max_packets,
                  bool jitter_buffer_fast_playout,
@@ -574,9 +574,9 @@
 
 ChannelReceive::ChannelReceive(
     const Environment& env,
-    NetEqFactory* neteq_factory,
-    AudioDeviceModule* audio_device_module,
-    Transport* rtcp_send_transport,
+    NetEqFactory* absl_nullable neteq_factory,
+    AudioDeviceModule* absl_nonnull audio_device_module,
+    Transport* absl_nonnull rtcp_send_transport,
     uint32_t remote_ssrc,
     size_t jitter_buffer_max_packets,
     bool jitter_buffer_fast_playout,
@@ -1218,9 +1218,9 @@
 
 std::unique_ptr<ChannelReceiveInterface> CreateChannelReceive(
     const Environment& env,
-    NetEqFactory* neteq_factory,
-    AudioDeviceModule* audio_device_module,
-    Transport* rtcp_send_transport,
+    NetEqFactory* absl_nullable neteq_factory,
+    AudioDeviceModule* absl_nonnull audio_device_module,
+    Transport* absl_nonnull rtcp_send_transport,
     uint32_t remote_ssrc,
     size_t jitter_buffer_max_packets,
     bool jitter_buffer_fast_playout,
diff --git a/audio/channel_receive.h b/audio/channel_receive.h
index 0a1df9b..c4e5099 100644
--- a/audio/channel_receive.h
+++ b/audio/channel_receive.h
@@ -19,6 +19,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "api/audio/audio_frame.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
@@ -172,9 +173,9 @@
 
 std::unique_ptr<ChannelReceiveInterface> CreateChannelReceive(
     const Environment& env,
-    NetEqFactory* neteq_factory,
-    AudioDeviceModule* audio_device_module,
-    Transport* rtcp_send_transport,
+    NetEqFactory* absl_nullable neteq_factory,
+    AudioDeviceModule* absl_nonnull audio_device_module,
+    Transport* absl_nonnull rtcp_send_transport,
     uint32_t remote_ssrc,
     size_t jitter_buffer_max_packets,
     bool jitter_buffer_fast_playout,
diff --git a/audio/channel_receive_frame_transformer_delegate.cc b/audio/channel_receive_frame_transformer_delegate.cc
index b2422d0..14240b0 100644
--- a/audio/channel_receive_frame_transformer_delegate.cc
+++ b/audio/channel_receive_frame_transformer_delegate.cc
@@ -18,6 +18,7 @@
 #include <string>
 #include <utility>
 
+#include "absl/base/nullability.h"
 #include "api/frame_transformer_interface.h"
 #include "api/rtp_headers.h"
 #include "api/scoped_refptr.h"
@@ -140,7 +141,7 @@
 ChannelReceiveFrameTransformerDelegate::ChannelReceiveFrameTransformerDelegate(
     ReceiveFrameCallback receive_frame_callback,
     scoped_refptr<FrameTransformerInterface> frame_transformer,
-    TaskQueueBase* channel_receive_thread)
+    TaskQueueBase* absl_nonnull channel_receive_thread)
     : receive_frame_callback_(receive_frame_callback),
       frame_transformer_(std::move(frame_transformer)),
       channel_receive_thread_(channel_receive_thread) {}
diff --git a/audio/channel_receive_frame_transformer_delegate.h b/audio/channel_receive_frame_transformer_delegate.h
index a0ba8fd..3165b0e 100644
--- a/audio/channel_receive_frame_transformer_delegate.h
+++ b/audio/channel_receive_frame_transformer_delegate.h
@@ -17,6 +17,7 @@
 #include <span>
 #include <string>
 
+#include "absl/base/nullability.h"
 #include "api/frame_transformer_interface.h"
 #include "api/rtp_headers.h"
 #include "api/scoped_refptr.h"
@@ -40,7 +41,7 @@
   ChannelReceiveFrameTransformerDelegate(
       ReceiveFrameCallback receive_frame_callback,
       scoped_refptr<FrameTransformerInterface> frame_transformer,
-      TaskQueueBase* channel_receive_thread);
+      TaskQueueBase* absl_nonnull channel_receive_thread);
 
   // Registers `this` as callback for `frame_transformer_`, to get the
   // transformed frames.
diff --git a/audio/channel_receive_frame_transformer_delegate_unittest.cc b/audio/channel_receive_frame_transformer_delegate_unittest.cc
index 986cddf..16e6792 100644
--- a/audio/channel_receive_frame_transformer_delegate_unittest.cc
+++ b/audio/channel_receive_frame_transformer_delegate_unittest.cc
@@ -60,12 +60,13 @@
 // Test that the delegate registers itself with the frame transformer on Init().
 TEST(ChannelReceiveFrameTransformerDelegateTest,
      RegisterTransformedFrameCallbackOnInit) {
+  test::RunLoop main_thread;
   scoped_refptr<MockFrameTransformer> mock_frame_transformer =
       make_ref_counted<MockFrameTransformer>();
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
           ChannelReceiveFrameTransformerDelegate::ReceiveFrameCallback(),
-          mock_frame_transformer, nullptr);
+          mock_frame_transformer, main_thread.task_queue());
   EXPECT_CALL(*mock_frame_transformer, RegisterTransformedFrameCallback);
   delegate->Init();
 }
@@ -74,12 +75,13 @@
 // Reset().
 TEST(ChannelReceiveFrameTransformerDelegateTest,
      UnregisterTransformedFrameCallbackOnReset) {
+  test::RunLoop main_thread;
   scoped_refptr<MockFrameTransformer> mock_frame_transformer =
       make_ref_counted<MockFrameTransformer>();
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
           ChannelReceiveFrameTransformerDelegate::ReceiveFrameCallback(),
-          mock_frame_transformer, nullptr);
+          mock_frame_transformer, main_thread.task_queue());
   EXPECT_CALL(*mock_frame_transformer, UnregisterTransformedFrameCallback);
   delegate->Reset();
 }
@@ -94,7 +96,8 @@
   MockChannelReceive mock_channel;
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
-          mock_channel.callback(), mock_frame_transformer, Thread::Current());
+          mock_channel.callback(), mock_frame_transformer,
+          main_thread.task_queue());
   scoped_refptr<TransformedFrameCallback> callback;
   EXPECT_CALL(*mock_frame_transformer, RegisterTransformedFrameCallback)
       .WillOnce(SaveArg<0>(&callback));
@@ -125,7 +128,8 @@
   MockChannelReceive mock_channel;
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
-          mock_channel.callback(), mock_frame_transformer, Thread::Current());
+          mock_channel.callback(), mock_frame_transformer,
+          main_thread.task_queue());
   scoped_refptr<TransformedFrameCallback> callback;
   EXPECT_CALL(*mock_frame_transformer, RegisterTransformedFrameCallback)
       .WillOnce(SaveArg<0>(&callback));
@@ -160,7 +164,8 @@
   MockChannelReceive mock_channel;
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
-          mock_channel.callback(), mock_frame_transformer, Thread::Current());
+          mock_channel.callback(), mock_frame_transformer,
+          main_thread.task_queue());
 
   delegate->Reset();
   EXPECT_CALL(mock_channel, ReceiveFrame).Times(0);
@@ -176,7 +181,8 @@
   MockChannelReceive mock_channel;
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
-          mock_channel.callback(), mock_frame_transformer, Thread::Current());
+          mock_channel.callback(), mock_frame_transformer,
+          main_thread.task_queue());
   const uint8_t data[] = {1, 2, 3, 4};
   std::span<const uint8_t> packet(data, sizeof(data));
   RTPHeader header;
@@ -200,7 +206,7 @@
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
           /*receive_frame_callback=*/nullptr, mock_frame_transformer,
-          Thread::Current());
+          main_thread.task_queue());
   scoped_refptr<TransformedFrameCallback> callback;
   EXPECT_CALL(*mock_frame_transformer, RegisterTransformedFrameCallback)
       .WillOnce(SaveArg<0>(&callback));
@@ -237,7 +243,7 @@
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
           /*receive_frame_callback=*/nullptr, mock_frame_transformer,
-          Thread::Current());
+          main_thread.task_queue());
   scoped_refptr<TransformedFrameCallback> callback;
   EXPECT_CALL(*mock_frame_transformer, RegisterTransformedFrameCallback)
       .WillOnce(SaveArg<0>(&callback));
@@ -275,7 +281,7 @@
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
           /*receive_frame_callback=*/nullptr, mock_frame_transformer,
-          Thread::Current());
+          main_thread.task_queue());
   scoped_refptr<TransformedFrameCallback> callback;
   EXPECT_CALL(*mock_frame_transformer, RegisterTransformedFrameCallback)
       .WillOnce(SaveArg<0>(&callback));
@@ -318,7 +324,7 @@
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
           /*receive_frame_callback=*/nullptr, mock_frame_transformer,
-          Thread::Current());
+          main_thread.task_queue());
   delegate->Init();
   const uint8_t data[] = {1, 2, 3, 4};
   std::span<const uint8_t> packet(data, sizeof(data));
@@ -353,7 +359,8 @@
   MockChannelReceive mock_channel;
   scoped_refptr<ChannelReceiveFrameTransformerDelegate> delegate =
       make_ref_counted<ChannelReceiveFrameTransformerDelegate>(
-          mock_channel.callback(), mock_frame_transformer, Thread::Current());
+          mock_channel.callback(), mock_frame_transformer,
+          main_thread.task_queue());
   delegate->Init();
 
   std::unique_ptr<MockTransformableAudioFrame> audio_frame =
diff --git a/call/BUILD.gn b/call/BUILD.gn
index 000a5ca..3a9f3fd 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -80,6 +80,7 @@
     "../rtc_base/network:sent_packet",
     "../system_wrappers",
     "../video/config:encoder_config",
+    "//third_party/abseil-cpp/absl/base:nullability",
     "//third_party/abseil-cpp/absl/functional:any_invocable",
     "//third_party/abseil-cpp/absl/strings",
     "//third_party/abseil-cpp/absl/strings:string_view",
@@ -357,6 +358,7 @@
     "../video:decode_synchronizer",
     "../video/config:encoder_config",
     "adaptation:resource_adaptation",
+    "//third_party/abseil-cpp/absl/base:nullability",
     "//third_party/abseil-cpp/absl/functional:bind_front",
     "//third_party/abseil-cpp/absl/strings:string_view",
   ]
diff --git a/call/call.cc b/call/call.cc
index e8bd43a..15b8d57 100644
--- a/call/call.cc
+++ b/call/call.cc
@@ -23,6 +23,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "absl/functional/bind_front.h"
 #include "absl/strings/string_view.h"
 #include "api/adaptation/resource.h"
@@ -290,10 +291,10 @@
 
   void DeliverRtcpPacket(CopyOnWriteBuffer packet) override;
 
-  void DeliverRtpPacket(
-      MediaType media_type,
-      RtpPacketReceived packet,
-      OnUndemuxablePacketHandler undemuxable_packet_handler) override;
+  void DeliverRtpPacket(MediaType media_type,
+                        RtpPacketReceived packet,
+                        absl_nonnull OnUndemuxablePacketHandler
+                            undemuxable_packet_handler) override;
 
   void SignalChannelNetworkState(MediaType media, NetworkState state) override;
 
@@ -1420,10 +1421,10 @@
   }
 }
 
-void Call::DeliverRtpPacket(
-    MediaType media_type,
-    RtpPacketReceived packet,
-    OnUndemuxablePacketHandler undemuxable_packet_handler) {
+void Call::DeliverRtpPacket(MediaType media_type,
+                            RtpPacketReceived packet,
+                            absl_nonnull OnUndemuxablePacketHandler
+                                undemuxable_packet_handler) {
   RTC_DCHECK_RUN_ON(network_thread_);
 
   if (receive_time_calculator_) {
diff --git a/call/packet_receiver.h b/call/packet_receiver.h
index a1b5f66..ed63742 100644
--- a/call/packet_receiver.h
+++ b/call/packet_receiver.h
@@ -10,6 +10,7 @@
 #ifndef CALL_PACKET_RECEIVER_H_
 #define CALL_PACKET_RECEIVER_H_
 
+#include "absl/base/nullability.h"
 #include "absl/functional/any_invocable.h"
 #include "api/media_types.h"
 #include "modules/rtp_rtcp/source/rtp_packet_received.h"
@@ -30,10 +31,10 @@
   // Can be called on the network thread or the worker thread.
   // If `media_type` is not Audio or Video, packets may be used for BWE
   // calculations but are not demuxed.
-  virtual void DeliverRtpPacket(
-      MediaType media_type,
-      RtpPacketReceived packet,
-      OnUndemuxablePacketHandler undemuxable_packet_handler) = 0;
+  virtual void DeliverRtpPacket(MediaType media_type,
+                                RtpPacketReceived packet,
+                                absl_nonnull OnUndemuxablePacketHandler
+                                    undemuxable_packet_handler) = 0;
 
  protected:
   virtual ~PacketReceiver() {}
diff --git a/media/BUILD.gn b/media/BUILD.gn
index a8e0165..871fd49 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -670,6 +670,7 @@
     "../video/config:encoder_config",
     "//third_party/abseil-cpp/absl/algorithm",
     "//third_party/abseil-cpp/absl/algorithm:container",
+    "//third_party/abseil-cpp/absl/base:nullability",
     "//third_party/abseil-cpp/absl/functional:any_invocable",
     "//third_party/abseil-cpp/absl/functional:bind_front",
     "//third_party/abseil-cpp/absl/strings",
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index 640ca8d..08c9253 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -26,6 +26,7 @@
 #include <vector>
 
 #include "absl/algorithm/container.h"
+#include "absl/base/nullability.h"
 #include "absl/functional/any_invocable.h"
 #include "absl/functional/bind_front.h"
 #include "absl/strings/match.h"
@@ -2843,11 +2844,11 @@
 // ------------------------ WebRtcVideoReceiveChannel ---------------------
 WebRtcVideoReceiveChannel::WebRtcVideoReceiveChannel(
     const Environment& env,
-    Call* call,
+    Call* absl_nonnull call,
     const MediaConfig& config,
     const VideoOptions& options,
     const CryptoOptions& crypto_options,
-    VideoDecoderFactory* decoder_factory)
+    VideoDecoderFactory* absl_nonnull decoder_factory)
     : MediaChannelUtil(call->network_thread(), config.enable_dscp),
       env_(env),
       network_thread_safety_(PendingTaskSafetyFlag::CreateAttachedToTaskQueue(
diff --git a/media/engine/webrtc_video_engine.h b/media/engine/webrtc_video_engine.h
index 4eebf39..d86596d4 100644
--- a/media/engine/webrtc_video_engine.h
+++ b/media/engine/webrtc_video_engine.h
@@ -23,6 +23,7 @@
 #include <utility>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "absl/functional/any_invocable.h"
 #include "absl/strings/string_view.h"
 #include "api/crypto/crypto_options.h"
@@ -508,11 +509,11 @@
                                   public VideoMediaReceiveChannelInterface {
  public:
   WebRtcVideoReceiveChannel(const Environment& env,
-                            Call* call,
+                            Call* absl_nonnull call,
                             const MediaConfig& config,
                             const VideoOptions& options,
                             const CryptoOptions& crypto_options,
-                            VideoDecoderFactory* decoder_factory);
+                            VideoDecoderFactory* absl_nonnull decoder_factory);
   ~WebRtcVideoReceiveChannel() override;
 
  public:
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index 3629b4d..e2c7838 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -27,6 +27,7 @@
 
 #include "absl/algorithm/algorithm.h"
 #include "absl/algorithm/container.h"
+#include "absl/base/nullability.h"
 #include "absl/functional/any_invocable.h"
 #include "absl/functional/bind_front.h"
 #include "absl/strings/match.h"
@@ -2150,11 +2151,11 @@
 
 WebRtcVoiceReceiveChannel::WebRtcVoiceReceiveChannel(
     const Environment& env,
-    WebRtcVoiceEngine* engine,
+    WebRtcVoiceEngine* absl_nonnull engine,
     const MediaConfig& config,
     const AudioOptions& options,
     const CryptoOptions& crypto_options,
-    Call* call)
+    Call* absl_nonnull call)
     : MediaChannelUtil(call->network_thread(), config.enable_dscp),
       env_(env),
       worker_thread_(call->worker_thread()),
diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h
index 8e2cd90..0cba300 100644
--- a/media/engine/webrtc_voice_engine.h
+++ b/media/engine/webrtc_voice_engine.h
@@ -21,6 +21,7 @@
 #include <string>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "absl/functional/any_invocable.h"
 #include "absl/strings/string_view.h"
 #include "api/audio/audio_device.h"
@@ -310,11 +311,11 @@
       public VoiceMediaReceiveChannelInterface {
  public:
   WebRtcVoiceReceiveChannel(const Environment& env,
-                            WebRtcVoiceEngine* engine,
+                            WebRtcVoiceEngine* absl_nonnull engine,
                             const MediaConfig& config,
                             const AudioOptions& options,
                             const CryptoOptions& crypto_options,
-                            Call* call);
+                            Call* absl_nonnull call);
 
   WebRtcVoiceReceiveChannel() = delete;
   WebRtcVoiceReceiveChannel(const WebRtcVoiceReceiveChannel&) = delete;
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index a8e98f9..faa8cb5 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -103,6 +103,7 @@
     "../rtc_base/containers:flat_set",
     "../rtc_base/network:sent_packet",
     "//third_party/abseil-cpp/absl/algorithm:container",
+    "//third_party/abseil-cpp/absl/base:nullability",
     "//third_party/abseil-cpp/absl/cleanup",
     "//third_party/abseil-cpp/absl/functional:any_invocable",
     "//third_party/abseil-cpp/absl/strings:str_format",
diff --git a/pc/channel.cc b/pc/channel.cc
index d1d7f01..26af6a7 100644
--- a/pc/channel.cc
+++ b/pc/channel.cc
@@ -19,6 +19,7 @@
 #include <vector>
 
 #include "absl/algorithm/container.h"
+#include "absl/base/nullability.h"
 #include "absl/cleanup/cleanup.h"
 #include "absl/functional/any_invocable.h"
 #include "absl/strings/string_view.h"
@@ -171,16 +172,16 @@
 }  // namespace
 
 BaseChannel::BaseChannel(
-    TaskQueueBase* worker_thread,
-    Thread* network_thread,
-    TaskQueueBase* signaling_thread,
+    TaskQueueBase* absl_nonnull worker_thread,
+    Thread* absl_nonnull network_thread,
+    TaskQueueBase* absl_nonnull signaling_thread,
     std::unique_ptr<MediaSendChannelInterface> send_media_channel_impl,
     std::unique_ptr<MediaReceiveChannelInterface> receive_media_channel_impl,
     absl::string_view mid,
     MediaType media_type,
     bool srtp_required,
     CryptoOptions crypto_options,
-    UniqueRandomIdGenerator* ssrc_generator,
+    UniqueRandomIdGenerator* absl_nonnull ssrc_generator,
     ChannelCallbacks callbacks)
     : media_send_channel_(std::move(send_media_channel_impl)),
       media_receive_channel_(std::move(receive_media_channel_impl)),
diff --git a/pc/channel.h b/pc/channel.h
index f3d5815..2516dcf 100644
--- a/pc/channel.h
+++ b/pc/channel.h
@@ -20,6 +20,7 @@
 #include <variant>
 #include <vector>
 
+#include "absl/base/nullability.h"
 #include "absl/functional/any_invocable.h"
 #include "absl/strings/string_view.h"
 #include "api/crypto/crypto_options.h"
@@ -78,16 +79,16 @@
 
   // Constructor for use when the MediaChannels are split
   BaseChannel(
-      TaskQueueBase* worker_thread,
-      Thread* network_thread,
-      TaskQueueBase* signaling_thread,
+      TaskQueueBase* absl_nonnull worker_thread,
+      Thread* absl_nonnull network_thread,
+      TaskQueueBase* absl_nonnull signaling_thread,
       std::unique_ptr<MediaSendChannelInterface> media_send_channel,
       std::unique_ptr<MediaReceiveChannelInterface> media_receive_channel,
       absl::string_view mid,
       MediaType media_type,
       bool srtp_required,
       CryptoOptions crypto_options,
-      UniqueRandomIdGenerator* ssrc_generator,
+      UniqueRandomIdGenerator* absl_nonnull ssrc_generator,
       ChannelCallbacks callbacks = {});
   ~BaseChannel() override;