Remove VideoCodecTestFixtureImpl dependency on Android specifics.

This is needed for downstream users of the impl, as we currently pull
in Chromium specifics in the android_codec_factory_helper. Further,
the downstream users should explicitly supply their own factories
if they do not want to use the internal ones.

Bug: None
Change-Id: Ia7b01a66aadaba3d5accf44e5ca38e1a319e4e34
Reviewed-on: https://webrtc-review.googlesource.com/78420
Commit-Queue: Rasmus Brandt <brandtr@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23390}
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index 998f83f..d1909b4 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -700,9 +700,6 @@
       # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
       suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
     }
-    if (is_android) {
-      deps += [ ":android_codec_factory_helper" ]
-    }
   }
 
   rtc_source_set("video_coding_modules_tests") {
diff --git a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
index 5885119..1b1a6c6 100644
--- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
+++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.cc
@@ -14,10 +14,6 @@
 #include <memory>
 #include <utility>
 
-#if defined(WEBRTC_ANDROID)
-#include "modules/video_coding/codecs/test/android_codec_factory_helper.h"
-#endif
-
 #include "api/video_codecs/sdp_video_format.h"
 #include "call/video_config.h"
 #include "common_types.h"  // NOLINT(build/include)
@@ -367,26 +363,18 @@
   int64_t wallclock_time_ = 0;
 };
 
-VideoCodecTestFixtureImpl::
-    VideoCodecTestFixtureImpl(Config config)
-    : config_(config) {
-#if defined(WEBRTC_ANDROID)
-  InitializeAndroidObjects();
-#endif
-}
+VideoCodecTestFixtureImpl::VideoCodecTestFixtureImpl(Config config)
+    : encoder_factory_(rtc::MakeUnique<InternalEncoderFactory>()),
+      decoder_factory_(rtc::MakeUnique<InternalDecoderFactory>()),
+      config_(config) {}
 
-VideoCodecTestFixtureImpl::
-    VideoCodecTestFixtureImpl(
-        Config config,
-        std::unique_ptr<VideoDecoderFactory> decoder_factory,
-        std::unique_ptr<VideoEncoderFactory> encoder_factory)
-    : decoder_factory_(std::move(decoder_factory)),
-      encoder_factory_(std::move(encoder_factory)),
-      config_(config) {
-#if defined(WEBRTC_ANDROID)
-  InitializeAndroidObjects();
-#endif
-}
+VideoCodecTestFixtureImpl::VideoCodecTestFixtureImpl(
+    Config config,
+    std::unique_ptr<VideoDecoderFactory> decoder_factory,
+    std::unique_ptr<VideoEncoderFactory> encoder_factory)
+    : encoder_factory_(std::move(encoder_factory)),
+      decoder_factory_(std::move(decoder_factory)),
+      config_(config) {}
 
 VideoCodecTestFixtureImpl::
     ~VideoCodecTestFixtureImpl() = default;
@@ -556,34 +544,6 @@
   }
 }
 
-std::unique_ptr<VideoDecoderFactory>
-VideoCodecTestFixtureImpl::CreateDecoderFactory() {
-  if (config_.hw_decoder) {
-#if defined(WEBRTC_ANDROID)
-    return CreateAndroidDecoderFactory();
-#else
-    RTC_NOTREACHED() << "Only support HW decoder on Android.";
-    return nullptr;
-#endif
-  } else {
-    return rtc::MakeUnique<InternalDecoderFactory>();
-  }
-}
-
-std::unique_ptr<VideoEncoderFactory>
-VideoCodecTestFixtureImpl::CreateEncoderFactory() {
-  if (config_.hw_encoder) {
-#if defined(WEBRTC_ANDROID)
-    return CreateAndroidEncoderFactory();
-#else
-    RTC_NOTREACHED() << "Only support HW encoder on Android.";
-    return nullptr;
-#endif
-  } else {
-    return rtc::MakeUnique<InternalEncoderFactory>();
-  }
-}
-
 void VideoCodecTestFixtureImpl::CreateEncoderAndDecoder() {
   SdpVideoFormat::Parameters params;
   if (config_.codec_settings.codecType == kVideoCodecH264) {
@@ -600,10 +560,6 @@
     params = {};
   }
   SdpVideoFormat format(config_.codec_name);
-  if (!decoder_factory_)
-    decoder_factory_ = CreateDecoderFactory();
-  if (!encoder_factory_)
-    encoder_factory_ = CreateEncoderFactory();
   if (config_.simulcast_adapted_encoder) {
     EXPECT_EQ("VP8", format.name);
     encoder_.reset(new SimulcastEncoderAdapter(encoder_factory_.get()));
diff --git a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.h b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.h
index 324983c..5861699 100644
--- a/modules/video_coding/codecs/test/videocodec_test_fixture_impl.h
+++ b/modules/video_coding/codecs/test/videocodec_test_fixture_impl.h
@@ -86,13 +86,11 @@
       float input_framerate_fps);
 
   void PrintSettings(rtc::test::TaskQueueForTest* task_queue) const;
-  std::unique_ptr<VideoDecoderFactory> CreateDecoderFactory();
-  std::unique_ptr<VideoEncoderFactory> CreateEncoderFactory();
 
   // Codecs.
-  std::unique_ptr<VideoDecoderFactory> decoder_factory_;
-  std::unique_ptr<VideoEncoderFactory> encoder_factory_;
+  const std::unique_ptr<VideoEncoderFactory> encoder_factory_;
   std::unique_ptr<VideoEncoder> encoder_;
+  const std::unique_ptr<VideoDecoderFactory> decoder_factory_;
   VideoProcessor::VideoDecoderList decoders_;
 
   // Helper objects.
diff --git a/modules/video_coding/codecs/test/videocodec_test_mediacodec.cc b/modules/video_coding/codecs/test/videocodec_test_mediacodec.cc
index a0b3637..1529fb0 100644
--- a/modules/video_coding/codecs/test/videocodec_test_mediacodec.cc
+++ b/modules/video_coding/codecs/test/videocodec_test_mediacodec.cc
@@ -15,7 +15,9 @@
 #include "api/test/create_videocodec_test_fixture.h"
 #include "common_types.h"  // NOLINT(build/include)
 #include "media/base/mediaconstants.h"
+#include "modules/video_coding/codecs/test/android_codec_factory_helper.h"
 #include "modules/video_coding/codecs/test/videocodec_test_fixture_impl.h"
+#include "rtc_base/ptr_util.h"
 #include "test/gtest.h"
 #include "test/testsupport/fileutils.h"
 
@@ -35,13 +37,22 @@
   config.hw_decoder = true;
   return config;
 }
+
+std::unique_ptr<VideoCodecTestFixture> CreateTestFixtureWithConfig(
+    VideoCodecTestFixture::Config config) {
+  InitializeAndroidObjects();  // Idempotent.
+  auto encoder_factory = CreateAndroidEncoderFactory();
+  auto decoder_factory = CreateAndroidDecoderFactory();
+  return CreateVideoCodecTestFixture(config, std::move(decoder_factory),
+                                     std::move(encoder_factory));
+}
 }  // namespace
 
 TEST(VideoCodecTestMediaCodec, ForemanCif500kbpsVp8) {
   auto config = CreateConfig();
   config.SetCodecSettings(cricket::kVp8CodecName, 1, 1, 1, false, false, false,
                           352, 288);
-  auto fixture = CreateVideoCodecTestFixture(config);
+  auto fixture = CreateTestFixtureWithConfig(config);
 
   std::vector<RateProfile> rate_profiles = {
       {500, kForemanFramerateFps, kForemanNumFrames}};
@@ -65,7 +76,7 @@
   config.encoded_frame_checker = frame_checker.get();
   config.SetCodecSettings(cricket::kH264CodecName, 1, 1, 1, false, false, false,
                           352, 288);
-  auto fixture = CreateVideoCodecTestFixture(config);
+  auto fixture = CreateTestFixtureWithConfig(config);
 
   std::vector<RateProfile> rate_profiles = {
       {500, kForemanFramerateFps, kForemanNumFrames}};
@@ -93,7 +104,7 @@
   config.encoded_frame_checker = frame_checker.get();
   config.SetCodecSettings(cricket::kH264CodecName, 1, 1, 1, false, false, false,
                           352, 288);
-  auto fixture = CreateVideoCodecTestFixture(config);
+  auto fixture = CreateTestFixtureWithConfig(config);
 
   std::vector<RateProfile> rate_profiles = {
       {500, kForemanFramerateFps, kForemanNumFrames}};
@@ -133,7 +144,7 @@
       config.SetCodecSettings(codec, 1, 1, 1, false, false, false, width,
                               height);
 
-      auto fixture = CreateVideoCodecTestFixture(config);
+      auto fixture = CreateTestFixtureWithConfig(config);
       fixture->RunTest(rate_profiles, nullptr /* rc_thresholds */,
                        &quality_thresholds, nullptr /* bs_thresholds */,
                        nullptr /* visualization_params */);