diff --git a/call/bitrate_estimator_tests.cc b/call/bitrate_estimator_tests.cc
index ae2a6b6..b5c4d8e 100644
--- a/call/bitrate_estimator_tests.cc
+++ b/call/bitrate_estimator_tests.cc
@@ -103,18 +103,18 @@
   virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); }
 
   virtual void SetUp() {
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       CreateCalls();
 
       send_transport_.reset(new test::DirectTransport(
-          &task_queue_,
+          task_queue(),
           std::make_unique<FakeNetworkPipe>(
               Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                              BuiltInNetworkBehaviorConfig())),
           sender_call_.get(), payload_type_map_));
       send_transport_->SetReceiver(receiver_call_->Receiver());
       receive_transport_.reset(new test::DirectTransport(
-          &task_queue_,
+          task_queue(),
           std::make_unique<FakeNetworkPipe>(
               Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                              BuiltInNetworkBehaviorConfig())),
@@ -146,7 +146,7 @@
   }
 
   virtual void TearDown() {
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       for (auto* stream : streams_) {
         stream->StopSending();
         delete stream;
@@ -249,7 +249,7 @@
     "RemoteBitrateEstimatorSingleStream: Instantiating.";
 
 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -260,7 +260,7 @@
 }
 
 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -273,7 +273,7 @@
 }
 
 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -282,7 +282,7 @@
   });
   EXPECT_TRUE(receiver_log_.Wait());
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendConfig()->rtp.extensions[0] =
         RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
     receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE.");
@@ -294,7 +294,7 @@
 
 // This test is flaky. See webrtc:5790.
 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendConfig()->rtp.extensions.push_back(
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId));
     receiver_log_.PushExpectedLogLine(kSingleStreamLog);
@@ -304,7 +304,7 @@
   });
   EXPECT_TRUE(receiver_log_.Wait());
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendConfig()->rtp.extensions[0] =
         RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId);
     receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
@@ -313,7 +313,7 @@
   });
   EXPECT_TRUE(receiver_log_.Wait());
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendConfig()->rtp.extensions[0] =
         RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId);
     receiver_log_.PushExpectedLogLine(kAbsSendTimeLog);
diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc
index 34a1045..de91b66 100644
--- a/call/call_perf_tests.cc
+++ b/call/call_perf_tests.cc
@@ -182,7 +182,7 @@
   AudioReceiveStream* audio_receive_stream;
   std::unique_ptr<DriftingClock> drifting_clock;
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [&]() {
     metrics::Reset();
     rtc::scoped_refptr<TestAudioDeviceModule> fake_audio_device =
         TestAudioDeviceModule::Create(
@@ -218,7 +218,7 @@
                  });
 
     audio_send_transport = std::make_unique<test::PacketTransport>(
-        &task_queue_, sender_call_.get(), &observer,
+        task_queue(), sender_call_.get(), &observer,
         test::PacketTransport::kSender, audio_pt_map,
         std::make_unique<FakeNetworkPipe>(
             Clock::GetRealTimeClock(),
@@ -226,7 +226,7 @@
     audio_send_transport->SetReceiver(receiver_call_->Receiver());
 
     video_send_transport = std::make_unique<test::PacketTransport>(
-        &task_queue_, sender_call_.get(), &observer,
+        task_queue(), sender_call_.get(), &observer,
         test::PacketTransport::kSender, video_pt_map,
         std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
                                           std::make_unique<SimulatedNetwork>(
@@ -234,7 +234,7 @@
     video_send_transport->SetReceiver(receiver_call_->Receiver());
 
     receive_transport = std::make_unique<test::PacketTransport>(
-        &task_queue_, receiver_call_.get(), &observer,
+        task_queue(), receiver_call_.get(), &observer,
         test::PacketTransport::kReceiver, payload_type_map_,
         std::make_unique<FakeNetworkPipe>(Clock::GetRealTimeClock(),
                                           std::make_unique<SimulatedNetwork>(
@@ -297,7 +297,7 @@
   EXPECT_TRUE(observer.Wait())
       << "Timed out while waiting for audio and video to be synchronized.";
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [&]() {
     audio_send_stream->Stop();
     audio_receive_stream->Stop();
 
@@ -984,7 +984,7 @@
     Call* sender_call_;
     TaskQueueBase* const task_queue_;
   } test(test_bitrate_from, test_bitrate_to, test_bitrate_step, min_bwe,
-         start_bwe, max_bwe, &task_queue_);
+         start_bwe, max_bwe, task_queue());
 
   RunBaseTest(&test);
 }
diff --git a/call/rampup_tests.cc b/call/rampup_tests.cc
index 882baf6..9c7a267 100644
--- a/call/rampup_tests.cc
+++ b/call/rampup_tests.cc
@@ -625,7 +625,7 @@
   std::vector<int> loss_rates = {0, 0, 0, 0};
   RampUpDownUpTester test(3, 0, 0, kStartBitrateBps,
                           RtpExtension::kAbsSendTimeUri, true, true, loss_rates,
-                          true, &task_queue_);
+                          true, task_queue());
   RunBaseTest(&test);
 }
 
@@ -641,7 +641,7 @@
   std::vector<int> loss_rates = {0, 0, 0, 0};
   RampUpDownUpTester test(3, 0, 0, kStartBitrateBps,
                           RtpExtension::kTransportSequenceNumberUri, true,
-                          false, loss_rates, true, &task_queue_);
+                          false, loss_rates, true, task_queue());
   RunBaseTest(&test);
 }
 
@@ -653,7 +653,7 @@
   std::vector<int> loss_rates = {20, 0, 0, 0};
   RampUpDownUpTester test(1, 0, 1, kStartBitrateBps,
                           RtpExtension::kTransportSequenceNumberUri, true,
-                          false, loss_rates, false, &task_queue_);
+                          false, loss_rates, false, task_queue());
   RunBaseTest(&test);
 }
 
@@ -670,7 +670,7 @@
   std::vector<int> loss_rates = {0, 0, 0, 0};
   RampUpDownUpTester test(3, 1, 0, kStartBitrateBps,
                           RtpExtension::kTransportSequenceNumberUri, true,
-                          false, loss_rates, false, &task_queue_);
+                          false, loss_rates, false, task_queue());
   RunBaseTest(&test);
 }
 
@@ -679,50 +679,50 @@
   std::vector<int> loss_rates = {0, 0, 0, 0};
   RampUpDownUpTester test(0, 1, 0, kStartBitrateBps,
                           RtpExtension::kTransportSequenceNumberUri, true,
-                          false, loss_rates, false, &task_queue_);
+                          false, loss_rates, false, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(RampUpTest, TOffsetSimulcastRedRtx) {
   RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTimestampOffsetUri, true,
-                    true, true, &task_queue_);
+                    true, true, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(RampUpTest, AbsSendTime) {
   RampUpTester test(1, 0, 0, 0, 0, RtpExtension::kAbsSendTimeUri, false, false,
-                    false, &task_queue_);
+                    false, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(RampUpTest, AbsSendTimeSimulcastRedRtx) {
   RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kAbsSendTimeUri, true, true,
-                    true, &task_queue_);
+                    true, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(RampUpTest, TransportSequenceNumber) {
   RampUpTester test(1, 0, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
-                    false, false, false, &task_queue_);
+                    false, false, false, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(RampUpTest, TransportSequenceNumberSimulcast) {
   RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
-                    false, false, false, &task_queue_);
+                    false, false, false, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(RampUpTest, TransportSequenceNumberSimulcastRedRtx) {
   RampUpTester test(3, 0, 0, 0, 0, RtpExtension::kTransportSequenceNumberUri,
-                    true, true, true, &task_queue_);
+                    true, true, true, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(RampUpTest, AudioTransportSequenceNumber) {
   RampUpTester test(0, 1, 0, 300000, 10000,
                     RtpExtension::kTransportSequenceNumberUri, false, false,
-                    false, &task_queue_);
+                    false, task_queue());
   RunBaseTest(&test);
 }
 }  // namespace webrtc
diff --git a/test/call_test.h b/test/call_test.h
index 234741b..6224a6e 100644
--- a/test/call_test.h
+++ b/test/call_test.h
@@ -174,6 +174,7 @@
   void SetVideoEncoderConfig(const VideoEncoderConfig& config);
   VideoSendStream* GetVideoSendStream();
   FlexfecReceiveStream::Config* GetFlexFecConfig();
+  TaskQueueBase* task_queue() { return &task_queue_; }
 
   Clock* const clock_;
 
@@ -221,7 +222,6 @@
   rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory_;
   test::FakeVideoRenderer fake_renderer_;
 
-  DEPRECATED_SingleThreadedTaskQueueForTesting task_queue_;
 
  private:
   absl::optional<RtpExtension> GetRtpExtensionByUri(
@@ -230,6 +230,7 @@
   void AddRtpExtensionByUri(const std::string& uri,
                             std::vector<RtpExtension>* extensions) const;
 
+  DEPRECATED_SingleThreadedTaskQueueForTesting task_queue_;
   std::vector<RtpExtension> rtp_extensions_;
   rtc::scoped_refptr<AudioProcessing> apm_send_;
   rtc::scoped_refptr<AudioProcessing> apm_recv_;
diff --git a/video/end_to_end_tests/bandwidth_tests.cc b/video/end_to_end_tests/bandwidth_tests.cc
index 440a128..8c9ef05 100644
--- a/video/end_to_end_tests/bandwidth_tests.cc
+++ b/video/end_to_end_tests/bandwidth_tests.cc
@@ -140,12 +140,12 @@
 };
 
 TEST_F(BandwidthEndToEndTest, VerifySendSideBweStats) {
-  BandwidthStatsTest test(true, &task_queue_);
+  BandwidthStatsTest test(true, task_queue());
   RunBaseTest(&test);
 }
 
 TEST_F(BandwidthEndToEndTest, VerifyRecvSideBweStats) {
-  BandwidthStatsTest test(false, &task_queue_);
+  BandwidthStatsTest test(false, task_queue());
   RunBaseTest(&test);
 }
 
@@ -268,7 +268,7 @@
     TestState state_;
     RateLimiter retransmission_rate_limiter_;
     TaskQueueBase* const task_queue_;
-  } test(&task_queue_);
+  } test(task_queue());
 
   RunBaseTest(&test);
 }
@@ -364,7 +364,7 @@
     test::VideoEncoderProxyFactory encoder_factory_;
     std::unique_ptr<VideoBitrateAllocatorFactory> bitrate_allocator_factory_;
     uint32_t bitrate_kbps_ RTC_GUARDED_BY(crit_);
-  } test(&task_queue_);
+  } test(task_queue());
 
   RunBaseTest(&test);
 }
diff --git a/video/end_to_end_tests/call_operation_tests.cc b/video/end_to_end_tests/call_operation_tests.cc
index 923eebd..6774c4d 100644
--- a/video/end_to_end_tests/call_operation_tests.cc
+++ b/video/end_to_end_tests/call_operation_tests.cc
@@ -95,19 +95,19 @@
   std::unique_ptr<test::DirectTransport> receiver_transport;
 
   SendTask(
-      RTC_FROM_HERE, &task_queue_,
+      RTC_FROM_HERE, task_queue(),
       [this, &renderer, &frame_forwarder, &sender_transport,
        &receiver_transport]() {
         CreateCalls();
 
         sender_transport = std::make_unique<test::DirectTransport>(
-            &task_queue_,
+            task_queue(),
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                                BuiltInNetworkBehaviorConfig())),
             sender_call_.get(), payload_type_map_);
         receiver_transport = std::make_unique<test::DirectTransport>(
-            &task_queue_,
+            task_queue(),
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                                BuiltInNetworkBehaviorConfig())),
@@ -137,7 +137,7 @@
   EXPECT_TRUE(renderer.Wait())
       << "Timed out while waiting for the frame to render.";
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &sender_transport, &receiver_transport]() {
              Stop();
              DestroyStreams();
@@ -164,19 +164,19 @@
   std::unique_ptr<test::DirectTransport> receiver_transport;
 
   SendTask(
-      RTC_FROM_HERE, &task_queue_,
+      RTC_FROM_HERE, task_queue(),
       [this, &renderer, &frame_generator, &frame_forwarder, &sender_transport,
        &receiver_transport]() {
         CreateCalls();
 
         sender_transport = std::make_unique<test::DirectTransport>(
-            &task_queue_,
+            task_queue(),
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                                BuiltInNetworkBehaviorConfig())),
             sender_call_.get(), payload_type_map_);
         receiver_transport = std::make_unique<test::DirectTransport>(
-            &task_queue_,
+            task_queue(),
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                                BuiltInNetworkBehaviorConfig())),
@@ -201,7 +201,7 @@
   EXPECT_TRUE(renderer.Wait())
       << "Timed out while waiting for the frame to render.";
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &sender_transport, &receiver_transport]() {
              Stop();
              DestroyStreams();
diff --git a/video/end_to_end_tests/multi_codec_receive_tests.cc b/video/end_to_end_tests/multi_codec_receive_tests.cc
index 487034e..4aaf843 100644
--- a/video/end_to_end_tests/multi_codec_receive_tests.cc
+++ b/video/end_to_end_tests/multi_codec_receive_tests.cc
@@ -128,11 +128,11 @@
 class MultiCodecReceiveTest : public test::CallTest {
  public:
   MultiCodecReceiveTest() {
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       CreateCalls();
 
       send_transport_.reset(new test::PacketTransport(
-          &task_queue_, sender_call_.get(), &observer_,
+          task_queue(), sender_call_.get(), &observer_,
           test::PacketTransport::kSender, kPayloadTypeMap,
           std::make_unique<FakeNetworkPipe>(
               Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
@@ -140,7 +140,7 @@
       send_transport_->SetReceiver(receiver_call_->Receiver());
 
       receive_transport_.reset(new test::PacketTransport(
-          &task_queue_, receiver_call_.get(), &observer_,
+          task_queue(), receiver_call_.get(), &observer_,
           test::PacketTransport::kReceiver, kPayloadTypeMap,
           std::make_unique<FakeNetworkPipe>(
               Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
@@ -150,7 +150,7 @@
   }
 
   virtual ~MultiCodecReceiveTest() {
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       send_transport_.reset();
       receive_transport_.reset();
       DestroyCalls();
@@ -209,7 +209,7 @@
   EXPECT_TRUE(!configs.empty());
 
   // Create and start call.
-  SendTask(RTC_FROM_HERE, &task_queue_, [this, &configs]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this, &configs]() {
     CreateSendConfig(1, 0, 0, send_transport_.get());
     ConfigureEncoder(configs[0]);
     CreateMatchingReceiveConfigs(receive_transport_.get());
@@ -225,7 +225,7 @@
 
   for (size_t i = 1; i < configs.size(); ++i) {
     // Recreate VideoSendStream with new config (codec, temporal layers).
-    SendTask(RTC_FROM_HERE, &task_queue_, [this, i, &configs]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this, i, &configs]() {
       DestroyVideoSendStreams();
       observer_.Reset(PayloadNameToPayloadType(configs[i].payload_name));
 
@@ -238,7 +238,7 @@
     EXPECT_TRUE(observer_.Wait()) << "Timed out waiting for frames.";
   }
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     Stop();
     DestroyStreams();
   });
diff --git a/video/end_to_end_tests/multi_stream_tests.cc b/video/end_to_end_tests/multi_stream_tests.cc
index 6d2a04e..0eed98d 100644
--- a/video/end_to_end_tests/multi_stream_tests.cc
+++ b/video/end_to_end_tests/multi_stream_tests.cc
@@ -92,7 +92,7 @@
 
    private:
     std::unique_ptr<VideoOutputObserver> observers_[kNumStreams];
-  } tester(&task_queue_);
+  } tester(task_queue());
 
   tester.RunTest();
 }
diff --git a/video/end_to_end_tests/network_state_tests.cc b/video/end_to_end_tests/network_state_tests.cc
index a2b1beb..eda6dae 100644
--- a/video/end_to_end_tests/network_state_tests.cc
+++ b/video/end_to_end_tests/network_state_tests.cc
@@ -88,7 +88,7 @@
     Transport* transport) {
   test::VideoEncoderProxyFactory encoder_factory(encoder);
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, network_to_bring_up, &encoder_factory, transport]() {
              CreateSenderCall(Call::Config(send_event_log_.get()));
              sender_call_->SignalChannelNetworkState(network_to_bring_up,
@@ -106,7 +106,7 @@
 
   SleepMs(kSilenceTimeoutMs);
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     Stop();
     DestroyStreams();
     DestroyCalls();
@@ -119,13 +119,13 @@
   std::unique_ptr<test::DirectTransport> sender_transport;
 
   SendTask(
-      RTC_FROM_HERE, &task_queue_,
+      RTC_FROM_HERE, task_queue(),
       [this, &sender_transport, network_to_bring_up, transport]() {
         CreateCalls();
         receiver_call_->SignalChannelNetworkState(network_to_bring_up,
                                                   kNetworkUp);
         sender_transport = std::make_unique<test::DirectTransport>(
-            &task_queue_,
+            task_queue(),
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                                BuiltInNetworkBehaviorConfig())),
@@ -141,7 +141,7 @@
 
   SleepMs(kSilenceTimeoutMs);
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this, &sender_transport]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this, &sender_transport]() {
     Stop();
     DestroyStreams();
     sender_transport.reset();
@@ -351,7 +351,7 @@
     int sender_rtcp_ RTC_GUARDED_BY(test_crit_);
     int receiver_rtcp_ RTC_GUARDED_BY(test_crit_);
     int down_frames_ RTC_GUARDED_BY(test_crit_);
-  } test(&task_queue_);
+  } test(task_queue());
 
   RunBaseTest(&test);
 }
diff --git a/video/end_to_end_tests/probing_tests.cc b/video/end_to_end_tests/probing_tests.cc
index 1885829..34f2a79 100644
--- a/video/end_to_end_tests/probing_tests.cc
+++ b/video/end_to_end_tests/probing_tests.cc
@@ -101,7 +101,7 @@
   bool success = false;
   const int kMaxAttempts = 3;
   for (int i = 0; i < kMaxAttempts; ++i) {
-    InitialProbingTest test(&success, &task_queue_);
+    InitialProbingTest test(&success, task_queue());
     RunBaseTest(&test);
     if (success)
       return;
@@ -181,7 +181,7 @@
   bool success = false;
   const int kMaxAttempts = 3;
   for (int i = 0; i < kMaxAttempts; ++i) {
-    TriggerMidCallProbingTest test(&task_queue_, &success);
+    TriggerMidCallProbingTest test(task_queue(), &success);
     RunBaseTest(&test);
     if (success)
       return;
@@ -313,7 +313,7 @@
   bool success = false;
   const int kMaxAttempts = 3;
   for (int i = 0; i < kMaxAttempts; ++i) {
-    ReconfigureTest test(&task_queue_, &success);
+    ReconfigureTest test(task_queue(), &success);
     RunBaseTest(&test);
     if (success) {
       return;
diff --git a/video/end_to_end_tests/retransmission_tests.cc b/video/end_to_end_tests/retransmission_tests.cc
index 1058db6..7aae577 100644
--- a/video/end_to_end_tests/retransmission_tests.cc
+++ b/video/end_to_end_tests/retransmission_tests.cc
@@ -236,7 +236,7 @@
     VideoSendStream* send_stream_;
     VideoReceiveStream* receive_stream_;
     TaskQueueBase* const task_queue_;
-  } test(&task_queue_);
+  } test(task_queue());
 
   RunBaseTest(&test);
 }
diff --git a/video/end_to_end_tests/rtp_rtcp_tests.cc b/video/end_to_end_tests/rtp_rtcp_tests.cc
index baea1e0..97777a1 100644
--- a/video/end_to_end_tests/rtp_rtcp_tests.cc
+++ b/video/end_to_end_tests/rtp_rtcp_tests.cc
@@ -283,20 +283,20 @@
   VideoEncoderConfig one_stream;
 
   SendTask(
-      RTC_FROM_HERE, &task_queue_,
+      RTC_FROM_HERE, task_queue(),
       [this, &observer, &send_transport, &receive_transport, &one_stream,
        use_rtx]() {
         CreateCalls();
 
         send_transport = std::make_unique<test::PacketTransport>(
-            &task_queue_, sender_call_.get(), &observer,
+            task_queue(), sender_call_.get(), &observer,
             test::PacketTransport::kSender, payload_type_map_,
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(),
                 std::make_unique<SimulatedNetwork>(
                     BuiltInNetworkBehaviorConfig())));
         receive_transport = std::make_unique<test::PacketTransport>(
-            &task_queue_, nullptr, &observer, test::PacketTransport::kReceiver,
+            task_queue(), nullptr, &observer, test::PacketTransport::kReceiver,
             payload_type_map_,
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(),
@@ -335,7 +335,7 @@
   // Test stream resetting more than once to make sure that the state doesn't
   // get set once (this could be due to using std::map::insert for instance).
   for (size_t i = 0; i < 3; ++i) {
-    SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [&]() {
       DestroyVideoSendStreams();
 
       // Re-create VideoSendStream with only one stream.
@@ -357,7 +357,7 @@
     EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet.";
 
     // Reconfigure back to use all streams.
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(
           GetVideoEncoderConfig()->Copy());
     });
@@ -366,14 +366,14 @@
         << "Timed out waiting for all SSRCs to send packets.";
 
     // Reconfigure down to one stream.
-    SendTask(RTC_FROM_HERE, &task_queue_, [this, &one_stream]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this, &one_stream]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(one_stream.Copy());
     });
     observer.ResetExpectedSsrcs(1);
     EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet.";
 
     // Reconfigure back to use all streams.
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(
           GetVideoEncoderConfig()->Copy());
     });
@@ -382,7 +382,7 @@
         << "Timed out waiting for all SSRCs to send packets.";
   }
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &send_transport, &receive_transport]() {
              Stop();
              DestroyStreams();
@@ -483,7 +483,7 @@
   test::FunctionVideoEncoderFactory encoder_factory(
       []() { return VP8Encoder::Create(); });
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [&]() {
     CreateCalls();
 
     BuiltInNetworkBehaviorConfig lossy_delayed_link;
@@ -491,7 +491,7 @@
     lossy_delayed_link.queue_delay_ms = 50;
 
     send_transport = std::make_unique<test::PacketTransport>(
-        &task_queue_, sender_call_.get(), &observer,
+        task_queue(), sender_call_.get(), &observer,
         test::PacketTransport::kSender, payload_type_map_,
         std::make_unique<FakeNetworkPipe>(
             Clock::GetRealTimeClock(),
@@ -500,7 +500,7 @@
 
     BuiltInNetworkBehaviorConfig flawless_link;
     receive_transport = std::make_unique<test::PacketTransport>(
-        &task_queue_, nullptr, &observer, test::PacketTransport::kReceiver,
+        task_queue(), nullptr, &observer, test::PacketTransport::kReceiver,
         payload_type_map_,
         std::make_unique<FakeNetworkPipe>(
             Clock::GetRealTimeClock(),
@@ -561,7 +561,7 @@
   // Initial test.
   EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this, &observer]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this, &observer]() {
     // Ensure monotonicity when the VideoSendStream is restarted.
     Stop();
     observer.ResetPacketCount();
@@ -570,7 +570,7 @@
 
   EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this, &observer]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this, &observer]() {
     // Ensure monotonicity when the VideoSendStream is recreated.
     DestroyVideoSendStreams();
     observer.ResetPacketCount();
@@ -582,7 +582,7 @@
   EXPECT_TRUE(observer.Wait()) << "Timed out waiting for packets.";
 
   // Cleanup.
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &send_transport, &receive_transport]() {
              Stop();
              DestroyStreams();
diff --git a/video/end_to_end_tests/ssrc_tests.cc b/video/end_to_end_tests/ssrc_tests.cc
index 47cb930..1251b45 100644
--- a/video/end_to_end_tests/ssrc_tests.cc
+++ b/video/end_to_end_tests/ssrc_tests.cc
@@ -80,18 +80,18 @@
   std::unique_ptr<PacketInputObserver> input_observer;
 
   SendTask(
-      RTC_FROM_HERE, &task_queue_,
+      RTC_FROM_HERE, task_queue(),
       [this, &send_transport, &receive_transport, &input_observer]() {
         CreateCalls();
 
         send_transport = std::make_unique<test::DirectTransport>(
-            &task_queue_,
+            task_queue(),
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                                BuiltInNetworkBehaviorConfig())),
             sender_call_.get(), payload_type_map_);
         receive_transport = std::make_unique<test::DirectTransport>(
-            &task_queue_,
+            task_queue(),
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(), std::make_unique<SimulatedNetwork>(
                                                BuiltInNetworkBehaviorConfig())),
@@ -116,7 +116,7 @@
   // Wait() waits for a received packet.
   EXPECT_TRUE(input_observer->Wait());
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &send_transport, &receive_transport]() {
              Stop();
              DestroyStreams();
diff --git a/video/end_to_end_tests/stats_tests.cc b/video/end_to_end_tests/stats_tests.cc
index aeef144..88e0ca7 100644
--- a/video/end_to_end_tests/stats_tests.cc
+++ b/video/end_to_end_tests/stats_tests.cc
@@ -528,15 +528,15 @@
   VideoEncoderConfig encoder_config_with_screenshare;
 
   SendTask(
-      RTC_FROM_HERE, &task_queue_,
+      RTC_FROM_HERE, task_queue(),
       [this, &test, &send_config, &recv_config,
        &encoder_config_with_screenshare]() {
         CreateSenderCall(send_config);
         CreateReceiverCall(recv_config);
 
-        receive_transport_ = test.CreateReceiveTransport(&task_queue_);
+        receive_transport_ = test.CreateReceiveTransport(task_queue());
         send_transport_ =
-            test.CreateSendTransport(&task_queue_, sender_call_.get());
+            test.CreateSendTransport(task_queue(), sender_call_.get());
         send_transport_->SetReceiver(receiver_call_->Receiver());
         receive_transport_->SetReceiver(sender_call_->Receiver());
 
@@ -569,7 +569,7 @@
   test.PerformTest();
 
   // Replace old send stream.
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &encoder_config_with_screenshare]() {
              DestroyVideoSendStreams();
              CreateVideoSendStream(encoder_config_with_screenshare);
@@ -580,7 +580,7 @@
   // Continue to run test but now with screenshare.
   test.PerformTest();
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     Stop();
     DestroyStreams();
     send_transport_.reset();
@@ -723,20 +723,20 @@
   std::unique_ptr<test::DirectTransport> sender_transport;
   std::unique_ptr<test::DirectTransport> receiver_transport;
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &sender_transport, &receiver_transport]() {
              BuiltInNetworkBehaviorConfig config;
              config.queue_delay_ms = kSendDelayMs;
              CreateCalls();
              sender_transport = std::make_unique<test::DirectTransport>(
-                 &task_queue_,
+                 task_queue(),
                  std::make_unique<FakeNetworkPipe>(
                      Clock::GetRealTimeClock(),
                      std::make_unique<SimulatedNetwork>(config)),
                  sender_call_.get(), payload_type_map_);
              config.queue_delay_ms = kReceiveDelayMs;
              receiver_transport = std::make_unique<test::DirectTransport>(
-                 &task_queue_,
+                 task_queue(),
                  std::make_unique<FakeNetworkPipe>(
                      Clock::GetRealTimeClock(),
                      std::make_unique<SimulatedNetwork>(config)),
@@ -756,7 +756,7 @@
   int64_t start_time_ms = clock_->TimeInMilliseconds();
   while (true) {
     Call::Stats stats;
-    SendTask(RTC_FROM_HERE, &task_queue_,
+    SendTask(RTC_FROM_HERE, task_queue(),
              [this, &stats]() { stats = sender_call_->GetStats(); });
     ASSERT_GE(start_time_ms + kDefaultTimeoutMs, clock_->TimeInMilliseconds())
         << "No RTT stats before timeout!";
@@ -770,7 +770,7 @@
     SleepMs(10);
   }
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &sender_transport, &receiver_transport]() {
              Stop();
              DestroyStreams();
diff --git a/video/end_to_end_tests/transport_feedback_tests.cc b/video/end_to_end_tests/transport_feedback_tests.cc
index 8e59ea8..0f7b737 100644
--- a/video/end_to_end_tests/transport_feedback_tests.cc
+++ b/video/end_to_end_tests/transport_feedback_tests.cc
@@ -238,7 +238,7 @@
     uint32_t first_media_ssrc_;
     std::map<uint32_t, uint32_t> rtx_to_media_ssrcs_;
     RtpExtensionHeaderObserver* observer_;
-  } tester(&task_queue_);
+  } tester(task_queue());
 
   tester.RunTest();
 }
diff --git a/video/picture_id_tests.cc b/video/picture_id_tests.cc
index 6fca578..267a8e0 100644
--- a/video/picture_id_tests.cc
+++ b/video/picture_id_tests.cc
@@ -223,7 +223,7 @@
   PictureIdTest() : num_temporal_layers_(GetParam()) {}
 
   virtual ~PictureIdTest() {
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       send_transport_.reset();
       receive_transport_.reset();
       DestroyCalls();
@@ -253,11 +253,11 @@
       new PictureIdObserver(PayloadStringToCodecType(payload_name)));
 
   SendTask(
-      RTC_FROM_HERE, &task_queue_, [this, encoder_factory, payload_name]() {
+      RTC_FROM_HERE, task_queue(), [this, encoder_factory, payload_name]() {
         CreateCalls();
 
         send_transport_.reset(new test::PacketTransport(
-            &task_queue_, sender_call_.get(), observer_.get(),
+            task_queue(), sender_call_.get(), observer_.get(),
             test::PacketTransport::kSender, payload_type_map_,
             std::make_unique<FakeNetworkPipe>(
                 Clock::GetRealTimeClock(),
@@ -298,7 +298,7 @@
 
 void PictureIdTest::TestPictureIdContinuousAfterReconfigure(
     const std::vector<int>& ssrc_counts) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     CreateVideoStreams();
     CreateFrameGeneratorCapturer(kFrameRate, kFrameMaxWidth, kFrameMaxHeight);
 
@@ -316,14 +316,14 @@
     observer_->SetExpectedSsrcs(ssrc_count);
     observer_->ResetObservedSsrcs();
     // Make sure the picture_id sequence is continuous on reinit and recreate.
-    SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this]() {
       GetVideoSendStream()->ReconfigureVideoEncoder(
           GetVideoEncoderConfig()->Copy());
     });
     EXPECT_TRUE(observer_->Wait()) << "Timed out waiting for packets.";
   }
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     Stop();
     DestroyStreams();
   });
@@ -331,7 +331,7 @@
 
 void PictureIdTest::TestPictureIdIncreaseAfterRecreateStreams(
     const std::vector<int>& ssrc_counts) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     CreateVideoStreams();
     CreateFrameGeneratorCapturer(kFrameRate, kFrameMaxWidth, kFrameMaxHeight);
 
@@ -346,7 +346,7 @@
   // with it, therefore it is expected that some frames might be lost.
   observer_->SetMaxExpectedPictureIdGap(kMaxFramesLost);
   for (int ssrc_count : ssrc_counts) {
-    SendTask(RTC_FROM_HERE, &task_queue_, [this, &ssrc_count]() {
+    SendTask(RTC_FROM_HERE, task_queue(), [this, &ssrc_count]() {
       DestroyVideoSendStreams();
 
       SetVideoEncoderConfig(ssrc_count);
@@ -361,7 +361,7 @@
     EXPECT_TRUE(observer_->Wait()) << "Timed out waiting for packets.";
   }
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     Stop();
     DestroyStreams();
   });
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index 091c1f3..8f7d612 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -1189,7 +1189,7 @@
     network_behavior = std::move(injection_components_->sender_network);
   }
   return std::make_unique<test::LayerFilteringTransport>(
-      &task_queue_,
+      task_queue(),
       std::make_unique<FakeNetworkPipe>(clock_, std::move(network_behavior)),
       sender_call_.get(), kPayloadTypeVP8, kPayloadTypeVP9,
       params_.video[0].selected_tl, params_.ss[0].selected_sl,
@@ -1207,7 +1207,7 @@
     network_behavior = std::move(injection_components_->receiver_network);
   }
   return std::make_unique<test::DirectTransport>(
-      &task_queue_,
+      task_queue(),
       std::make_unique<FakeNetworkPipe>(clock_, std::move(network_behavior)),
       receiver_call_.get(), payload_type_map_);
 }
@@ -1255,7 +1255,7 @@
     recv_event_log_ = std::make_unique<RtcEventLogNull>();
   }
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &params, &send_transport, &recv_transport]() {
              Call::Config send_call_config(send_event_log_.get());
              Call::Config recv_call_config(recv_event_log_.get());
@@ -1286,9 +1286,9 @@
       static_cast<size_t>(params_.ss[0].selected_stream),
       params.ss[0].selected_sl, params_.video[0].selected_tl,
       is_quick_test_enabled, clock_, params_.logging.rtp_dump_name,
-      &task_queue_);
+      task_queue());
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [&]() {
     analyzer_->SetCall(sender_call_.get());
     analyzer_->SetReceiver(receiver_call_->Receiver());
     send_transport->SetReceiver(analyzer_.get());
@@ -1334,7 +1334,7 @@
 
   analyzer_->Wait();
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [&]() {
     StopThumbnails();
     Stop();
 
@@ -1477,7 +1477,7 @@
     recv_event_log_ = std::make_unique<RtcEventLogNull>();
   }
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [&]() {
     params_ = params;
     CheckParamsAndInjectionComponents();
 
@@ -1564,9 +1564,9 @@
     Start();
   });
 
-  test::PressEnterToContinue(&task_queue_);
+  test::PressEnterToContinue(task_queue());
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [&]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [&]() {
     Stop();
     DestroyStreams();
 
diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc
index 554c1ff..28f6f33 100644
--- a/video/video_send_stream_tests.cc
+++ b/video/video_send_stream_tests.cc
@@ -116,7 +116,7 @@
 };
 
 TEST_F(VideoSendStreamTest, CanStartStartedStream) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     CreateSenderCall();
 
     test::NullTransport transport;
@@ -130,7 +130,7 @@
 }
 
 TEST_F(VideoSendStreamTest, CanStopStoppedStream) {
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     CreateSenderCall();
 
     test::NullTransport transport;
@@ -1793,7 +1793,7 @@
     webrtc::SequenceChecker task_queue_thread_;
     TaskQueueBase* const task_queue_;
     Call* call_ RTC_GUARDED_BY(task_queue_thread_);
-  } test(&task_queue_);
+  } test(task_queue());
 
   RunBaseTest(&test);
 }
@@ -1858,7 +1858,7 @@
     int packets_sent_ RTC_GUARDED_BY(lock_);
     int transport_overhead_;
     const size_t kMaxRtpPacketSize = 1000;
-  } test(&task_queue_);
+  } test(task_queue());
 
   RunBaseTest(&test);
 }
@@ -1986,7 +1986,7 @@
 TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrate) {
   auto reset_fun = [](const VideoSendStream::Config& send_stream_config,
                       const VideoEncoderConfig& encoder_config) {};
-  MaxPaddingSetTest<decltype(reset_fun)> test(false, &reset_fun, &task_queue_);
+  MaxPaddingSetTest<decltype(reset_fun)> test(false, &reset_fun, task_queue());
   RunBaseTest(&test);
 }
 
@@ -1994,7 +1994,7 @@
   // Function for removing and recreating the send stream with a new config.
   auto reset_fun = [this](const VideoSendStream::Config& send_stream_config,
                           const VideoEncoderConfig& encoder_config) {
-    RTC_DCHECK(task_queue_.IsCurrent());
+    RTC_DCHECK(task_queue()->IsCurrent());
     Stop();
     DestroyVideoSendStreams();
     SetVideoSendConfig(send_stream_config);
@@ -2003,7 +2003,7 @@
     SetVideoDegradation(DegradationPreference::MAINTAIN_RESOLUTION);
     Start();
   };
-  MaxPaddingSetTest<decltype(reset_fun)> test(true, &reset_fun, &task_queue_);
+  MaxPaddingSetTest<decltype(reset_fun)> test(true, &reset_fun, task_queue());
   RunBaseTest(&test);
 }
 
@@ -2068,7 +2068,7 @@
   EncoderObserver encoder;
   test::VideoEncoderProxyFactory encoder_factory(&encoder);
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this, &transport, &encoder_factory]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this, &transport, &encoder_factory]() {
     CreateSenderCall();
     CreateSendConfig(1, 0, 0, &transport);
     GetVideoSendConfig()->encoder_settings.encoder_factory = &encoder_factory;
@@ -2080,14 +2080,14 @@
 
   encoder.WaitForResolution(kDefaultWidth, kDefaultHeight);
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     frame_generator_capturer_->ChangeResolution(kDefaultWidth * 2,
                                                 kDefaultHeight * 2);
   });
 
   encoder.WaitForResolution(kDefaultWidth * 2, kDefaultHeight * 2);
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     DestroyStreams();
     DestroyCalls();
   });
@@ -2225,7 +2225,7 @@
   encoder_factory.SetHasInternalSource(true);
   test::FrameForwarder forwarder;
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &transport, &encoder_factory, &forwarder]() {
              CreateSenderCall();
              CreateSendConfig(1, 0, 0, &transport);
@@ -2245,19 +2245,19 @@
 
   EXPECT_TRUE(encoder.WaitForEncoderInit());
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this]() { GetVideoSendStream()->Start(); });
   EXPECT_TRUE(encoder.WaitBitrateChanged(true));
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this]() { GetVideoSendStream()->Stop(); });
   EXPECT_TRUE(encoder.WaitBitrateChanged(false));
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this]() { GetVideoSendStream()->Start(); });
   EXPECT_TRUE(encoder.WaitBitrateChanged(true));
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     DestroyStreams();
     DestroyCalls();
   });
@@ -2274,7 +2274,7 @@
   encoder_factory.SetHasInternalSource(true);
   test::FrameForwarder forwarder;
 
-  SendTask(RTC_FROM_HERE, &task_queue_,
+  SendTask(RTC_FROM_HERE, task_queue(),
            [this, &transport, &encoder_factory, &forwarder]() {
              CreateSenderCall();
              // Create two simulcast streams.
@@ -2298,14 +2298,14 @@
 
   // When we turn on the simulcast layers it will update the BitrateAllocator,
   // which in turn updates the VideoEncoder's bitrate.
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendStream()->UpdateActiveSimulcastLayers({true, true});
   });
   EXPECT_TRUE(encoder.WaitBitrateChanged(true));
 
   GetVideoEncoderConfig()->simulcast_layers[0].active = true;
   GetVideoEncoderConfig()->simulcast_layers[1].active = false;
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendStream()->ReconfigureVideoEncoder(
         GetVideoEncoderConfig()->Copy());
   });
@@ -2321,12 +2321,12 @@
   // Turning off both simulcast layers should trigger a bitrate change of 0.
   GetVideoEncoderConfig()->simulcast_layers[0].active = false;
   GetVideoEncoderConfig()->simulcast_layers[1].active = false;
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     GetVideoSendStream()->UpdateActiveSimulcastLayers({false, false});
   });
   EXPECT_TRUE(encoder.WaitBitrateChanged(false));
 
-  SendTask(RTC_FROM_HERE, &task_queue_, [this]() {
+  SendTask(RTC_FROM_HERE, task_queue(), [this]() {
     DestroyStreams();
     DestroyCalls();
   });
@@ -2464,7 +2464,7 @@
     bool released_ RTC_GUARDED_BY(crit_);
     test::VideoEncoderProxyFactory encoder_factory_;
     VideoEncoderConfig encoder_config_;
-  } test_encoder(&task_queue_);
+  } test_encoder(task_queue());
 
   RunBaseTest(&test_encoder);
 
@@ -2989,7 +2989,7 @@
     test::VideoEncoderProxyFactory encoder_factory_;
     std::unique_ptr<VideoBitrateAllocatorFactory> bitrate_allocator_factory_;
     webrtc::VideoEncoderConfig encoder_config_;
-  } test(&task_queue_);
+  } test(task_queue());
 
   RunBaseTest(&test);
 }
@@ -3723,7 +3723,7 @@
     uint32_t max_bitrate_bps_ RTC_GUARDED_BY(&crit_);
     bool first_packet_sent_ RTC_GUARDED_BY(&crit_);
     rtc::Event bitrate_changed_event_;
-  } test(&task_queue_);
+  } test(task_queue());
   RunBaseTest(&test);
 }
 
@@ -3942,7 +3942,7 @@
   auto reset_fun = [this](const VideoSendStream::Config& send_stream_config,
                           const VideoEncoderConfig& encoder_config,
                           test::BaseTest* test) {
-    SendTask(RTC_FROM_HERE, &task_queue_,
+    SendTask(RTC_FROM_HERE, task_queue(),
              [this, &send_stream_config, &encoder_config, &test]() {
                Stop();
                DestroyVideoSendStreams();
