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_;