| Index: webrtc/video/video_send_stream_tests.cc | 
| diff --git a/webrtc/video/video_send_stream_tests.cc b/webrtc/video/video_send_stream_tests.cc | 
| index d7d206f8382fc23b8d9e0593c380598655108ddf..656aadce374c585191134ddfca118cd25e120a20 100644 | 
| --- a/webrtc/video/video_send_stream_tests.cc | 
| +++ b/webrtc/video/video_send_stream_tests.cc | 
| @@ -37,7 +37,6 @@ | 
| #include "webrtc/test/frame_utils.h" | 
| #include "webrtc/test/null_transport.h" | 
| #include "webrtc/test/testsupport/perf_test.h" | 
| - | 
| #include "webrtc/video/send_statistics_proxy.h" | 
| #include "webrtc/video_frame.h" | 
| #include "webrtc/video_send_stream.h" | 
| @@ -909,18 +908,16 @@ | 
| VideoSendStream::Config* send_config, | 
| std::vector<VideoReceiveStream::Config>* receive_configs, | 
| VideoEncoderConfig* encoder_config) override { | 
| -      RTC_DCHECK_EQ(1u, encoder_config->number_of_streams); | 
| transport_adapter_.reset( | 
| new internal::TransportAdapter(send_config->send_transport)); | 
| transport_adapter_->Enable(); | 
| send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 
| send_config->pre_encode_callback = this; | 
| send_config->suspend_below_min_bitrate = true; | 
| -      int min_bitrate_bps = | 
| -          test::DefaultVideoStreamFactory::kDefaultMinBitratePerStream[0]; | 
| +      int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; | 
| set_low_remb_bps(min_bitrate_bps - 10000); | 
| int threshold_window = std::max(min_bitrate_bps / 10, 20000); | 
| -      ASSERT_GT(encoder_config->max_bitrate_bps, | 
| +      ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, | 
| min_bitrate_bps + threshold_window + 5000); | 
| set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); | 
| } | 
| @@ -1209,7 +1206,7 @@ | 
| VideoSendStream::Config* send_config, | 
| std::vector<VideoReceiveStream::Config>* receive_configs, | 
| VideoEncoderConfig* encoder_config) override { | 
| -    RTC_DCHECK_EQ(1u, encoder_config->number_of_streams); | 
| +    RTC_DCHECK_EQ(1u, encoder_config->streams.size()); | 
| if (running_without_padding_) { | 
| encoder_config->min_transmit_bitrate_bps = 0; | 
| encoder_config->content_type = | 
| @@ -1275,84 +1272,6 @@ | 
| TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrateAfterContentSwitch) { | 
| MaxPaddingSetTest test(true); | 
| RunBaseTest(&test); | 
| -} | 
| - | 
| -// This test verifies that new frame sizes reconfigures encoders even though not | 
| -// (yet) sending. The purpose of this is to permit encoding as quickly as | 
| -// possible once we start sending. Likely the frames being input are from the | 
| -// same source that will be sent later, which just means that we're ready | 
| -// earlier. | 
| -TEST_F(VideoSendStreamTest, | 
| -       EncoderReconfigureOnResolutionChangeWhenNotSending) { | 
| -  class EncoderObserver : public test::FakeEncoder { | 
| -   public: | 
| -    EncoderObserver() | 
| -        : FakeEncoder(Clock::GetRealTimeClock()), | 
| -          init_encode_called_(false, false), | 
| -          number_of_initializations_(0), | 
| -          last_initialized_frame_width_(0), | 
| -          last_initialized_frame_height_(0) {} | 
| - | 
| -    void WaitForResolution(int width, int height) { | 
| -      { | 
| -        rtc::CritScope lock(&crit_); | 
| -        if (last_initialized_frame_width_ == width && | 
| -            last_initialized_frame_height_ == height) { | 
| -          return; | 
| -        } | 
| -      } | 
| -      init_encode_called_.Wait(VideoSendStreamTest::kDefaultTimeoutMs); | 
| -      { | 
| -        rtc::CritScope lock(&crit_); | 
| -        EXPECT_EQ(width, last_initialized_frame_width_); | 
| -        EXPECT_EQ(height, last_initialized_frame_height_); | 
| -      } | 
| -    } | 
| - | 
| -   private: | 
| -    int32_t InitEncode(const VideoCodec* config, | 
| -                       int32_t number_of_cores, | 
| -                       size_t max_payload_size) override { | 
| -      rtc::CritScope lock(&crit_); | 
| -      last_initialized_frame_width_ = config->width; | 
| -      last_initialized_frame_height_ = config->height; | 
| -      ++number_of_initializations_; | 
| -      // First time InitEncode is called, the frame size is unknown. | 
| -      if (number_of_initializations_ > 1) | 
| -        init_encode_called_.Set(); | 
| -      return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); | 
| -    } | 
| - | 
| -    int32_t Encode(const VideoFrame& input_image, | 
| -                   const CodecSpecificInfo* codec_specific_info, | 
| -                   const std::vector<FrameType>* frame_types) override { | 
| -      ADD_FAILURE() | 
| -          << "Unexpected Encode call since the send stream is not started"; | 
| -      return 0; | 
| -    } | 
| - | 
| -    rtc::CriticalSection crit_; | 
| -    rtc::Event init_encode_called_; | 
| -    size_t number_of_initializations_ GUARDED_BY(&crit_); | 
| -    int last_initialized_frame_width_ GUARDED_BY(&crit_); | 
| -    int last_initialized_frame_height_ GUARDED_BY(&crit_); | 
| -  }; | 
| - | 
| -  CreateSenderCall(Call::Config()); | 
| -  test::NullTransport transport; | 
| -  CreateSendConfig(1, 0, &transport); | 
| -  EncoderObserver encoder; | 
| -  video_send_config_.encoder_settings.encoder = &encoder; | 
| -  CreateVideoStreams(); | 
| -  CreateFrameGeneratorCapturer(kDefaultFramerate, kDefaultWidth, | 
| -                               kDefaultHeight); | 
| -  frame_generator_capturer_->Start(); | 
| - | 
| -  encoder.WaitForResolution(kDefaultWidth, kDefaultHeight); | 
| -  frame_generator_capturer_->ChangeResolution(kDefaultWidth * 2, | 
| -                                              kDefaultHeight * 2); | 
| -  encoder.WaitForResolution(kDefaultWidth * 2, kDefaultHeight * 2); | 
| -  DestroyStreams(); | 
| } | 
|  | 
| TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { | 
| @@ -1400,22 +1319,21 @@ | 
| CreateSendConfig(1, 0, &transport); | 
|  | 
| Call::Config::BitrateConfig bitrate_config; | 
| -  bitrate_config.start_bitrate_bps = 2 * video_encoder_config_.max_bitrate_bps; | 
| +  bitrate_config.start_bitrate_bps = | 
| +      2 * video_encoder_config_.streams[0].max_bitrate_bps; | 
| sender_call_->SetBitrateConfig(bitrate_config); | 
|  | 
| StartBitrateObserver encoder; | 
| video_send_config_.encoder_settings.encoder = &encoder; | 
| -  // Since this test does not use a capturer, set |internal_source| = true. | 
| -  // Encoder configuration is otherwise updated on the next video frame. | 
| -  video_send_config_.encoder_settings.internal_source = true; | 
|  | 
| CreateVideoStreams(); | 
|  | 
| EXPECT_TRUE(encoder.WaitForStartBitrate()); | 
| -  EXPECT_EQ(video_encoder_config_.max_bitrate_bps / 1000, | 
| +  EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, | 
| encoder.GetStartBitrateKbps()); | 
|  | 
| -  video_encoder_config_.max_bitrate_bps = 2 * bitrate_config.start_bitrate_bps; | 
| +  video_encoder_config_.streams[0].max_bitrate_bps = | 
| +      2 * bitrate_config.start_bitrate_bps; | 
| video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); | 
|  | 
| // New bitrate should be reconfigured above the previous max. As there's no | 
| @@ -1541,9 +1459,8 @@ | 
| // Prepare five input frames. Send ordinary VideoFrame and texture frames | 
| // alternatively. | 
| std::vector<VideoFrame> input_frames; | 
| -  int width = 168; | 
| -  int height = 132; | 
| - | 
| +  int width = static_cast<int>(video_encoder_config_.streams[0].width); | 
| +  int height = static_cast<int>(video_encoder_config_.streams[0].height); | 
| test::FakeNativeHandle* handle1 = new test::FakeNativeHandle(); | 
| test::FakeNativeHandle* handle2 = new test::FakeNativeHandle(); | 
| test::FakeNativeHandle* handle3 = new test::FakeNativeHandle(); | 
| @@ -1561,6 +1478,9 @@ | 
| video_send_stream_->SetSource(&forwarder); | 
| for (size_t i = 0; i < input_frames.size(); i++) { | 
| forwarder.IncomingCapturedFrame(input_frames[i]); | 
| +    // Do not send the next frame too fast, so the frame dropper won't drop it. | 
| +    if (i < input_frames.size() - 1) | 
| +      SleepMs(1000 / video_encoder_config_.streams[0].max_framerate); | 
| // Wait until the output frame is received before sending the next input | 
| // frame. Or the previous input frame may be replaced without delivering. | 
| observer.WaitOutputFrame(); | 
| @@ -1687,12 +1607,9 @@ | 
|  | 
| void PerformTest() override { | 
| EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 
| -      // Expect  |num_releases| == 1 since the encoder has been reconfigured | 
| -      // once when the first frame is encoded. Not until at that point is the | 
| -      // frame size known and the encoder can be properly initialized. | 
| -      EXPECT_EQ(1u, num_releases()); | 
| +      EXPECT_EQ(0u, num_releases()); | 
| stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); | 
| -      EXPECT_EQ(1u, num_releases()); | 
| +      EXPECT_EQ(0u, num_releases()); | 
| stream_->Stop(); | 
| // Encoder should not be released before destroying the VideoSendStream. | 
| EXPECT_FALSE(IsReleased()); | 
| @@ -1714,7 +1631,7 @@ | 
| RunBaseTest(&test_encoder); | 
|  | 
| EXPECT_TRUE(test_encoder.IsReleased()); | 
| -  EXPECT_EQ(2u, test_encoder.num_releases()); | 
| +  EXPECT_EQ(1u, test_encoder.num_releases()); | 
| } | 
|  | 
| TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 
| @@ -1797,26 +1714,6 @@ | 
| } | 
|  | 
| private: | 
| -  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); | 
| -      for (size_t i = 0; i < streams.size(); ++i) { | 
| -        streams[i].temporal_layer_thresholds_bps.resize( | 
| -            kVideoCodecConfigObserverNumberOfTemporalLayers - 1); | 
| -      } | 
| -      return streams; | 
| -    } | 
| -  }; | 
| - | 
| void ModifyVideoConfigs( | 
| VideoSendStream::Config* send_config, | 
| std::vector<VideoReceiveStream::Config>* receive_configs, | 
| @@ -1824,9 +1721,12 @@ | 
| send_config->encoder_settings.encoder = this; | 
| send_config->encoder_settings.payload_name = codec_name_; | 
|  | 
| +    for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 
| +      encoder_config->streams[i].temporal_layer_thresholds_bps.resize( | 
| +          kVideoCodecConfigObserverNumberOfTemporalLayers - 1); | 
| +    } | 
| + | 
| encoder_config->encoder_specific_settings = GetEncoderSpecificSettings(); | 
| -    encoder_config->video_stream_factory = | 
| -        new rtc::RefCountedObject<VideoStreamFactory>(); | 
| encoder_config_ = encoder_config->Copy(); | 
| } | 
|  | 
| @@ -2022,26 +1922,6 @@ | 
|  | 
| TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { | 
| static const int kScreencastTargetBitrateKbps = 200; | 
| - | 
| -  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); | 
| -      EXPECT_TRUE(streams[0].temporal_layer_thresholds_bps.empty()); | 
| -      streams[0].temporal_layer_thresholds_bps.push_back( | 
| -          kScreencastTargetBitrateKbps * 1000); | 
| -      return streams; | 
| -    } | 
| -  }; | 
| - | 
| class ScreencastTargetBitrateTest : public test::SendTest, | 
| public test::FakeEncoder { | 
| public: | 
| @@ -2064,9 +1944,11 @@ | 
| std::vector<VideoReceiveStream::Config>* receive_configs, | 
| VideoEncoderConfig* encoder_config) override { | 
| send_config->encoder_settings.encoder = this; | 
| -      EXPECT_EQ(1u, encoder_config->number_of_streams); | 
| -      encoder_config->video_stream_factory = | 
| -          new rtc::RefCountedObject<VideoStreamFactory>(); | 
| +      EXPECT_EQ(1u, encoder_config->streams.size()); | 
| +      EXPECT_TRUE( | 
| +          encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); | 
| +      encoder_config->streams[0].temporal_layer_thresholds_bps.push_back( | 
| +          kScreencastTargetBitrateKbps * 1000); | 
| encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 
| } | 
|  | 
| @@ -2107,8 +1989,7 @@ | 
| size_t maxPayloadSize) override { | 
| EXPECT_GE(codecSettings->startBitrate, codecSettings->minBitrate); | 
| EXPECT_LE(codecSettings->startBitrate, codecSettings->maxBitrate); | 
| -      // First reinitialization happens due to that the frame size is updated. | 
| -      if (num_initializations_ == 0 || num_initializations_ == 1) { | 
| +      if (num_initializations_ == 0) { | 
| EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 
| codecSettings->minBitrate); | 
| EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 
| @@ -2116,14 +1997,14 @@ | 
| EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), | 
| codecSettings->maxBitrate); | 
| observation_complete_.Set(); | 
| -      } else if (num_initializations_ == 2) { | 
| +      } else if (num_initializations_ == 1) { | 
| EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), | 
| codecSettings->maxBitrate); | 
| // The start bitrate should be kept (-1) and capped to the max bitrate. | 
| // Since this is not an end-to-end call no receiver should have been | 
| // returning a REMB that could lower this estimate. | 
| EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); | 
| -      } else if (num_initializations_ == 3) { | 
| +      } else if (num_initializations_ == 2) { | 
| EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), | 
| codecSettings->maxBitrate); | 
| // The start bitrate will be whatever the rate BitRateController | 
| @@ -2131,9 +2012,7 @@ | 
| // bitrate. | 
| } | 
| ++num_initializations_; | 
| -      if (num_initializations_ > 1) { | 
| -        init_encode_event_.Set(); | 
| -      } | 
| +      init_encode_event_.Set(); | 
| return FakeEncoder::InitEncode(codecSettings, numberOfCores, | 
| maxPayloadSize); | 
| } | 
| @@ -2141,9 +2020,6 @@ | 
| int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { | 
| { | 
| rtc::CritScope lock(&crit_); | 
| -        if (target_bitrate_ == newBitRate) { | 
| -          return FakeEncoder::SetRates(newBitRate, frameRate); | 
| -        } | 
| target_bitrate_ = newBitRate; | 
| } | 
| bitrate_changed_event_.Set(); | 
| @@ -2165,26 +2041,6 @@ | 
| config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; | 
| return config; | 
| } | 
| - | 
| -    class VideoStreamFactory | 
| -        : public VideoEncoderConfig::VideoStreamFactoryInterface { | 
| -     public: | 
| -      explicit VideoStreamFactory(int min_bitrate_bps) | 
| -          : min_bitrate_bps_(min_bitrate_bps) {} | 
| - | 
| -     private: | 
| -      std::vector<VideoStream> CreateEncoderStreams( | 
| -          int width, | 
| -          int height, | 
| -          const VideoEncoderConfig& encoder_config) override { | 
| -        std::vector<VideoStream> streams = | 
| -            test::CreateVideoStreams(width, height, encoder_config); | 
| -        streams[0].min_bitrate_bps = min_bitrate_bps_; | 
| -        return streams; | 
| -      } | 
| - | 
| -      const int min_bitrate_bps_; | 
| -    }; | 
|  | 
| void ModifyVideoConfigs( | 
| VideoSendStream::Config* send_config, | 
| @@ -2193,11 +2049,8 @@ | 
| send_config->encoder_settings.encoder = this; | 
| // Set bitrates lower/higher than min/max to make sure they are properly | 
| // capped. | 
| -      encoder_config->max_bitrate_bps = kMaxBitrateKbps * 1000; | 
| -      // Create a new StreamFactory to be able to set | 
| -      // |VideoStream.min_bitrate_bps|. | 
| -      encoder_config->video_stream_factory = | 
| -          new rtc::RefCountedObject<VideoStreamFactory>(kMinBitrateKbps * 1000); | 
| +      encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; | 
| +      encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; | 
| encoder_config_ = encoder_config->Copy(); | 
| } | 
|  | 
| @@ -2222,20 +2075,25 @@ | 
| call_->SetBitrateConfig(bitrate_config); | 
| // Encoder rate is capped by EncoderConfig max_bitrate_bps. | 
| WaitForSetRates(kMaxBitrateKbps); | 
| -      encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 
| + | 
| +      encoder_config_.streams[0].min_bitrate_bps = 0; | 
| +      encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 
| +      send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 
| +      ASSERT_TRUE( | 
| +          init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 
| +      EXPECT_EQ(2, num_initializations_) | 
| +          << "Encoder should have been reconfigured with the new value."; | 
| +      WaitForSetRates(kLowerMaxBitrateKbps); | 
| + | 
| +      encoder_config_.streams[0].target_bitrate_bps = | 
| +          encoder_config_.streams[0].min_bitrate_bps; | 
| +      encoder_config_.streams[0].max_bitrate_bps = | 
| +          kIncreasedMaxBitrateKbps * 1000; | 
| send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 
| ASSERT_TRUE( | 
| init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 
| EXPECT_EQ(3, num_initializations_) | 
| << "Encoder should have been reconfigured with the new value."; | 
| -      WaitForSetRates(kLowerMaxBitrateKbps); | 
| - | 
| -      encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 
| -      send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); | 
| -      ASSERT_TRUE( | 
| -          init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); | 
| -      EXPECT_EQ(4, num_initializations_) | 
| -          << "Encoder should have been reconfigured with the new value."; | 
| // Expected target bitrate is the start bitrate set in the call to | 
| // call_->SetBitrateConfig. | 
| WaitForSetRates(kIncreasedStartBitrateKbps); | 
| @@ -2245,7 +2103,6 @@ | 
| rtc::Event bitrate_changed_event_; | 
| rtc::CriticalSection crit_; | 
| uint32_t target_bitrate_ GUARDED_BY(&crit_); | 
| - | 
| int num_initializations_; | 
| webrtc::Call* call_; | 
| webrtc::VideoSendStream* send_stream_; | 
| @@ -2301,7 +2158,7 @@ | 
| std::vector<VideoReceiveStream::Config>* receive_configs, | 
| VideoEncoderConfig* encoder_config) override { | 
| send_config->encoder_settings.encoder = this; | 
| -      EXPECT_EQ(kNumStreams, encoder_config->number_of_streams); | 
| +      EXPECT_EQ(kNumStreams, encoder_config->streams.size()); | 
| } | 
|  | 
| size_t GetNumVideoStreams() const override { return kNumStreams; } | 
| @@ -2343,9 +2200,7 @@ | 
| vp9_encoder_(VP9Encoder::Create()), | 
| vp9_settings_(VideoEncoder::GetDefaultVp9Settings()), | 
| packets_sent_(0), | 
| -        frames_sent_(0), | 
| -        expected_width_(0), | 
| -        expected_height_(0) {} | 
| +        frames_sent_(0) {} | 
|  | 
| virtual void ModifyVideoConfigsHook( | 
| VideoSendStream::Config* send_config, | 
| @@ -2356,27 +2211,6 @@ | 
|  | 
| private: | 
| const int kVp9PayloadType = 105; | 
| - | 
| -  class VideoStreamFactory | 
| -      : public VideoEncoderConfig::VideoStreamFactoryInterface { | 
| -   public: | 
| -    explicit VideoStreamFactory(size_t number_of_temporal_layers) | 
| -        : number_of_temporal_layers_(number_of_temporal_layers) {} | 
| - | 
| -   private: | 
| -    std::vector<VideoStream> CreateEncoderStreams( | 
| -        int width, | 
| -        int height, | 
| -        const VideoEncoderConfig& encoder_config) override { | 
| -      std::vector<VideoStream> streams = | 
| -          test::CreateVideoStreams(width, height, encoder_config); | 
| -      streams[0].temporal_layer_thresholds_bps.resize( | 
| -          number_of_temporal_layers_ - 1); | 
| -      return streams; | 
| -    } | 
| - | 
| -    const size_t number_of_temporal_layers_; | 
| -  }; | 
|  | 
| void ModifyVideoConfigs( | 
| VideoSendStream::Config* send_config, | 
| @@ -2388,18 +2222,10 @@ | 
| ModifyVideoConfigsHook(send_config, receive_configs, encoder_config); | 
| encoder_config->encoder_specific_settings = new rtc::RefCountedObject< | 
| VideoEncoderConfig::Vp9EncoderSpecificSettings>(vp9_settings_); | 
| -    EXPECT_EQ(1u, encoder_config->number_of_streams); | 
| -    encoder_config->video_stream_factory = | 
| -        new rtc::RefCountedObject<VideoStreamFactory>( | 
| -            vp9_settings_.numberOfTemporalLayers); | 
| +    EXPECT_EQ(1u, encoder_config->streams.size()); | 
| +    encoder_config->streams[0].temporal_layer_thresholds_bps.resize( | 
| +        vp9_settings_.numberOfTemporalLayers - 1); | 
| encoder_config_ = encoder_config->Copy(); | 
| -  } | 
| - | 
| -  void ModifyVideoCaptureStartResolution(int* width, | 
| -                                         int* height, | 
| -                                         int* frame_rate) override { | 
| -    expected_width_ = *width; | 
| -    expected_height_ = *height; | 
| } | 
|  | 
| void PerformTest() override { | 
| @@ -2591,8 +2417,8 @@ | 
| EXPECT_EQ(vp9_settings_.numberOfSpatialLayers,  // N_S + 1 | 
| vp9.num_spatial_layers); | 
| EXPECT_TRUE(vp9.spatial_layer_resolution_present);  // Y:1 | 
| -    int expected_width = expected_width_; | 
| -    int expected_height = expected_height_; | 
| +    size_t expected_width = encoder_config_.streams[0].width; | 
| +    size_t expected_height = encoder_config_.streams[0].height; | 
| for (int i = static_cast<int>(vp9.num_spatial_layers) - 1; i >= 0; --i) { | 
| EXPECT_EQ(expected_width, vp9.width[i]);    // WIDTH | 
| EXPECT_EQ(expected_height, vp9.height[i]);  // HEIGHT | 
| @@ -2636,8 +2462,6 @@ | 
| RTPVideoHeaderVP9 last_vp9_; | 
| size_t packets_sent_; | 
| size_t frames_sent_; | 
| -  int expected_width_; | 
| -  int expected_height_; | 
| }; | 
|  | 
| TEST_F(VideoSendStreamTest, Vp9NonFlexMode_1Tl1SLayers) { | 
| @@ -2739,21 +2563,14 @@ | 
| vp9_settings_.numberOfTemporalLayers = 1; | 
| vp9_settings_.numberOfSpatialLayers = 1; | 
|  | 
| -      EXPECT_EQ(1u, encoder_config->number_of_streams); | 
| +      EXPECT_EQ(1u, encoder_config->streams.size()); | 
| +      encoder_config->streams[0].width = kWidth; | 
| +      encoder_config->streams[0].height = kHeight; | 
| } | 
|  | 
| void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { | 
| if (frames_sent_ > kNumFramesToSend) | 
| observation_complete_.Set(); | 
| -    } | 
| - | 
| -    void ModifyVideoCaptureStartResolution(int* width, | 
| -                                           int* height, | 
| -                                           int* frame_rate) override { | 
| -      expected_width_ = kWidth; | 
| -      expected_height_ = kHeight; | 
| -      *width = kWidth; | 
| -      *height = kHeight; | 
| } | 
| } test; | 
|  | 
|  |