In video replace non-owning pointer to rtc::TaskQueue with non-owning pointer to TaskQueueBase

rtc::TaskQueue is a simple wrapper over TaskQueueBase and adds no
extra features when task queue is used without passing ownership.

Reducing usage of the internal rtc::TaskQueue wrapper gives users more flexibility how TaskQueueBase* is stored.

Bug: webrtc:14169
Change-Id: If5c8827544c843502c7dfcef775ac558de79ec3a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/268189
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37549}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index f4d9ff7..2d6ddb3 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -90,7 +90,6 @@
     "../../rtc_base:logging",
     "../../rtc_base:macromagic",
     "../../rtc_base:rtc_numerics",
-    "../../rtc_base:rtc_task_queue",
     "../../rtc_base/experiments:field_trial_parser",
     "../../rtc_base/task_utils:repeating_task",
     "../../system_wrappers",
@@ -249,7 +248,6 @@
     "../../rtc_base:macromagic",
     "../../rtc_base:rtc_event",
     "../../rtc_base:rtc_numerics",
-    "../../rtc_base:rtc_task_queue",
     "../../rtc_base:safe_conversions",
     "../../rtc_base:threading",
     "../../rtc_base:timeutils",
@@ -439,7 +437,6 @@
     "../../rtc_base:rate_statistics",
     "../../rtc_base:refcount",
     "../../rtc_base:rtc_numerics",
-    "../../rtc_base:rtc_task_queue",
     "../../rtc_base:stringutils",
     "../../rtc_base:timeutils",
     "../../rtc_base:weak_ptr",
@@ -868,7 +865,6 @@
       "../../rtc_base:checks",
       "../../rtc_base:macromagic",
       "../../rtc_base:rtc_event",
-      "../../rtc_base:rtc_task_queue",
       "../../rtc_base:timeutils",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/system:no_unique_address",
@@ -1153,6 +1149,7 @@
       "../../api:scoped_refptr",
       "../../api:simulcast_test_fixture_api",
       "../../api:videocodec_test_fixture_api",
+      "../../api/task_queue",
       "../../api/task_queue:default_task_queue_factory",
       "../../api/test/video:function_video_factory",
       "../../api/units:data_size",
@@ -1185,7 +1182,6 @@
       "../../rtc_base:rtc_base_tests_utils",
       "../../rtc_base:rtc_event",
       "../../rtc_base:rtc_numerics",
-      "../../rtc_base:rtc_task_queue",
       "../../rtc_base:stringutils",
       "../../rtc_base:task_queue_for_test",
       "../../rtc_base:timeutils",
diff --git a/modules/video_coding/frame_buffer2.cc b/modules/video_coding/frame_buffer2.cc
index 7e6d622..fbd3c53 100644
--- a/modules/video_coding/frame_buffer2.cc
+++ b/modules/video_coding/frame_buffer2.cc
@@ -83,7 +83,7 @@
 
 void FrameBuffer::NextFrame(int64_t max_wait_time_ms,
                             bool keyframe_required,
-                            rtc::TaskQueue* callback_queue,
+                            TaskQueueBase* callback_queue,
                             NextFrameCallback handler) {
   RTC_DCHECK_RUN_ON(&callback_checker_);
   RTC_DCHECK(callback_queue->IsCurrent());
@@ -107,7 +107,7 @@
   RTC_DCHECK(!callback_task_.Running());
   int64_t wait_ms = FindNextFrame(clock_->CurrentTime());
   callback_task_ = RepeatingTaskHandle::DelayedStart(
-      callback_queue_->Get(), TimeDelta::Millis(wait_ms),
+      callback_queue_, TimeDelta::Millis(wait_ms),
       [this] {
         RTC_DCHECK_RUN_ON(&callback_checker_);
         // If this task has not been cancelled, we did not get any new frames
diff --git a/modules/video_coding/frame_buffer2.h b/modules/video_coding/frame_buffer2.h
index 1315d2f..13918b0 100644
--- a/modules/video_coding/frame_buffer2.h
+++ b/modules/video_coding/frame_buffer2.h
@@ -20,6 +20,7 @@
 #include "absl/container/inlined_vector.h"
 #include "api/field_trials_view.h"
 #include "api/sequence_checker.h"
+#include "api/task_queue/task_queue_base.h"
 #include "api/video/encoded_frame.h"
 #include "modules/video_coding/include/video_coding_defines.h"
 #include "modules/video_coding/timing/inter_frame_delay.h"
@@ -31,7 +32,6 @@
 #include "rtc_base/numerics/sequence_number_util.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/system/no_unique_address.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/thread_annotations.h"
 
@@ -66,7 +66,7 @@
   // or with nullptr if no frame is ready for decoding after `max_wait_time_ms`.
   void NextFrame(int64_t max_wait_time_ms,
                  bool keyframe_required,
-                 rtc::TaskQueue* callback_queue,
+                 TaskQueueBase* callback_queue,
                  NextFrameCallback handler);
 
   // Tells the FrameBuffer which protection mode that is in use. Affects
@@ -166,7 +166,7 @@
   Mutex mutex_;
   Clock* const clock_;
 
-  rtc::TaskQueue* callback_queue_ RTC_GUARDED_BY(mutex_);
+  TaskQueueBase* callback_queue_ RTC_GUARDED_BY(mutex_);
   RepeatingTaskHandle callback_task_ RTC_GUARDED_BY(mutex_);
   NextFrameCallback frame_handler_ RTC_GUARDED_BY(mutex_);
   int64_t latest_return_time_ms_ RTC_GUARDED_BY(mutex_);
diff --git a/modules/video_coding/frame_buffer2_unittest.cc b/modules/video_coding/frame_buffer2_unittest.cc
index 4faafa6..2c21a86 100644
--- a/modules/video_coding/frame_buffer2_unittest.cc
+++ b/modules/video_coding/frame_buffer2_unittest.cc
@@ -16,6 +16,7 @@
 #include <memory>
 #include <vector>
 
+#include "api/task_queue/task_queue_base.h"
 #include "api/units/time_delta.h"
 #include "api/units/timestamp.h"
 #include "modules/video_coding/frame_object.h"
@@ -185,8 +186,9 @@
   }
 
   void ExtractFrame(int64_t max_wait_time = 0, bool keyframe_required = false) {
-    time_task_queue_.PostTask([this, max_wait_time, keyframe_required]() {
-      buffer_->NextFrame(max_wait_time, keyframe_required, &time_task_queue_,
+    time_task_queue_->PostTask([this, max_wait_time, keyframe_required]() {
+      buffer_->NextFrame(max_wait_time, keyframe_required,
+                         time_task_queue_.get(),
                          [this](std::unique_ptr<EncodedFrame> frame) {
                            frames_.emplace_back(std::move(frame));
                          });
@@ -218,7 +220,7 @@
 
   test::ScopedKeyValueConfig field_trials_;
   webrtc::GlobalSimulatedTimeController time_controller_;
-  rtc::TaskQueue time_task_queue_;
+  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> time_task_queue_;
   VCMTimingFake timing_;
   std::unique_ptr<FrameBuffer> buffer_;
   std::vector<std::unique_ptr<EncodedFrame>> frames_;
diff --git a/modules/video_coding/nack_requester.cc b/modules/video_coding/nack_requester.cc
index 9c131a4..80dfe86 100644
--- a/modules/video_coding/nack_requester.cc
+++ b/modules/video_coding/nack_requester.cc
@@ -19,7 +19,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/experiments/field_trial_parser.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/task_queue.h"
 
 namespace webrtc {
 
diff --git a/modules/video_coding/nack_requester.h b/modules/video_coding/nack_requester.h
index 73bb493..c860787 100644
--- a/modules/video_coding/nack_requester.h
+++ b/modules/video_coding/nack_requester.h
@@ -20,12 +20,12 @@
 #include "api/field_trials_view.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/pending_task_safety_flag.h"
+#include "api/task_queue/task_queue_base.h"
 #include "api/units/time_delta.h"
 #include "api/units/timestamp.h"
 #include "modules/include/module_common_types.h"
 #include "modules/video_coding/histogram.h"
 #include "rtc_base/numerics/sequence_number_util.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/thread_annotations.h"
 #include "system_wrappers/include/clock.h"
diff --git a/modules/video_coding/utility/bandwidth_quality_scaler.cc b/modules/video_coding/utility/bandwidth_quality_scaler.cc
index 12f8a49..13502a1 100644
--- a/modules/video_coding/utility/bandwidth_quality_scaler.cc
+++ b/modules/video_coding/utility/bandwidth_quality_scaler.cc
@@ -21,7 +21,6 @@
 #include "rtc_base/experiments/bandwidth_quality_scaler_settings.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/numerics/exp_filter.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/weak_ptr.h"
 
diff --git a/modules/video_coding/utility/bandwidth_quality_scaler.h b/modules/video_coding/utility/bandwidth_quality_scaler.h
index f35d607..7cd1de0 100644
--- a/modules/video_coding/utility/bandwidth_quality_scaler.h
+++ b/modules/video_coding/utility/bandwidth_quality_scaler.h
@@ -27,7 +27,6 @@
 #include "rtc_base/rate_statistics.h"
 #include "rtc_base/ref_count.h"
 #include "rtc_base/system/no_unique_address.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/weak_ptr.h"
 
 namespace webrtc {
diff --git a/modules/video_coding/utility/quality_scaler.cc b/modules/video_coding/utility/quality_scaler.cc
index d7e8b57..28252b4 100644
--- a/modules/video_coding/utility/quality_scaler.cc
+++ b/modules/video_coding/utility/quality_scaler.cc
@@ -19,7 +19,6 @@
 #include "rtc_base/experiments/quality_scaler_settings.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/numerics/exp_filter.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/weak_ptr.h"
 
 // TODO(kthelgason): Some versions of Android have issues with log2.
diff --git a/modules/video_coding/utility/quality_scaler.h b/modules/video_coding/utility/quality_scaler.h
index 898bb72..93014e3 100644
--- a/modules/video_coding/utility/quality_scaler.h
+++ b/modules/video_coding/utility/quality_scaler.h
@@ -24,7 +24,6 @@
 #include "rtc_base/numerics/moving_average.h"
 #include "rtc_base/ref_count.h"
 #include "rtc_base/system/no_unique_address.h"
-#include "rtc_base/task_queue.h"
 
 namespace webrtc {
 
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index 4648fd4..b7394db 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -620,6 +620,7 @@
 webrtc_fuzzer_test("frame_buffer2_fuzzer") {
   sources = [ "frame_buffer2_fuzzer.cc" ]
   deps = [
+    "../../api/task_queue",
     "../../modules/video_coding/",
     "../../modules/video_coding/timing:timing_module",
     "../../test:scoped_key_value_config",
diff --git a/test/fuzzers/frame_buffer2_fuzzer.cc b/test/fuzzers/frame_buffer2_fuzzer.cc
index 32ac6be..944f069 100644
--- a/test/fuzzers/frame_buffer2_fuzzer.cc
+++ b/test/fuzzers/frame_buffer2_fuzzer.cc
@@ -8,6 +8,9 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include <memory>
+
+#include "api/task_queue/task_queue_base.h"
 #include "modules/video_coding/frame_buffer2.h"
 #include "modules/video_coding/timing/timing.h"
 #include "test/scoped_key_value_config.h"
@@ -66,9 +69,9 @@
   }
   DataReader reader(data, size);
   GlobalSimulatedTimeController time_controller(Timestamp::Seconds(0));
-  rtc::TaskQueue task_queue(
+  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> task_queue =
       time_controller.GetTaskQueueFactory()->CreateTaskQueue(
-          "time_tq", TaskQueueFactory::Priority::NORMAL));
+          "time_tq", TaskQueueFactory::Priority::NORMAL);
   test::ScopedKeyValueConfig field_trials;
   VCMTiming timing(time_controller.GetClock(), field_trials);
   video_coding::FrameBuffer frame_buffer(time_controller.GetClock(), &timing,
@@ -94,11 +97,11 @@
         next_frame_task_running = true;
         bool keyframe_required = reader.GetNum<uint8_t>() % 2;
         int max_wait_time_ms = reader.GetNum<uint8_t>();
-        task_queue.PostTask([&task_queue, &frame_buffer,
-                             &next_frame_task_running, keyframe_required,
-                             max_wait_time_ms] {
+        task_queue->PostTask([&task_queue, &frame_buffer,
+                              &next_frame_task_running, keyframe_required,
+                              max_wait_time_ms] {
           frame_buffer.NextFrame(
-              max_wait_time_ms, keyframe_required, &task_queue,
+              max_wait_time_ms, keyframe_required, task_queue.get(),
               [&next_frame_task_running](std::unique_ptr<EncodedFrame> frame) {
                 next_frame_task_running = false;
               });
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 80088e4..c60d9df 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -276,7 +276,6 @@
     "../rtc_base:checks",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:rtc_task_queue",
     "../system_wrappers",
     "../system_wrappers:field_trial",
   ]
diff --git a/video/adaptation/BUILD.gn b/video/adaptation/BUILD.gn
index b2f5f27..aadf615 100644
--- a/video/adaptation/BUILD.gn
+++ b/video/adaptation/BUILD.gn
@@ -55,7 +55,6 @@
     "../../rtc_base:refcount",
     "../../rtc_base:rtc_event",
     "../../rtc_base:rtc_numerics",
-    "../../rtc_base:rtc_task_queue",
     "../../rtc_base:safe_conversions",
     "../../rtc_base:stringutils",
     "../../rtc_base:timeutils",
@@ -108,7 +107,6 @@
       "../../rtc_base:rtc_base_tests_utils",
       "../../rtc_base:rtc_event",
       "../../rtc_base:rtc_numerics",
-      "../../rtc_base:rtc_task_queue",
       "../../rtc_base:task_queue_for_test",
       "../../rtc_base:threading",
       "../../test:field_trial",
diff --git a/video/adaptation/bandwidth_quality_scaler_resource.h b/video/adaptation/bandwidth_quality_scaler_resource.h
index bec864b..a57c990 100644
--- a/video/adaptation/bandwidth_quality_scaler_resource.h
+++ b/video/adaptation/bandwidth_quality_scaler_resource.h
@@ -23,7 +23,6 @@
 #include "call/adaptation/degradation_preference_provider.h"
 #include "call/adaptation/resource_adaptation_processor_interface.h"
 #include "modules/video_coding/utility/bandwidth_quality_scaler.h"
-#include "rtc_base/task_queue.h"
 #include "video/adaptation/video_stream_encoder_resource.h"
 
 namespace webrtc {
diff --git a/video/adaptation/encode_usage_resource.h b/video/adaptation/encode_usage_resource.h
index 689ae70..c391132 100644
--- a/video/adaptation/encode_usage_resource.h
+++ b/video/adaptation/encode_usage_resource.h
@@ -17,7 +17,6 @@
 #include "absl/types/optional.h"
 #include "api/scoped_refptr.h"
 #include "api/video/video_adaptation_reason.h"
-#include "rtc_base/task_queue.h"
 #include "video/adaptation/overuse_frame_detector.h"
 #include "video/adaptation/video_stream_encoder_resource.h"
 
diff --git a/video/adaptation/quality_scaler_resource.h b/video/adaptation/quality_scaler_resource.h
index 6e4b83f..cbb6d3d 100644
--- a/video/adaptation/quality_scaler_resource.h
+++ b/video/adaptation/quality_scaler_resource.h
@@ -22,7 +22,6 @@
 #include "call/adaptation/degradation_preference_provider.h"
 #include "call/adaptation/resource_adaptation_processor_interface.h"
 #include "modules/video_coding/utility/quality_scaler.h"
-#include "rtc_base/task_queue.h"
 #include "video/adaptation/video_stream_encoder_resource.h"
 
 namespace webrtc {
diff --git a/video/adaptation/video_stream_encoder_resource_manager.cc b/video/adaptation/video_stream_encoder_resource_manager.cc
index bd04e5b..2470bc8 100644
--- a/video/adaptation/video_stream_encoder_resource_manager.cc
+++ b/video/adaptation/video_stream_encoder_resource_manager.cc
@@ -308,14 +308,13 @@
     default;
 
 void VideoStreamEncoderResourceManager::Initialize(
-    rtc::TaskQueue* encoder_queue) {
+    TaskQueueBase* encoder_queue) {
   RTC_DCHECK(!encoder_queue_);
   RTC_DCHECK(encoder_queue);
   encoder_queue_ = encoder_queue;
-  encode_usage_resource_->RegisterEncoderTaskQueue(encoder_queue_->Get());
-  quality_scaler_resource_->RegisterEncoderTaskQueue(encoder_queue_->Get());
-  bandwidth_quality_scaler_resource_->RegisterEncoderTaskQueue(
-      encoder_queue_->Get());
+  encode_usage_resource_->RegisterEncoderTaskQueue(encoder_queue_);
+  quality_scaler_resource_->RegisterEncoderTaskQueue(encoder_queue_);
+  bandwidth_quality_scaler_resource_->RegisterEncoderTaskQueue(encoder_queue_);
 }
 
 void VideoStreamEncoderResourceManager::SetAdaptationProcessor(
@@ -374,7 +373,7 @@
   // resource is active for the lifetme of the stream (until
   // StopManagedResources() is called).
   pixel_limit_resource_ =
-      PixelLimitResource::Create(encoder_queue_->Get(), input_state_provider_);
+      PixelLimitResource::Create(encoder_queue_, input_state_provider_);
   pixel_limit_resource_->SetMaxPixels(max_pixels);
   AddResource(pixel_limit_resource_, VideoAdaptationReason::kCpu);
 }
diff --git a/video/adaptation/video_stream_encoder_resource_manager.h b/video/adaptation/video_stream_encoder_resource_manager.h
index 00c13e3..61660dd 100644
--- a/video/adaptation/video_stream_encoder_resource_manager.h
+++ b/video/adaptation/video_stream_encoder_resource_manager.h
@@ -40,7 +40,6 @@
 #include "rtc_base/ref_count.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/synchronization/mutex.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/thread_annotations.h"
 #include "system_wrappers/include/clock.h"
 #include "video/adaptation/balanced_constraint.h"
@@ -84,7 +83,7 @@
       const FieldTrialsView& field_trials);
   ~VideoStreamEncoderResourceManager() override;
 
-  void Initialize(rtc::TaskQueue* encoder_queue);
+  void Initialize(TaskQueueBase* encoder_queue);
   void SetAdaptationProcessor(
       ResourceAdaptationProcessorInterface* adaptation_processor,
       VideoStreamAdapter* stream_adapter);
@@ -196,7 +195,7 @@
   const rtc::scoped_refptr<BandwidthQualityScalerResource>
       bandwidth_quality_scaler_resource_;
 
-  rtc::TaskQueue* encoder_queue_;
+  TaskQueueBase* encoder_queue_;
   VideoStreamInputStateProvider* const input_state_provider_
       RTC_GUARDED_BY(encoder_queue_);
   ResourceAdaptationProcessorInterface* adaptation_processor_;
diff --git a/video/call_stats2.h b/video/call_stats2.h
index 760f7a0..7e941d1 100644
--- a/video/call_stats2.h
+++ b/video/call_stats2.h
@@ -15,10 +15,10 @@
 #include <memory>
 
 #include "api/task_queue/pending_task_safety_flag.h"
+#include "api/task_queue/task_queue_base.h"
 #include "api/units/timestamp.h"
 #include "modules/include/module_common_types.h"
 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "system_wrappers/include/clock.h"
 
diff --git a/video/call_stats2_unittest.cc b/video/call_stats2_unittest.cc
index 9d33bb3..76abbcf 100644
--- a/video/call_stats2_unittest.cc
+++ b/video/call_stats2_unittest.cc
@@ -13,6 +13,7 @@
 #include <memory>
 
 #include "api/task_queue/default_task_queue_factory.h"
+#include "api/task_queue/task_queue_base.h"
 #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
 #include "rtc_base/thread.h"
 #include "system_wrappers/include/metrics.h"
@@ -42,20 +43,21 @@
   // Queues an rtt update call on the process thread.
   void AsyncSimulateRttUpdate(int64_t rtt) {
     RtcpRttStats* rtcp_rtt_stats = call_stats_.AsRtcpRttStats();
-    task_queue_.PostTask(
+    task_queue_->PostTask(
         [rtcp_rtt_stats, rtt] { rtcp_rtt_stats->OnRttUpdate(rtt); });
   }
 
  protected:
   void FlushProcessAndWorker() {
-    task_queue_.PostTask([this] { loop_.PostTask([this] { loop_.Quit(); }); });
+    task_queue_->PostTask([this] { loop_.PostTask([this] { loop_.Quit(); }); });
     loop_.Run();
   }
 
   test::RunLoop loop_;
-  rtc::TaskQueue task_queue_{CreateDefaultTaskQueueFactory()->CreateTaskQueue(
-      "CallStats",
-      TaskQueueFactory::Priority::NORMAL)};
+  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> task_queue_ =
+      CreateDefaultTaskQueueFactory()->CreateTaskQueue(
+          "CallStats",
+          TaskQueueFactory::Priority::NORMAL);
 
   // Note: Since rtc::Thread doesn't support injecting a Clock, we're going
   // to be using a mix of the fake clock (used by CallStats) as well as the
diff --git a/video/frame_buffer_proxy.cc b/video/frame_buffer_proxy.cc
index d427528..e54cd59 100644
--- a/video/frame_buffer_proxy.cc
+++ b/video/frame_buffer_proxy.cc
@@ -17,6 +17,7 @@
 #include "absl/base/attributes.h"
 #include "absl/functional/bind_front.h"
 #include "api/sequence_checker.h"
+#include "api/task_queue/task_queue_base.h"
 #include "api/units/data_size.h"
 #include "api/video/encoded_frame.h"
 #include "api/video/frame_buffer.h"
@@ -41,7 +42,7 @@
   FrameBuffer2Proxy(Clock* clock,
                     VCMTiming* timing,
                     VCMReceiveStatisticsCallback* stats_proxy,
-                    rtc::TaskQueue* decode_queue,
+                    TaskQueueBase* decode_queue,
                     FrameSchedulingReceiver* receiver,
                     TimeDelta max_wait_for_keyframe,
                     TimeDelta max_wait_for_frame,
@@ -127,7 +128,7 @@
   const TimeDelta max_wait_for_keyframe_;
   const TimeDelta max_wait_for_frame_;
   video_coding::FrameBuffer frame_buffer_;
-  rtc::TaskQueue* const decode_queue_;
+  TaskQueueBase* const decode_queue_;
   VCMReceiveStatisticsCallback* const stats_proxy_;
   FrameSchedulingReceiver* const receiver_;
   rtc::scoped_refptr<PendingTaskSafetyFlag> decode_safety_ =
@@ -179,7 +180,7 @@
       TaskQueueBase* worker_queue,
       VCMTiming* timing,
       VCMReceiveStatisticsCallback* stats_proxy,
-      rtc::TaskQueue* decode_queue,
+      TaskQueueBase* decode_queue,
       FrameSchedulingReceiver* receiver,
       TimeDelta max_wait_for_keyframe,
       TimeDelta max_wait_for_frame,
@@ -490,7 +491,7 @@
       RttMultExperiment::GetRttMultValue();
   Clock* const clock_;
   TaskQueueBase* const worker_queue_;
-  rtc::TaskQueue* const decode_queue_;
+  TaskQueueBase* const decode_queue_;
   VCMReceiveStatisticsCallback* const stats_proxy_;
   FrameSchedulingReceiver* const receiver_;
   VCMTiming* const timing_;
@@ -556,7 +557,7 @@
     TaskQueueBase* worker_queue,
     VCMTiming* timing,
     VCMReceiveStatisticsCallback* stats_proxy,
-    rtc::TaskQueue* decode_queue,
+    TaskQueueBase* decode_queue,
     FrameSchedulingReceiver* receiver,
     TimeDelta max_wait_for_keyframe,
     TimeDelta max_wait_for_frame,
diff --git a/video/frame_buffer_proxy.h b/video/frame_buffer_proxy.h
index 16f8fc5..1d440ed 100644
--- a/video/frame_buffer_proxy.h
+++ b/video/frame_buffer_proxy.h
@@ -19,7 +19,6 @@
 #include "api/video/encoded_frame.h"
 #include "modules/video_coding/include/video_coding_defines.h"
 #include "modules/video_coding/timing/timing.h"
-#include "rtc_base/task_queue.h"
 #include "system_wrappers/include/clock.h"
 #include "video/decode_synchronizer.h"
 
@@ -44,7 +43,7 @@
       TaskQueueBase* worker_queue,
       VCMTiming* timing,
       VCMReceiveStatisticsCallback* stats_proxy,
-      rtc::TaskQueue* decode_queue,
+      TaskQueueBase* decode_queue,
       FrameSchedulingReceiver* receiver,
       TimeDelta max_wait_for_keyframe,
       TimeDelta max_wait_for_frame,
diff --git a/video/frame_buffer_proxy_unittest.cc b/video/frame_buffer_proxy_unittest.cc
index 6babcda..ba7925a 100644
--- a/video/frame_buffer_proxy_unittest.cc
+++ b/video/frame_buffer_proxy_unittest.cc
@@ -132,7 +132,7 @@
                                                       run_loop_.task_queue(),
                                                       &timing_,
                                                       &stats_callback_,
-                                                      &decode_queue_,
+                                                      decode_queue_.Get(),
                                                       this,
                                                       kMaxWaitForKeyframe,
                                                       kMaxWaitForFrame,
diff --git a/video/rtp_streams_synchronizer2.h b/video/rtp_streams_synchronizer2.h
index 73fd604..7042b1b 100644
--- a/video/rtp_streams_synchronizer2.h
+++ b/video/rtp_streams_synchronizer2.h
@@ -14,8 +14,8 @@
 #include <memory>
 
 #include "api/sequence_checker.h"
+#include "api/task_queue/task_queue_base.h"
 #include "rtc_base/system/no_unique_address.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "video/stream_synchronization.h"
 
diff --git a/video/video_receive_stream2.cc b/video/video_receive_stream2.cc
index 106dc4d..4fb2f9c 100644
--- a/video/video_receive_stream2.cc
+++ b/video/video_receive_stream2.cc
@@ -55,7 +55,6 @@
 #include "rtc_base/logging.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/synchronization/mutex.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/thread_annotations.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/trace_event.h"
@@ -268,7 +267,7 @@
 
   frame_buffer_ = FrameBufferProxy::CreateFromFieldTrial(
       clock_, call_->worker_thread(), timing_.get(), &stats_proxy_,
-      &decode_queue_, this, max_wait_for_keyframe_, max_wait_for_frame_,
+      decode_queue_.Get(), this, max_wait_for_keyframe_, max_wait_for_frame_,
       decode_sync_, call_->trials());
 
   if (rtx_ssrc()) {
diff --git a/video/video_send_stream.cc b/video/video_send_stream.cc
index 5320336..799e366 100644
--- a/video/video_send_stream.cc
+++ b/video/video_send_stream.cc
@@ -149,7 +149,7 @@
     const std::map<uint32_t, RtpPayloadState>& suspended_payload_states,
     std::unique_ptr<FecController> fec_controller,
     const FieldTrialsView& field_trials)
-    : rtp_transport_queue_(transport->GetWorkerQueue()),
+    : rtp_transport_queue_(transport->GetWorkerQueue()->Get()),
       transport_(transport),
       stats_proxy_(clock, config, encoder_config.content_type, field_trials),
       config_(std::move(config)),
diff --git a/video/video_send_stream.h b/video/video_send_stream.h
index 0faebf9..d495133 100644
--- a/video/video_send_stream.h
+++ b/video/video_send_stream.h
@@ -25,7 +25,6 @@
 #include "call/video_send_stream.h"
 #include "rtc_base/event.h"
 #include "rtc_base/system/no_unique_address.h"
-#include "rtc_base/task_queue.h"
 #include "video/encoder_rtcp_feedback.h"
 #include "video/send_delay_stats.h"
 #include "video/send_statistics_proxy.h"
@@ -100,7 +99,7 @@
   absl::optional<float> GetPacingFactorOverride() const;
 
   RTC_NO_UNIQUE_ADDRESS SequenceChecker thread_checker_;
-  rtc::TaskQueue* const rtp_transport_queue_;
+  TaskQueueBase* const rtp_transport_queue_;
   RtpTransportControllerSendInterface* const transport_;
   rtc::Event thread_sync_event_;
   rtc::scoped_refptr<PendingTaskSafetyFlag> transport_queue_safety_ =
diff --git a/video/video_send_stream_impl.cc b/video/video_send_stream_impl.cc
index 6a406a4..2032c4c 100644
--- a/video/video_send_stream_impl.cc
+++ b/video/video_send_stream_impl.cc
@@ -202,7 +202,7 @@
 VideoSendStreamImpl::VideoSendStreamImpl(
     Clock* clock,
     SendStatisticsProxy* stats_proxy,
-    rtc::TaskQueue* rtp_transport_queue,
+    TaskQueueBase* rtp_transport_queue,
     RtpTransportControllerSendInterface* transport,
     BitrateAllocatorInterface* bitrate_allocator,
     VideoStreamEncoderInterface* video_stream_encoder,
@@ -341,7 +341,7 @@
     activity_ = false;
     timed_out_ = false;
     check_encoder_activity_task_ = RepeatingTaskHandle::DelayedStart(
-        rtp_transport_queue_->Get(), kEncoderTimeOut, [this] {
+        rtp_transport_queue_, kEncoderTimeOut, [this] {
           RTC_DCHECK_RUN_ON(rtp_transport_queue_);
           if (!activity_) {
             if (!timed_out_) {
diff --git a/video/video_send_stream_impl.h b/video/video_send_stream_impl.h
index 26f8d2e..d6ce47f 100644
--- a/video/video_send_stream_impl.h
+++ b/video/video_send_stream_impl.h
@@ -21,6 +21,7 @@
 #include "absl/types/optional.h"
 #include "api/field_trials_view.h"
 #include "api/task_queue/pending_task_safety_flag.h"
+#include "api/task_queue/task_queue_base.h"
 #include "api/video/encoded_image.h"
 #include "api/video/video_bitrate_allocation.h"
 #include "api/video/video_bitrate_allocator.h"
@@ -36,7 +37,6 @@
 #include "modules/video_coding/include/video_codec_interface.h"
 #include "rtc_base/experiments/field_trial_parser.h"
 #include "rtc_base/system/no_unique_address.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/task_utils/repeating_task.h"
 #include "rtc_base/thread_annotations.h"
 #include "video/send_statistics_proxy.h"
@@ -66,7 +66,7 @@
  public:
   VideoSendStreamImpl(Clock* clock,
                       SendStatisticsProxy* stats_proxy,
-                      rtc::TaskQueue* rtp_transport_queue,
+                      TaskQueueBase* rtp_transport_queue,
                       RtpTransportControllerSendInterface* transport,
                       BitrateAllocatorInterface* bitrate_allocator,
                       VideoStreamEncoderInterface* video_stream_encoder,
@@ -139,7 +139,7 @@
   SendStatisticsProxy* const stats_proxy_;
   const VideoSendStream::Config* const config_;
 
-  rtc::TaskQueue* const rtp_transport_queue_;
+  TaskQueueBase* const rtp_transport_queue_;
 
   RepeatingTaskHandle check_encoder_activity_task_
       RTC_GUARDED_BY(rtp_transport_queue_);
diff --git a/video/video_send_stream_impl_unittest.cc b/video/video_send_stream_impl_unittest.cc
index b005a63..52593a8 100644
--- a/video/video_send_stream_impl_unittest.cc
+++ b/video/video_send_stream_impl_unittest.cc
@@ -150,7 +150,7 @@
     std::map<uint32_t, RtpState> suspended_ssrcs;
     std::map<uint32_t, RtpPayloadState> suspended_payload_states;
     auto ret = std::make_unique<VideoSendStreamImpl>(
-        &clock_, &stats_proxy_, &test_queue_, &transport_controller_,
+        &clock_, &stats_proxy_, test_queue_.Get(), &transport_controller_,
         &bitrate_allocator_, &video_stream_encoder_, &config_,
         initial_encoder_max_bitrate, initial_encoder_bitrate_priority,
         content_type, &rtp_video_sender_, field_trials_);
diff --git a/video/video_stream_decoder_impl.cc b/video/video_stream_decoder_impl.cc
index 5f275ff..91be5a0 100644
--- a/video/video_stream_decoder_impl.cc
+++ b/video/video_stream_decoder_impl.cc
@@ -141,7 +141,7 @@
   int64_t max_wait_time = keyframe_required_ ? 200 : 3000;
 
   frame_buffer_.NextFrame(max_wait_time, keyframe_required_,
-                          &bookkeeping_queue_,
+                          bookkeeping_queue_.Get(),
                           [this](std::unique_ptr<EncodedFrame> frame) {
                             RTC_DCHECK_RUN_ON(&bookkeeping_queue_);
                             OnNextFrameCallback(std::move(frame));
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index 827ef7b..23dc28a 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -702,7 +702,7 @@
   RTC_DCHECK_GE(number_of_cores, 1);
 
   frame_cadence_adapter_->Initialize(&cadence_callback_);
-  stream_resource_manager_.Initialize(&encoder_queue_);
+  stream_resource_manager_.Initialize(encoder_queue_.Get());
 
   encoder_queue_.PostTask([this] {
     RTC_DCHECK_RUN_ON(&encoder_queue_);
diff --git a/video/video_stream_encoder.h b/video/video_stream_encoder.h
index 1953b91..468998f 100644
--- a/video/video_stream_encoder.h
+++ b/video/video_stream_encoder.h
@@ -128,7 +128,7 @@
  protected:
   // Used for testing. For example the `ScalingObserverInterface` methods must
   // be called on `encoder_queue_`.
-  rtc::TaskQueue* encoder_queue() { return &encoder_queue_; }
+  TaskQueueBase* encoder_queue() { return encoder_queue_.Get(); }
 
   void OnVideoSourceRestrictionsUpdated(
       VideoSourceRestrictions restrictions,