Avoid using global task queue factory in fake encoder

by not using convenient rtc::TaskQueue constructor

Bug: webrtc:10284
Change-Id: I3c6703fd8c86b2a230f62cac734eb616039e4abe
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/128603
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27207}
diff --git a/test/fake_encoder.cc b/test/fake_encoder.cc
index 3f692f8..e51611c 100644
--- a/test/fake_encoder.cc
+++ b/test/fake_encoder.cc
@@ -363,8 +363,11 @@
   return FakeEncoder::Encode(input_image, frame_types);
 }
 
-MultithreadedFakeH264Encoder::MultithreadedFakeH264Encoder(Clock* clock)
+MultithreadedFakeH264Encoder::MultithreadedFakeH264Encoder(
+    Clock* clock,
+    TaskQueueFactory* task_queue_factory)
     : test::FakeH264Encoder(clock),
+      task_queue_factory_(task_queue_factory),
       current_queue_(0),
       queue1_(nullptr),
       queue2_(nullptr) {
@@ -378,8 +381,10 @@
                                                  size_t max_payload_size) {
   RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
 
-  queue1_.reset(new rtc::TaskQueue("Queue 1"));
-  queue2_.reset(new rtc::TaskQueue("Queue 2"));
+  queue1_ = task_queue_factory_->CreateTaskQueue(
+      "Queue 1", TaskQueueFactory::Priority::NORMAL);
+  queue2_ = task_queue_factory_->CreateTaskQueue(
+      "Queue 2", TaskQueueFactory::Priority::NORMAL);
 
   return FakeH264Encoder::InitEncode(config, number_of_cores, max_payload_size);
 }
@@ -409,8 +414,8 @@
     const std::vector<VideoFrameType>* frame_types) {
   RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
 
-  std::unique_ptr<rtc::TaskQueue>& queue =
-      (current_queue_++ % 2 == 0) ? queue1_ : queue2_;
+  TaskQueueBase* queue =
+      (current_queue_++ % 2 == 0) ? queue1_.get() : queue2_.get();
 
   if (!queue) {
     return WEBRTC_VIDEO_CODEC_UNINITIALIZED;
diff --git a/test/fake_encoder.h b/test/fake_encoder.h
index 0e99dc5..7d4b027 100644
--- a/test/fake_encoder.h
+++ b/test/fake_encoder.h
@@ -16,6 +16,7 @@
 #include <memory>
 #include <vector>
 
+#include "api/task_queue/task_queue_factory.h"
 #include "api/video/encoded_image.h"
 #include "api/video/video_bitrate_allocation.h"
 #include "api/video/video_frame.h"
@@ -26,7 +27,6 @@
 #include "modules/video_coding/include/video_codec_interface.h"
 #include "rtc_base/critical_section.h"
 #include "rtc_base/sequenced_task_checker.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/thread_annotations.h"
 #include "system_wrappers/include/clock.h"
 
@@ -137,7 +137,8 @@
 // as it is called from the task queue in VideoStreamEncoder.
 class MultithreadedFakeH264Encoder : public test::FakeH264Encoder {
  public:
-  explicit MultithreadedFakeH264Encoder(Clock* clock);
+  MultithreadedFakeH264Encoder(Clock* clock,
+                               TaskQueueFactory* task_queue_factory);
   virtual ~MultithreadedFakeH264Encoder() = default;
 
   int32_t InitEncode(const VideoCodec* config,
@@ -155,9 +156,12 @@
  protected:
   class EncodeTask;
 
+  TaskQueueFactory* const task_queue_factory_;
   int current_queue_ RTC_GUARDED_BY(sequence_checker_);
-  std::unique_ptr<rtc::TaskQueue> queue1_ RTC_GUARDED_BY(sequence_checker_);
-  std::unique_ptr<rtc::TaskQueue> queue2_ RTC_GUARDED_BY(sequence_checker_);
+  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> queue1_
+      RTC_GUARDED_BY(sequence_checker_);
+  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> queue2_
+      RTC_GUARDED_BY(sequence_checker_);
   rtc::SequencedTaskChecker sequence_checker_;
 };
 
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 7a6537c8..a00f144 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -510,6 +510,7 @@
       "../api:mock_frame_decryptor",
       "../api:scoped_refptr",
       "../api:simulated_network_api",
+      "../api/task_queue:default_task_queue_factory",
       "../api/task_queue:global_task_queue_factory",
       "../api/test/video:function_video_factory",
       "../api/units:data_rate",
diff --git a/video/video_send_stream_tests.cc b/video/video_send_stream_tests.cc
index 1b5c643..c852f86 100644
--- a/video/video_send_stream_tests.cc
+++ b/video/video_send_stream_tests.cc
@@ -12,6 +12,7 @@
 #include <vector>
 
 #include "absl/memory/memory.h"
+#include "api/task_queue/default_task_queue_factory.h"
 #include "api/test/simulated_network.h"
 #include "api/video/encoded_image.h"
 #include "api/video/video_bitrate_allocation.h"
@@ -681,9 +682,11 @@
 #endif  // defined(RTC_ENABLE_VP9)
 
 TEST_F(VideoSendStreamTest, SupportsUlpfecWithMultithreadedH264) {
-  test::FunctionVideoEncoderFactory encoder_factory([]() {
+  std::unique_ptr<TaskQueueFactory> task_queue_factory =
+      CreateDefaultTaskQueueFactory();
+  test::FunctionVideoEncoderFactory encoder_factory([&]() {
     return absl::make_unique<test::MultithreadedFakeH264Encoder>(
-        Clock::GetRealTimeClock());
+        Clock::GetRealTimeClock(), task_queue_factory.get());
   });
   UlpfecObserver test(false, false, true, true, "H264", &encoder_factory);
   RunBaseTest(&test);
@@ -861,9 +864,11 @@
 }
 
 TEST_F(VideoSendStreamTest, SupportsFlexfecWithMultithreadedH264) {
-  test::FunctionVideoEncoderFactory encoder_factory([]() {
+  std::unique_ptr<TaskQueueFactory> task_queue_factory =
+      CreateDefaultTaskQueueFactory();
+  test::FunctionVideoEncoderFactory encoder_factory([&]() {
     return absl::make_unique<test::MultithreadedFakeH264Encoder>(
-        Clock::GetRealTimeClock());
+        Clock::GetRealTimeClock(), task_queue_factory.get());
   });
 
   FlexfecObserver test(false, false, "H264", &encoder_factory, 1);