Add injectable video encoder and decoder to video quality test.

Bug: webrtc:10738
Change-Id: Ia5180cf0252ecd1c58a2080e3954fcb886b066e3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/141667
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Commit-Queue: Rasmus Brandt <brandtr@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28263}
diff --git a/api/test/video_quality_test_fixture.h b/api/test/video_quality_test_fixture.h
index e425ace..9bfa711 100644
--- a/api/test/video_quality_test_fixture.h
+++ b/api/test/video_quality_test_fixture.h
@@ -22,7 +22,9 @@
 #include "api/network_state_predictor.h"
 #include "api/test/simulated_network.h"
 #include "api/transport/network_control.h"
+#include "api/video_codecs/video_decoder_factory.h"
 #include "api/video_codecs/video_encoder_config.h"
+#include "api/video_codecs/video_encoder_factory.h"
 
 namespace webrtc {
 
@@ -122,6 +124,8 @@
     std::unique_ptr<NetworkBehaviorInterface> receiver_network;
 
     std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory;
+    std::unique_ptr<VideoEncoderFactory> video_encoder_factory;
+    std::unique_ptr<VideoDecoderFactory> video_decoder_factory;
     std::unique_ptr<NetworkStatePredictorFactoryInterface>
         network_state_predictor_factory;
     std::unique_ptr<NetworkControllerFactoryInterface>
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index fea9cac..1238c4b 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -268,11 +268,11 @@
   std::unique_ptr<VideoDecoder> decoder;
   if (format.name == "multiplex") {
     decoder = absl::make_unique<MultiplexDecoderAdapter>(
-        &internal_decoder_factory_, SdpVideoFormat(cricket::kVp9CodecName));
+        decoder_factory_.get(), SdpVideoFormat(cricket::kVp9CodecName));
   } else if (format.name == "FakeCodec") {
     decoder = webrtc::FakeVideoDecoderFactory::CreateVideoDecoder();
   } else {
-    decoder = internal_decoder_factory_.CreateVideoDecoder(format);
+    decoder = decoder_factory_->CreateVideoDecoder(format);
   }
   if (!params_.logging.encoded_frame_base_path.empty()) {
     rtc::StringBuilder str;
@@ -290,15 +290,15 @@
     VideoAnalyzer* analyzer) {
   std::unique_ptr<VideoEncoder> encoder;
   if (format.name == "VP8") {
-    encoder = absl::make_unique<EncoderSimulcastProxy>(
-        &internal_encoder_factory_, format);
+    encoder = absl::make_unique<EncoderSimulcastProxy>(encoder_factory_.get(),
+                                                       format);
   } else if (format.name == "multiplex") {
     encoder = absl::make_unique<MultiplexEncoderAdapter>(
-        &internal_encoder_factory_, SdpVideoFormat(cricket::kVp9CodecName));
+        encoder_factory_.get(), SdpVideoFormat(cricket::kVp9CodecName));
   } else if (format.name == "FakeCodec") {
     encoder = webrtc::FakeVideoEncoderFactory::CreateVideoEncoder();
   } else {
-    encoder = internal_encoder_factory_.CreateVideoEncoder(format);
+    encoder = encoder_factory_->CreateVideoEncoder(format);
   }
 
   std::vector<FileWrapper> encoded_frame_dump_files;
@@ -365,6 +365,16 @@
   if (injection_components_ == nullptr) {
     injection_components_ = absl::make_unique<InjectionComponents>();
   }
+  if (injection_components_->video_decoder_factory != nullptr) {
+    decoder_factory_ = std::move(injection_components_->video_decoder_factory);
+  } else {
+    decoder_factory_ = absl::make_unique<InternalDecoderFactory>();
+  }
+  if (injection_components_->video_encoder_factory != nullptr) {
+    encoder_factory_ = std::move(injection_components_->video_encoder_factory);
+  } else {
+    encoder_factory_ = absl::make_unique<InternalEncoderFactory>();
+  }
 
   payload_type_map_ = test::CallTest::payload_type_map_;
   RTC_DCHECK(payload_type_map_.find(kPayloadTypeH264) ==
diff --git a/video/video_quality_test.h b/video/video_quality_test.h
index bd871b7..92e511f 100644
--- a/video/video_quality_test.h
+++ b/video/video_quality_test.h
@@ -106,12 +106,12 @@
   RtcEventLogFactory rtc_event_log_factory_;
 
   test::FunctionVideoDecoderFactory video_decoder_factory_;
-  InternalDecoderFactory internal_decoder_factory_;
+  std::unique_ptr<VideoDecoderFactory> decoder_factory_;
   test::FunctionVideoEncoderFactory video_encoder_factory_;
   test::FunctionVideoEncoderFactory video_encoder_factory_with_analyzer_;
   std::unique_ptr<VideoBitrateAllocatorFactory>
       video_bitrate_allocator_factory_;
-  InternalEncoderFactory internal_encoder_factory_;
+  std::unique_ptr<VideoEncoderFactory> encoder_factory_;
   std::vector<VideoSendStream::Config> thumbnail_send_configs_;
   std::vector<VideoEncoderConfig> thumbnail_encoder_configs_;
   std::vector<VideoSendStream*> thumbnail_send_streams_;