Using FunctionVideoEncoderFactory in VideoQualityTest.

This reduces code duplication. FunctionVideoEncoderFactory is modified
to allow providing a function that takes an argument for the format.

Bug: webrtc:9510
Change-Id: I67fee84af4968a51326b52db35f3eb0c65848735
Reviewed-on: https://webrtc-review.googlesource.com/88222
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23965}
diff --git a/test/function_video_encoder_factory.h b/test/function_video_encoder_factory.h
index d06d333..567397f 100644
--- a/test/function_video_encoder_factory.h
+++ b/test/function_video_encoder_factory.h
@@ -29,10 +29,11 @@
  public:
   explicit FunctionVideoEncoderFactory(
       std::function<std::unique_ptr<VideoEncoder>()> create)
-      : create_(std::move(create)) {
-    codec_info_.is_hardware_accelerated = false;
-    codec_info_.has_internal_source = false;
-  }
+      : create_([create](const SdpVideoFormat&) { return create(); }) {}
+  explicit FunctionVideoEncoderFactory(
+      std::function<std::unique_ptr<VideoEncoder>(const SdpVideoFormat&)>
+          create)
+      : create_(std::move(create)) {}
 
   // Unused by tests.
   std::vector<SdpVideoFormat> GetSupportedFormats() const override {
@@ -42,17 +43,20 @@
 
   CodecInfo QueryVideoEncoder(
       const SdpVideoFormat& /* format */) const override {
-    return codec_info_;
+    CodecInfo codec_info;
+    codec_info.is_hardware_accelerated = false;
+    codec_info.has_internal_source = false;
+    return codec_info;
   }
 
   std::unique_ptr<VideoEncoder> CreateVideoEncoder(
-      const SdpVideoFormat& /* format */) override {
-    return create_();
+      const SdpVideoFormat& format) override {
+    return create_(format);
   }
 
  private:
-  const std::function<std::unique_ptr<VideoEncoder>()> create_;
-  CodecInfo codec_info_;
+  const std::function<std::unique_ptr<VideoEncoder>(const SdpVideoFormat&)>
+      create_;
 };
 
 }  // namespace test
diff --git a/video/video_quality_test.cc b/video/video_quality_test.cc
index b017609..cbf9dbe 100644
--- a/video/video_quality_test.cc
+++ b/video/video_quality_test.cc
@@ -67,24 +67,7 @@
 
 namespace webrtc {
 
-// Not used by these tests.
-std::vector<SdpVideoFormat>
-VideoQualityTest::TestVideoEncoderFactory::GetSupportedFormats() const {
-  RTC_NOTREACHED();
-  return {};
-}
-
-VideoEncoderFactory::CodecInfo
-VideoQualityTest::TestVideoEncoderFactory::QueryVideoEncoder(
-    const SdpVideoFormat& format) const {
-  CodecInfo codec_info;
-  codec_info.is_hardware_accelerated = false;
-  codec_info.has_internal_source = false;
-  return codec_info;
-}
-
-std::unique_ptr<VideoEncoder>
-VideoQualityTest::TestVideoEncoderFactory::CreateVideoEncoder(
+std::unique_ptr<VideoEncoder> VideoQualityTest::CreateVideoEncoder(
     const SdpVideoFormat& format) {
   if (format.name == "VP8") {
     return absl::make_unique<VP8EncoderSimulcastProxy>(
@@ -99,7 +82,12 @@
 
 VideoQualityTest::VideoQualityTest(
     std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory)
-    : clock_(Clock::GetRealTimeClock()), receive_logs_(0), send_logs_(0) {
+    : clock_(Clock::GetRealTimeClock()),
+      video_encoder_factory_([this](const SdpVideoFormat& format) {
+        return this->CreateVideoEncoder(format);
+      }),
+      receive_logs_(0),
+      send_logs_(0) {
   payload_type_map_ = test::CallTest::payload_type_map_;
   RTC_DCHECK(payload_type_map_.find(kPayloadTypeH264) ==
              payload_type_map_.end());
diff --git a/video/video_quality_test.h b/video/video_quality_test.h
index c996bae..dbc5b6b 100644
--- a/video/video_quality_test.h
+++ b/video/video_quality_test.h
@@ -55,18 +55,6 @@
   static std::vector<int> ParseCSV(const std::string& str);
 
  protected:
-  class TestVideoEncoderFactory : public VideoEncoderFactory {
-    std::vector<SdpVideoFormat> GetSupportedFormats() const override;
-
-    CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const override;
-
-    std::unique_ptr<VideoEncoder> CreateVideoEncoder(
-        const SdpVideoFormat& format) override;
-
-   private:
-    InternalEncoderFactory internal_encoder_factory_;
-  };
-
   std::map<uint8_t, webrtc::MediaType> payload_type_map_;
   std::unique_ptr<FecControllerFactoryInterface> fec_controller_factory_;
 
@@ -84,6 +72,8 @@
   void CreateCapturers();
   std::unique_ptr<test::FrameGenerator> CreateFrameGenerator(size_t video_idx);
   void SetupThumbnailCapturers(size_t num_thumbnail_streams);
+  std::unique_ptr<VideoEncoder> CreateVideoEncoder(
+      const SdpVideoFormat& format);
   void SetupVideo(Transport* send_transport, Transport* recv_transport);
   void SetupThumbnails(Transport* send_transport, Transport* recv_transport);
   void DestroyThumbnailStreams();
@@ -98,8 +88,10 @@
 
   std::vector<std::unique_ptr<test::VideoCapturer>> video_capturers_;
   std::vector<std::unique_ptr<test::VideoCapturer>> thumbnail_capturers_;
-  TestVideoEncoderFactory video_encoder_factory_;
+  Clock* const clock_;
 
+  test::FunctionVideoEncoderFactory video_encoder_factory_;
+  InternalEncoderFactory internal_encoder_factory_;
   std::vector<VideoSendStream::Config> thumbnail_send_configs_;
   std::vector<VideoEncoderConfig> thumbnail_encoder_configs_;
   std::vector<VideoSendStream*> thumbnail_send_streams_;
@@ -109,9 +101,6 @@
   std::vector<VideoSendStream::Config> video_send_configs_;
   std::vector<VideoEncoderConfig> video_encoder_configs_;
   std::vector<VideoSendStream*> video_send_streams_;
-
-  Clock* const clock_;
-
   int receive_logs_;
   int send_logs_;