Reland "Move creating encoder to VideoStreamEncoder."
This is a reland of fb82fcc7f9c414dc8ba1ddd314e9524fee54cb80
Original change's description:
> Move creating encoder to VideoStreamEncoder.
>
> This used to be in WebRtcVideoChannel::WebRtcVideoSendStream.
> One implication is that encoder is not created until the first
> frame arrives, and some of the tests needed updates to emit a
> frame or two.
>
> Bug: webrtc:8830
> Change-Id: I78169b2bb4dfa4197b4b4229af9fd69d0f747835
> Reviewed-on: https://webrtc-review.googlesource.com/64885
> Commit-Queue: Niels Moller <nisse@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#22905}
TBR=magjed@webrtc.org,kwiberg@webrtc.org
Bug: webrtc:8830
Change-Id: I9565095ea1880fb49d15111198c08b2fcb84f18c
Reviewed-on: https://webrtc-review.googlesource.com/70740
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22930}diff --git a/call/bitrate_estimator_tests.cc b/call/bitrate_estimator_tests.cc
index b4f808f..ea48a97 100644
--- a/call/bitrate_estimator_tests.cc
+++ b/call/bitrate_estimator_tests.cc
@@ -116,8 +116,8 @@
video_send_config_ = VideoSendStream::Config(send_transport_.get());
video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]);
- // Encoders will be set separately per stream.
- video_send_config_.encoder_settings.encoder = nullptr;
+ video_send_config_.encoder_settings.encoder_factory =
+ &fake_encoder_factory_;
video_send_config_.rtp.payload_name = "FAKE";
video_send_config_.rtp.payload_type = kFakeVideoSendPayloadType;
test::FillEncoderConfiguration(kVideoCodecVP8, 1, &video_encoder_config_);
@@ -162,10 +162,8 @@
is_sending_receiving_(false),
send_stream_(nullptr),
frame_generator_capturer_(),
- fake_encoder_(Clock::GetRealTimeClock()),
fake_decoder_() {
test_->video_send_config_.rtp.ssrcs[0]++;
- test_->video_send_config_.encoder_settings.encoder = &fake_encoder_;
send_stream_ = test_->sender_call_->CreateVideoSendStream(
test_->video_send_config_.Copy(),
test_->video_encoder_config_.Copy());
@@ -223,7 +221,6 @@
VideoSendStream* send_stream_;
VideoReceiveStream* video_receive_stream_;
std::unique_ptr<test::FrameGeneratorCapturer> frame_generator_capturer_;
- test::FakeEncoder fake_encoder_;
test::FakeDecoder fake_decoder_;
};
diff --git a/call/call_perf_tests.cc b/call/call_perf_tests.cc
index 1337809..6520e6f 100644
--- a/call/call_perf_tests.cc
+++ b/call/call_perf_tests.cc
@@ -29,6 +29,7 @@
#include "test/call_test.h"
#include "test/direct_transport.h"
#include "test/drifting_clock.h"
+#include "test/encoder_proxy_factory.h"
#include "test/encoder_settings.h"
#include "test/fake_encoder.h"
#include "test/field_trial.h"
@@ -637,7 +638,7 @@
std::vector<double> bitrate_kbps_list_;
} test(pad_to_min_bitrate);
- fake_encoder_.SetMaxBitrate(kMaxEncodeBitrateKbps);
+ fake_encoder_max_bitrate_ = kMaxEncodeBitrateKbps;
RunBaseTest(&test);
}
@@ -686,7 +687,8 @@
encoder_inits_(0),
last_set_bitrate_kbps_(0),
send_stream_(nullptr),
- frame_generator_(nullptr) {}
+ frame_generator_(nullptr),
+ encoder_factory_(this) {}
int32_t InitEncode(const VideoCodec* config,
int32_t number_of_cores,
@@ -735,7 +737,7 @@
VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
- send_config->encoder_settings.encoder = this;
+ send_config->encoder_settings.encoder_factory = &encoder_factory_;
encoder_config->max_bitrate_bps = 2 * kReconfigureThresholdKbps * 1000;
encoder_config->video_stream_factory =
new rtc::RefCountedObject<VideoStreamFactory>();
@@ -770,6 +772,7 @@
uint32_t last_set_bitrate_kbps_;
VideoSendStream* send_stream_;
test::FrameGeneratorCapturer* frame_generator_;
+ test::EncoderProxyFactory encoder_factory_;
VideoEncoderConfig encoder_config_;
} test;
diff --git a/call/video_send_stream.cc b/call/video_send_stream.cc
index 8fccd32..ec701d0 100644
--- a/call/video_send_stream.cc
+++ b/call/video_send_stream.cc
@@ -93,7 +93,6 @@
rtc::SimpleStringBuilder ss(buf);
ss << "{encoder_factory: "
<< (encoder_factory ? "(VideoEncoderFactory)" : "(nullptr)");
- ss << ", encoder: " << (encoder ? "(VideoEncoder)" : "nullptr");
ss << '}';
return ss.str();
}
diff --git a/call/video_send_stream.h b/call/video_send_stream.h
index 0019a95..cdb9483 100644
--- a/call/video_send_stream.h
+++ b/call/video_send_stream.h
@@ -113,18 +113,8 @@
struct EncoderSettings {
EncoderSettings() = default;
- explicit EncoderSettings(VideoEncoder* encoder) : encoder(encoder) {}
std::string ToString() const;
- // TODO(sophiechang): Delete this field when no one is using internal
- // sources anymore.
- bool internal_source = false;
-
- // Allow 100% encoder utilization. Used for HW encoders where CPU isn't
- // expected to be the limiting factor, but a chip could be running at
- // 30fps (for example) exactly.
- bool full_overuse_time = false;
-
// Enables the new method to estimate the cpu load from encoding, used for
// cpu adaptation.
bool experiment_cpu_load_estimator = false;
@@ -132,9 +122,8 @@
// Ownership stays with WebrtcVideoEngine (delegated from PeerConnection).
VideoEncoderFactory* encoder_factory = nullptr;
- // TODO(nisse): Delete, let VideoStreamEncoder create the encoder.
- // Uninitialized VideoEncoder instance to be used for encoding. Will be
- // initialized from inside the VideoSendStream.
+ // TODO(nisse): Unused! But kept temporarily to transition downstream
+ // projects.
VideoEncoder* encoder = nullptr;
} encoder_settings;