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 */);