Chromium Code Reviews| 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 2f7b7463a041ff82f6e5c3b8a4de69443b469903..e02bf82ec8a70f0233e3dd3ec03366f15182b328 100644 |
| --- a/webrtc/video/end_to_end_tests.cc |
| +++ b/webrtc/video/end_to_end_tests.cc |
| @@ -258,9 +258,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()); |
| @@ -304,9 +303,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); |
| @@ -792,9 +788,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; |
| @@ -1120,7 +1113,8 @@ TEST_F(EndToEndTest, UnknownRtpPacketGivesUnknownSsrcReturnCode) { |
| CreateMatchingReceiveConfigs(&receive_transport); |
| CreateVideoStreams(); |
| - CreateFrameGeneratorCapturer(); |
| + CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
| + kDefaultHeight); |
| Start(); |
| receiver_call_->DestroyVideoReceiveStream(video_receive_streams_[0]); |
| @@ -1277,13 +1271,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]); |
| @@ -1561,11 +1550,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; |
| @@ -1765,9 +1752,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()); |
| @@ -1918,8 +1904,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; |
| @@ -2258,24 +2243,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")); |
| @@ -2480,22 +2459,37 @@ 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) { |
| + 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->encoder_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( |
| @@ -2555,7 +2549,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 { |
| @@ -2824,16 +2818,34 @@ TEST_F(EndToEndTest, GetStats) { |
| return config; |
| } |
| + 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; |
| + } |
| + }; |
|
sprang_webrtc
2016/09/22 13:06:16
This looks like a duplicate from above. Also very
perkj_webrtc
2016/09/26 12:09:42
yes but these tests override the default. That is
sprang_webrtc
2016/09/26 13:47:37
Acknowledged.
|
| + |
| 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->encoder_stream_factory = |
| + new rtc::RefCountedObject<VideoStreamFactory>(); |
| send_config->pre_encode_callback = this; // Used to inject delay. |
| expected_cname_ = send_config->rtp.c_name = "SomeCName"; |
| @@ -3026,17 +3038,35 @@ TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) { |
| size_t GetNumVideoStreams() const override { return kNumSsrcs; } |
| + 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->encoder_stream_factory = |
| + new rtc::RefCountedObject<VideoStreamFactory>(); |
| send_config->rtp.rtx.payload_type = kSendRtxPayloadType; |
| for (size_t i = 0; i < kNumSsrcs; ++i) |
| @@ -3063,6 +3093,39 @@ TEST_F(EndToEndTest, DISABLED_RedundantPayloadsTransmittedOnAllSsrcs) { |
| void EndToEndTest::TestRtpStatePreservation(bool use_rtx, |
| bool provoke_rtcpsr_before_rtp) { |
| + 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) |
| @@ -3198,30 +3261,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_.encoder_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()) |
| @@ -3246,7 +3296,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); |
| @@ -3501,7 +3551,8 @@ TEST_F(EndToEndTest, CallReportsRttForSender) { |
| CreateMatchingReceiveConfigs(&receiver_transport); |
| CreateVideoStreams(); |
| - CreateFrameGeneratorCapturer(); |
| + CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
| + kDefaultHeight); |
| Start(); |
| int64_t start_time_ms = clock_->TimeInMilliseconds(); |
| @@ -3534,7 +3585,8 @@ void EndToEndTest::VerifyNewVideoSendStreamsRespectNetworkState( |
| CreateSendConfig(1, 0, transport); |
| video_send_config_.encoder_settings.encoder = encoder; |
| CreateVideoStreams(); |
| - CreateFrameGeneratorCapturer(); |
| + CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
| + kDefaultHeight); |
| Start(); |
| SleepMs(kSilenceTimeoutMs); |
| @@ -3555,7 +3607,8 @@ void EndToEndTest::VerifyNewVideoReceiveStreamsRespectNetworkState( |
| CreateSendConfig(1, 0, &sender_transport); |
| CreateMatchingReceiveConfigs(transport); |
| CreateVideoStreams(); |
| - CreateFrameGeneratorCapturer(); |
| + CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, |
| + kDefaultHeight); |
| Start(); |
| SleepMs(kSilenceTimeoutMs); |