Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Unified Diff: webrtc/video/end_to_end_tests.cc

Issue 2351633002: Let ViEEncoder handle resolution changes. (Closed)
Patch Set: rebased Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/test/frame_generator_capturer.cc ('k') | webrtc/video/video_quality_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/end_to_end_tests.cc
diff --git a/webrtc/video/end_to_end_tests.cc b/webrtc/video/end_to_end_tests.cc
index b9c1c2893ec8f671ddad38ce55298d7155b22975..0e087f1c420e51659ba131c2c647484ea165ac44 100644
--- a/webrtc/video/end_to_end_tests.cc
+++ b/webrtc/video/end_to_end_tests.cc
@@ -259,9 +259,8 @@ TEST_F(EndToEndTest, TransmitsFirstFrame) {
Start();
std::unique_ptr<test::FrameGenerator> frame_generator(
- test::FrameGenerator::CreateChromaGenerator(
- video_encoder_config_.streams[0].width,
- video_encoder_config_.streams[0].height));
+ test::FrameGenerator::CreateChromaGenerator(kDefaultWidth,
+ kDefaultHeight));
test::FrameForwarder frame_forwarder;
video_send_stream_->SetSource(&frame_forwarder);
frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
@@ -305,9 +304,6 @@ class CodecObserver : public test::EndToEndTest,
send_config->encoder_settings.encoder = encoder_.get();
send_config->encoder_settings.payload_name = payload_name_;
send_config->encoder_settings.payload_type = 126;
- encoder_config->streams[0].min_bitrate_bps = 50000;
- encoder_config->streams[0].target_bitrate_bps =
- encoder_config->streams[0].max_bitrate_bps = 2000000;
(*receive_configs)[0].renderer = this;
(*receive_configs)[0].decoders.resize(1);
@@ -793,9 +789,6 @@ TEST_F(EndToEndTest, ReceivedFecPacketsNotNacked) {
send_config->encoder_settings.encoder = encoder_.get();
send_config->encoder_settings.payload_name = "VP8";
send_config->encoder_settings.payload_type = kFakeVideoSendPayloadType;
- encoder_config->streams[0].min_bitrate_bps = 50000;
- encoder_config->streams[0].max_bitrate_bps =
- encoder_config->streams[0].target_bitrate_bps = 2000000;
(*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
(*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType;
@@ -1121,7 +1114,8 @@ TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) {
CreateMatchingReceiveConfigs(&receive_transport);
CreateVideoStreams();
- CreateFrameGeneratorCapturer();
+ CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+ kDefaultHeight);
Start();
receiver_call_->DestroyVideoReceiveStream(video_receive_streams_[0]);
@@ -1278,13 +1272,8 @@ class MultiStreamTest {
send_config.encoder_settings.payload_name = "VP8";
send_config.encoder_settings.payload_type = 124;
VideoEncoderConfig encoder_config;
- encoder_config.streams = test::CreateVideoStreams(1);
- VideoStream* stream = &encoder_config.streams[0];
- stream->width = width;
- stream->height = height;
- stream->max_framerate = 5;
- stream->min_bitrate_bps = stream->target_bitrate_bps =
- stream->max_bitrate_bps = 100000;
+ test::FillEncoderConfiguration(1, &encoder_config);
+ encoder_config.max_bitrate_bps = 100000;
UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]);
@@ -1562,11 +1551,9 @@ TEST_F(EndToEndTest, AssignsTransportSequenceNumbers) {
// Force some padding to be sent.
const int kPaddingBitrateBps = 50000;
- int total_target_bitrate = 0;
- for (const VideoStream& stream : encoder_config->streams)
- total_target_bitrate += stream.target_bitrate_bps;
+ encoder_config->max_bitrate_bps = 1000000;
encoder_config->min_transmit_bitrate_bps =
- total_target_bitrate + kPaddingBitrateBps;
+ encoder_config->max_bitrate_bps + kPaddingBitrateBps;
// Configure RTX for redundant payload padding.
send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
@@ -1768,9 +1755,8 @@ TEST_F(EndToEndTest, ObserversEncodedFrames) {
Start();
std::unique_ptr<test::FrameGenerator> frame_generator(
- test::FrameGenerator::CreateChromaGenerator(
- video_encoder_config_.streams[0].width,
- video_encoder_config_.streams[0].height));
+ test::FrameGenerator::CreateChromaGenerator(kDefaultWidth,
+ kDefaultHeight));
test::FrameForwarder forwarder;
video_send_stream_->SetSource(&forwarder);
forwarder.IncomingCapturedFrame(*frame_generator->NextFrame());
@@ -1921,8 +1907,7 @@ TEST_F(EndToEndTest, RembWithSendSideBwe) {
test::kTransportSequenceNumberExtensionId));
sender_ssrc_ = send_config->rtp.ssrcs[0];
- encoder_config->streams[0].max_bitrate_bps =
- encoder_config->streams[0].target_bitrate_bps = 2000000;
+ encoder_config->max_bitrate_bps = 2000000;
ASSERT_EQ(1u, receive_configs->size());
(*receive_configs)[0].rtp.remb = false;
@@ -2265,24 +2250,18 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx,
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.ReceivedWidthInPixels"));
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.ReceivedHeightInPixels"));
- EXPECT_EQ(1, metrics::NumEvents(
- video_prefix + "InputWidthInPixels",
- static_cast<int>(video_encoder_config_.streams[0].width)));
- EXPECT_EQ(1, metrics::NumEvents(
- video_prefix + "InputHeightInPixels",
- static_cast<int>(video_encoder_config_.streams[0].height)));
- EXPECT_EQ(1, metrics::NumEvents(
- video_prefix + "SentWidthInPixels",
- static_cast<int>(video_encoder_config_.streams[0].width)));
- EXPECT_EQ(1, metrics::NumEvents(
- video_prefix + "SentHeightInPixels",
- static_cast<int>(video_encoder_config_.streams[0].height)));
- EXPECT_EQ(1, metrics::NumEvents(
- "WebRTC.Video.ReceivedWidthInPixels",
- static_cast<int>(video_encoder_config_.streams[0].width)));
- EXPECT_EQ(1, metrics::NumEvents(
- "WebRTC.Video.ReceivedHeightInPixels",
- static_cast<int>(video_encoder_config_.streams[0].height)));
+ EXPECT_EQ(1, metrics::NumEvents(video_prefix + "InputWidthInPixels",
+ kDefaultWidth));
+ EXPECT_EQ(1, metrics::NumEvents(video_prefix + "InputHeightInPixels",
+ kDefaultHeight));
+ EXPECT_EQ(
+ 1, metrics::NumEvents(video_prefix + "SentWidthInPixels", kDefaultWidth));
+ EXPECT_EQ(1, metrics::NumEvents(video_prefix + "SentHeightInPixels",
+ kDefaultHeight));
+ EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.ReceivedWidthInPixels",
+ kDefaultWidth));
+ EXPECT_EQ(1, metrics::NumEvents("WebRTC.Video.ReceivedHeightInPixels",
+ kDefaultHeight));
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "InputFramesPerSecond"));
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "SentFramesPerSecond"));
@@ -2488,22 +2467,41 @@ void EndToEndTest::TestSendsSetSsrcs(size_t num_ssrcs,
size_t GetNumVideoStreams() const override { return num_ssrcs_; }
- void ModifyVideoConfigs(
- VideoSendStream::Config* send_config,
- std::vector<VideoReceiveStream::Config>* receive_configs,
- VideoEncoderConfig* encoder_config) override {
- if (num_ssrcs_ > 1) {
+ // This test use other VideoStream settings than the the default settings
+ // implemented in DefaultVideoStreamFactory. Therefore this test implement
+ // its own VideoEncoderConfig::VideoStreamFactoryInterface which is created
+ // in ModifyVideoConfigs.
+ class VideoStreamFactory
+ : public VideoEncoderConfig::VideoStreamFactoryInterface {
+ public:
+ VideoStreamFactory() {}
+
+ private:
+ std::vector<VideoStream> CreateEncoderStreams(
+ int width,
+ int height,
+ const VideoEncoderConfig& encoder_config) override {
+ std::vector<VideoStream> streams =
+ test::CreateVideoStreams(width, height, encoder_config);
// Set low simulcast bitrates to not have to wait for bandwidth ramp-up.
- for (size_t i = 0; i < encoder_config->streams.size(); ++i) {
- encoder_config->streams[i].min_bitrate_bps = 10000;
- encoder_config->streams[i].target_bitrate_bps = 15000;
- encoder_config->streams[i].max_bitrate_bps = 20000;
+ for (size_t i = 0; i < encoder_config.number_of_streams; ++i) {
+ streams[i].min_bitrate_bps = 10000;
+ streams[i].target_bitrate_bps = 15000;
+ streams[i].max_bitrate_bps = 20000;
}
+ return streams;
}
+ };
+ void ModifyVideoConfigs(
+ VideoSendStream::Config* send_config,
+ std::vector<VideoReceiveStream::Config>* receive_configs,
+ VideoEncoderConfig* encoder_config) override {
+ encoder_config->video_stream_factory =
+ new rtc::RefCountedObject<VideoStreamFactory>();
video_encoder_config_all_streams_ = encoder_config->Copy();
if (send_single_ssrc_first_)
- encoder_config->streams.resize(1);
+ encoder_config->number_of_streams = 1;
}
void OnVideoStreamsCreated(
@@ -2563,7 +2561,7 @@ TEST_F(EndToEndTest, ReportsSetEncoderRates) {
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
send_config->encoder_settings.encoder = this;
- RTC_DCHECK_EQ(1u, encoder_config->streams.size());
+ RTC_DCHECK_EQ(1u, encoder_config->number_of_streams);
}
int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override {
@@ -2835,16 +2833,38 @@ TEST_F(EndToEndTest, GetStats) {
return config;
}
+ // This test use other VideoStream settings than the the default settings
+ // implemented in DefaultVideoStreamFactory. Therefore this test implement
+ // its own VideoEncoderConfig::VideoStreamFactoryInterface which is created
+ // in ModifyVideoConfigs.
+ class VideoStreamFactory
+ : public VideoEncoderConfig::VideoStreamFactoryInterface {
+ public:
+ VideoStreamFactory() {}
+
+ private:
+ std::vector<VideoStream> CreateEncoderStreams(
+ int width,
+ int height,
+ const VideoEncoderConfig& encoder_config) override {
+ std::vector<VideoStream> streams =
+ test::CreateVideoStreams(width, height, encoder_config);
+ // Set low simulcast bitrates to not have to wait for bandwidth ramp-up.
+ for (size_t i = 0; i < encoder_config.number_of_streams; ++i) {
+ streams[i].min_bitrate_bps = 10000;
+ streams[i].target_bitrate_bps = 15000;
+ streams[i].max_bitrate_bps = 20000;
+ }
+ return streams;
+ }
+ };
+
void ModifyVideoConfigs(
VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
- // Set low rates to avoid waiting for rampup.
- for (size_t i = 0; i < encoder_config->streams.size(); ++i) {
- encoder_config->streams[i].min_bitrate_bps = 10000;
- encoder_config->streams[i].target_bitrate_bps = 15000;
- encoder_config->streams[i].max_bitrate_bps = 20000;
- }
+ encoder_config->video_stream_factory =
+ new rtc::RefCountedObject<VideoStreamFactory>();
send_config->pre_encode_callback = this; // Used to inject delay.
expected_cname_ = send_config->rtp.c_name = "SomeCName";
@@ -3037,17 +3057,39 @@ TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) {
size_t GetNumVideoStreams() const override { return kNumSsrcs; }
+ // This test use other VideoStream settings than the the default settings
+ // implemented in DefaultVideoStreamFactory. Therefore this test implement
+ // its own VideoEncoderConfig::VideoStreamFactoryInterface which is created
+ // in ModifyVideoConfigs.
+ class VideoStreamFactory
+ : public VideoEncoderConfig::VideoStreamFactoryInterface {
+ public:
+ VideoStreamFactory() {}
+
+ private:
+ std::vector<VideoStream> CreateEncoderStreams(
+ int width,
+ int height,
+ const VideoEncoderConfig& encoder_config) override {
+ std::vector<VideoStream> streams =
+ test::CreateVideoStreams(width, height, encoder_config);
+ // Set low simulcast bitrates to not have to wait for bandwidth ramp-up.
+ for (size_t i = 0; i < encoder_config.number_of_streams; ++i) {
+ streams[i].min_bitrate_bps = 10000;
+ streams[i].target_bitrate_bps = 15000;
+ streams[i].max_bitrate_bps = 20000;
+ }
+ return streams;
+ }
+ };
+
void ModifyVideoConfigs(
VideoSendStream::Config* send_config,
std::vector<VideoReceiveStream::Config>* receive_configs,
VideoEncoderConfig* encoder_config) override {
// Set low simulcast bitrates to not have to wait for bandwidth ramp-up.
- for (size_t i = 0; i < encoder_config->streams.size(); ++i) {
- encoder_config->streams[i].min_bitrate_bps = 10000;
- encoder_config->streams[i].target_bitrate_bps = 15000;
- encoder_config->streams[i].max_bitrate_bps = 20000;
- }
-
+ encoder_config->video_stream_factory =
+ new rtc::RefCountedObject<VideoStreamFactory>();
send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
for (size_t i = 0; i < kNumSsrcs; ++i)
@@ -3074,6 +3116,43 @@ TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) {
void EndToEndTest::TestRtpStatePreservation(bool use_rtx,
bool provoke_rtcpsr_before_rtp) {
+ // This test use other VideoStream settings than the the default settings
+ // implemented in DefaultVideoStreamFactory. Therefore this test implement
+ // its own VideoEncoderConfig::VideoStreamFactoryInterface which is created
+ // in ModifyVideoConfigs.
+ class VideoStreamFactory
+ : public VideoEncoderConfig::VideoStreamFactoryInterface {
+ public:
+ VideoStreamFactory() {}
+
+ private:
+ std::vector<VideoStream> CreateEncoderStreams(
+ int width,
+ int height,
+ const VideoEncoderConfig& encoder_config) override {
+ std::vector<VideoStream> streams =
+ test::CreateVideoStreams(width, height, encoder_config);
+
+ if (encoder_config.number_of_streams > 1) {
+ // Lower bitrates so that all streams send initially.
+ RTC_DCHECK_EQ(3u, encoder_config.number_of_streams);
+ for (size_t i = 0; i < encoder_config.number_of_streams; ++i) {
+ streams[i].min_bitrate_bps = 10000;
+ streams[i].target_bitrate_bps = 15000;
+ streams[i].max_bitrate_bps = 20000;
+ }
+ } else {
+ // Use the same total bitrates when sending a single stream to avoid
+ // lowering
+ // the bitrate estimate and requiring a subsequent rampup.
+ streams[0].min_bitrate_bps = 3 * 10000;
+ streams[0].target_bitrate_bps = 3 * 15000;
+ streams[0].max_bitrate_bps = 3 * 20000;
+ }
+ return streams;
+ }
+ };
+
class RtpSequenceObserver : public test::RtpRtcpObserver {
public:
explicit RtpSequenceObserver(bool use_rtx)
@@ -3209,30 +3288,17 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx,
video_send_config_.rtp.rtx.payload_type = kSendRtxPayloadType;
}
- // Lower bitrates so that all streams send initially.
- for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) {
- video_encoder_config_.streams[i].min_bitrate_bps = 10000;
- video_encoder_config_.streams[i].target_bitrate_bps = 15000;
- video_encoder_config_.streams[i].max_bitrate_bps = 20000;
- }
-
+ video_encoder_config_.video_stream_factory =
+ new rtc::RefCountedObject<VideoStreamFactory>();
// Use the same total bitrates when sending a single stream to avoid lowering
// the bitrate estimate and requiring a subsequent rampup.
VideoEncoderConfig one_stream = video_encoder_config_.Copy();
- one_stream.streams.resize(1);
- for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) {
- one_stream.streams.front().min_bitrate_bps +=
- video_encoder_config_.streams[i].min_bitrate_bps;
- one_stream.streams.front().target_bitrate_bps +=
- video_encoder_config_.streams[i].target_bitrate_bps;
- one_stream.streams.front().max_bitrate_bps +=
- video_encoder_config_.streams[i].max_bitrate_bps;
- }
-
+ // one_stream.streams.resize(1);
+ one_stream.number_of_streams = 1;
CreateMatchingReceiveConfigs(&receive_transport);
CreateVideoStreams();
- CreateFrameGeneratorCapturer();
+ CreateFrameGeneratorCapturer(30, 1280, 720);
Start();
EXPECT_TRUE(observer.Wait())
@@ -3257,7 +3323,7 @@ void EndToEndTest::TestRtpStatePreservation(bool use_rtx,
static_cast<webrtc::test::DirectTransport&>(receive_transport)
.SendRtcp(packet.data(), packet.size());
}
- CreateFrameGeneratorCapturer();
+ CreateFrameGeneratorCapturer(30, 1280, 720);
frame_generator_capturer_->Start();
observer.ResetExpectedSsrcs(1);
@@ -3512,7 +3578,8 @@ TEST_F(EndToEndTest, CallReportsRttForSender) {
CreateMatchingReceiveConfigs(&receiver_transport);
CreateVideoStreams();
- CreateFrameGeneratorCapturer();
+ CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+ kDefaultHeight);
Start();
int64_t start_time_ms = clock_->TimeInMilliseconds();
@@ -3545,7 +3612,8 @@ void EndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState(
CreateSendConfig(1, 0, transport);
video_send_config_.encoder_settings.encoder = encoder;
CreateVideoStreams();
- CreateFrameGeneratorCapturer();
+ CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+ kDefaultHeight);
Start();
SleepMs(kSilenceTimeoutMs);
@@ -3566,7 +3634,8 @@ void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState(
CreateSendConfig(1, 0, &sender_transport);
CreateMatchingReceiveConfigs(transport);
CreateVideoStreams();
- CreateFrameGeneratorCapturer();
+ CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth,
+ kDefaultHeight);
Start();
SleepMs(kSilenceTimeoutMs);
« no previous file with comments | « webrtc/test/frame_generator_capturer.cc ('k') | webrtc/video/video_quality_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698