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 67cc69f40b692e712716b975662788cd972e7843..21707ec66e9802a792ece8d37cd4d26fc882f486 100644 |
--- a/webrtc/video/end_to_end_tests.cc |
+++ b/webrtc/video/end_to_end_tests.cc |
@@ -259,8 +259,9 @@ |
Start(); |
std::unique_ptr<test::FrameGenerator> frame_generator( |
- test::FrameGenerator::CreateChromaGenerator(kDefaultWidth, |
- kDefaultHeight)); |
+ test::FrameGenerator::CreateChromaGenerator( |
+ video_encoder_config_.streams[0].width, |
+ video_encoder_config_.streams[0].height)); |
test::FrameForwarder frame_forwarder; |
video_send_stream_->SetSource(&frame_forwarder); |
frame_forwarder.IncomingCapturedFrame(*frame_generator->NextFrame()); |
@@ -304,6 +305,9 @@ |
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); |
@@ -789,6 +793,9 @@ |
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; |
@@ -1114,8 +1121,7 @@ |
CreateMatchingReceiveConfigs(&receive_transport); |
CreateVideoStreams(); |
- CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
- kDefaultHeight); |
+ CreateFrameGeneratorCapturer(); |
Start(); |
receiver_call_->DestroyVideoReceiveStream(video_receive_streams_[0]); |
@@ -1272,8 +1278,13 @@ |
send_config.encoder_settings.payload_name = "VP8"; |
send_config.encoder_settings.payload_type = 124; |
VideoEncoderConfig encoder_config; |
- test::FillEncoderConfiguration(1, &encoder_config); |
- encoder_config.max_bitrate_bps = 100000; |
+ 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; |
UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); |
@@ -1551,9 +1562,11 @@ |
// Force some padding to be sent. |
const int kPaddingBitrateBps = 50000; |
- encoder_config->max_bitrate_bps = 1000000; |
+ int total_target_bitrate = 0; |
+ for (const VideoStream& stream : encoder_config->streams) |
+ total_target_bitrate += stream.target_bitrate_bps; |
encoder_config->min_transmit_bitrate_bps = |
- encoder_config->max_bitrate_bps + kPaddingBitrateBps; |
+ total_target_bitrate + kPaddingBitrateBps; |
// Configure RTX for redundant payload padding. |
send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
@@ -1753,8 +1766,9 @@ |
Start(); |
std::unique_ptr<test::FrameGenerator> frame_generator( |
- test::FrameGenerator::CreateChromaGenerator(kDefaultWidth, |
- kDefaultHeight)); |
+ test::FrameGenerator::CreateChromaGenerator( |
+ video_encoder_config_.streams[0].width, |
+ video_encoder_config_.streams[0].height)); |
test::FrameForwarder forwarder; |
video_send_stream_->SetSource(&forwarder); |
forwarder.IncomingCapturedFrame(*frame_generator->NextFrame()); |
@@ -1905,7 +1919,8 @@ |
test::kTransportSequenceNumberExtensionId)); |
sender_ssrc_ = send_config->rtp.ssrcs[0]; |
- encoder_config->max_bitrate_bps = 2000000; |
+ encoder_config->streams[0].max_bitrate_bps = |
+ encoder_config->streams[0].target_bitrate_bps = 2000000; |
ASSERT_EQ(1u, receive_configs->size()); |
(*receive_configs)[0].rtp.remb = false; |
@@ -2246,18 +2261,24 @@ |
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.ReceivedWidthInPixels")); |
EXPECT_EQ(1, metrics::NumSamples("WebRTC.Video.ReceivedHeightInPixels")); |
- 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::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::NumSamples(video_prefix + "InputFramesPerSecond")); |
EXPECT_EQ(1, metrics::NumSamples(video_prefix + "SentFramesPerSecond")); |
@@ -2463,41 +2484,22 @@ |
size_t GetNumVideoStreams() const override { return num_ssrcs_; } |
- // 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 { |
- encoder_config->video_stream_factory = |
- new rtc::RefCountedObject<VideoStreamFactory>(); |
+ if (num_ssrcs_ > 1) { |
+ // 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; |
+ } |
+ } |
+ |
video_encoder_config_all_streams_ = encoder_config->Copy(); |
if (send_single_ssrc_first_) |
- encoder_config->number_of_streams = 1; |
+ encoder_config->streams.resize(1); |
} |
void OnVideoStreamsCreated( |
@@ -2557,7 +2559,7 @@ |
std::vector<VideoReceiveStream::Config>* receive_configs, |
VideoEncoderConfig* encoder_config) override { |
send_config->encoder_settings.encoder = this; |
- RTC_DCHECK_EQ(1u, encoder_config->number_of_streams); |
+ RTC_DCHECK_EQ(1u, encoder_config->streams.size()); |
} |
int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { |
@@ -2829,38 +2831,16 @@ |
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 { |
- encoder_config->video_stream_factory = |
- new rtc::RefCountedObject<VideoStreamFactory>(); |
+ // 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; |
+ } |
send_config->pre_encode_callback = this; // Used to inject delay. |
expected_cname_ = send_config->rtp.c_name = "SomeCName"; |
@@ -3053,39 +3033,17 @@ |
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. |
- encoder_config->video_stream_factory = |
- new rtc::RefCountedObject<VideoStreamFactory>(); |
+ 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; |
+ } |
+ |
send_config->rtp.rtx.payload_type = kSendRtxPayloadType; |
for (size_t i = 0; i < kNumSsrcs; ++i) |
@@ -3112,43 +3070,6 @@ |
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) |
@@ -3284,17 +3205,30 @@ |
video_send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; |
} |
- video_encoder_config_.video_stream_factory = |
- new rtc::RefCountedObject<VideoStreamFactory>(); |
+ // 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; |
+ } |
+ |
// 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); |
- one_stream.number_of_streams = 1; |
+ 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; |
+ } |
+ |
CreateMatchingReceiveConfigs(&receive_transport); |
CreateVideoStreams(); |
- CreateFrameGeneratorCapturer(30, 1280, 720); |
+ CreateFrameGeneratorCapturer(); |
Start(); |
EXPECT_TRUE(observer.Wait()) |
@@ -3319,7 +3253,7 @@ |
static_cast<webrtc::test::DirectTransport&>(receive_transport) |
.SendRtcp(packet.data(), packet.size()); |
} |
- CreateFrameGeneratorCapturer(30, 1280, 720); |
+ CreateFrameGeneratorCapturer(); |
frame_generator_capturer_->Start(); |
observer.ResetExpectedSsrcs(1); |
@@ -3574,8 +3508,7 @@ |
CreateMatchingReceiveConfigs(&receiver_transport); |
CreateVideoStreams(); |
- CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
- kDefaultHeight); |
+ CreateFrameGeneratorCapturer(); |
Start(); |
int64_t start_time_ms = clock_->TimeInMilliseconds(); |
@@ -3608,8 +3541,7 @@ |
CreateSendConfig(1, 0, transport); |
video_send_config_.encoder_settings.encoder = encoder; |
CreateVideoStreams(); |
- CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
- kDefaultHeight); |
+ CreateFrameGeneratorCapturer(); |
Start(); |
SleepMs(kSilenceTimeoutMs); |
@@ -3630,8 +3562,7 @@ |
CreateSendConfig(1, 0, &sender_transport); |
CreateMatchingReceiveConfigs(transport); |
CreateVideoStreams(); |
- CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
- kDefaultHeight); |
+ CreateFrameGeneratorCapturer(); |
Start(); |
SleepMs(kSilenceTimeoutMs); |