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

Side by Side Diff: webrtc/video/video_send_stream_tests.cc

Issue 2457203002: Revert of Reland Change ViEEncoder to not reconfigure the encoder until the video resolution is known. (Closed)
Patch Set: Created 4 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2_unittest.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> // max 10 #include <algorithm> // max
(...skipping 1767 matching lines...) Expand 10 before | Expand all | Expand 10 after
1778 void ModifyVideoConfigs( 1778 void ModifyVideoConfigs(
1779 VideoSendStream::Config* send_config, 1779 VideoSendStream::Config* send_config,
1780 std::vector<VideoReceiveStream::Config>* receive_configs, 1780 std::vector<VideoReceiveStream::Config>* receive_configs,
1781 VideoEncoderConfig* encoder_config) override { 1781 VideoEncoderConfig* encoder_config) override {
1782 send_config->encoder_settings.encoder = this; 1782 send_config->encoder_settings.encoder = this;
1783 encoder_config_ = encoder_config->Copy(); 1783 encoder_config_ = encoder_config->Copy();
1784 } 1784 }
1785 1785
1786 void PerformTest() override { 1786 void PerformTest() override {
1787 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; 1787 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1788 EXPECT_EQ(0u, num_releases()); 1788 // Expect |num_releases| == 1 since the encoder has been reconfigured
1789 // once when the first frame is encoded. Not until at that point is the
1790 // frame size known and the encoder can be properly initialized.
1791 EXPECT_EQ(1u, num_releases());
1789 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); 1792 stream_->ReconfigureVideoEncoder(std::move(encoder_config_));
1790 EXPECT_EQ(0u, num_releases()); 1793 EXPECT_EQ(1u, num_releases());
1791 stream_->Stop(); 1794 stream_->Stop();
1792 // Encoder should not be released before destroying the VideoSendStream. 1795 // Encoder should not be released before destroying the VideoSendStream.
1793 EXPECT_FALSE(IsReleased()); 1796 EXPECT_FALSE(IsReleased());
1794 EXPECT_TRUE(IsReadyForEncode()); 1797 EXPECT_TRUE(IsReadyForEncode());
1795 stream_->Start(); 1798 stream_->Start();
1796 // Sanity check, make sure we still encode frames with this encoder. 1799 // Sanity check, make sure we still encode frames with this encoder.
1797 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; 1800 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode.";
1798 } 1801 }
1799 1802
1800 rtc::CriticalSection crit_; 1803 rtc::CriticalSection crit_;
1801 VideoSendStream* stream_; 1804 VideoSendStream* stream_;
1802 bool initialized_ GUARDED_BY(crit_); 1805 bool initialized_ GUARDED_BY(crit_);
1803 bool callback_registered_ GUARDED_BY(crit_); 1806 bool callback_registered_ GUARDED_BY(crit_);
1804 size_t num_releases_ GUARDED_BY(crit_); 1807 size_t num_releases_ GUARDED_BY(crit_);
1805 bool released_ GUARDED_BY(crit_); 1808 bool released_ GUARDED_BY(crit_);
1806 VideoEncoderConfig encoder_config_; 1809 VideoEncoderConfig encoder_config_;
1807 } test_encoder; 1810 } test_encoder;
1808 1811
1809 RunBaseTest(&test_encoder); 1812 RunBaseTest(&test_encoder);
1810 1813
1811 EXPECT_TRUE(test_encoder.IsReleased()); 1814 EXPECT_TRUE(test_encoder.IsReleased());
1812 EXPECT_EQ(1u, test_encoder.num_releases()); 1815 EXPECT_EQ(2u, test_encoder.num_releases());
1813 } 1816 }
1814 1817
1815 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { 1818 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) {
1816 class VideoCodecConfigObserver : public test::SendTest, 1819 class VideoCodecConfigObserver : public test::SendTest,
1817 public test::FakeEncoder { 1820 public test::FakeEncoder {
1818 public: 1821 public:
1819 VideoCodecConfigObserver() 1822 VideoCodecConfigObserver()
1820 : SendTest(kDefaultTimeoutMs), 1823 : SendTest(kDefaultTimeoutMs),
1821 FakeEncoder(Clock::GetRealTimeClock()), 1824 FakeEncoder(Clock::GetRealTimeClock()),
1822 init_encode_event_(false, false), 1825 init_encode_event_(false, false),
(...skipping 11 matching lines...) Expand all
1834 1837
1835 void OnVideoStreamsCreated( 1838 void OnVideoStreamsCreated(
1836 VideoSendStream* send_stream, 1839 VideoSendStream* send_stream,
1837 const std::vector<VideoReceiveStream*>& receive_streams) override { 1840 const std::vector<VideoReceiveStream*>& receive_streams) override {
1838 stream_ = send_stream; 1841 stream_ = send_stream;
1839 } 1842 }
1840 1843
1841 int32_t InitEncode(const VideoCodec* config, 1844 int32_t InitEncode(const VideoCodec* config,
1842 int32_t number_of_cores, 1845 int32_t number_of_cores,
1843 size_t max_payload_size) override { 1846 size_t max_payload_size) override {
1844 if (num_initializations_ == 0) { 1847 if (num_initializations_ < 2) {
1845 // Verify default values. 1848 // Verify default values.
1846 EXPECT_EQ(kRealtimeVideo, config->mode); 1849 EXPECT_EQ(kRealtimeVideo, config->mode);
1847 } else { 1850 } else {
1848 // Verify that changed values are propagated. 1851 // Verify that changed values are propagated.
1849 EXPECT_EQ(kScreensharing, config->mode); 1852 EXPECT_EQ(kScreensharing, config->mode);
1850 } 1853 }
1851 ++num_initializations_; 1854 ++num_initializations_;
1852 init_encode_event_.Set(); 1855 if (num_initializations_ > 1) {
1856 // Skip the first two InitEncode events: one with QCIF resolution when
1857 // the SendStream is created, the other with QVGA when the first frame
1858 // is encoded.
1859 init_encode_event_.Set();
1860 }
1853 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); 1861 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size);
1854 } 1862 }
1855 1863
1856 void PerformTest() override { 1864 void PerformTest() override {
1857 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); 1865 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs));
1858 EXPECT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; 1866 EXPECT_EQ(2u, num_initializations_) << "VideoEncoder not initialized.";
1859 1867
1860 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen; 1868 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen;
1861 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); 1869 stream_->ReconfigureVideoEncoder(std::move(encoder_config_));
1862 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs)); 1870 EXPECT_TRUE(init_encode_event_.Wait(kDefaultTimeoutMs));
1863 EXPECT_EQ(2u, num_initializations_) 1871 EXPECT_EQ(3u, num_initializations_)
1864 << "ReconfigureVideoEncoder did not reinitialize the encoder with " 1872 << "ReconfigureVideoEncoder did not reinitialize the encoder with "
1865 "new encoder settings."; 1873 "new encoder settings.";
1866 } 1874 }
1867 1875
1868 rtc::Event init_encode_event_; 1876 rtc::Event init_encode_event_;
1869 size_t num_initializations_; 1877 size_t num_initializations_;
1870 VideoSendStream* stream_; 1878 VideoSendStream* stream_;
1871 VideoEncoderConfig encoder_config_; 1879 VideoEncoderConfig encoder_config_;
1872 } test; 1880 } test;
1873 1881
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1930 const std::vector<VideoReceiveStream*>& receive_streams) override { 1938 const std::vector<VideoReceiveStream*>& receive_streams) override {
1931 stream_ = send_stream; 1939 stream_ = send_stream;
1932 } 1940 }
1933 1941
1934 int32_t InitEncode(const VideoCodec* config, 1942 int32_t InitEncode(const VideoCodec* config,
1935 int32_t number_of_cores, 1943 int32_t number_of_cores,
1936 size_t max_payload_size) override { 1944 size_t max_payload_size) override {
1937 EXPECT_EQ(video_codec_type_, config->codecType); 1945 EXPECT_EQ(video_codec_type_, config->codecType);
1938 VerifyCodecSpecifics(*config); 1946 VerifyCodecSpecifics(*config);
1939 ++num_initializations_; 1947 ++num_initializations_;
1940 init_encode_event_.Set(); 1948 if (num_initializations_ > 1) {
1949 // Skip the first two InitEncode events: one with QCIF resolution when
1950 // the SendStream is created, the other with QVGA when the first frame is
1951 // encoded.
1952 init_encode_event_.Set();
1953 }
1941 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size); 1954 return FakeEncoder::InitEncode(config, number_of_cores, max_payload_size);
1942 } 1955 }
1943 1956
1944 void VerifyCodecSpecifics(const VideoCodec& config) const; 1957 void VerifyCodecSpecifics(const VideoCodec& config) const;
1945 rtc::scoped_refptr<VideoEncoderConfig::EncoderSpecificSettings> 1958 rtc::scoped_refptr<VideoEncoderConfig::EncoderSpecificSettings>
1946 GetEncoderSpecificSettings() const; 1959 GetEncoderSpecificSettings() const;
1947 1960
1948 void PerformTest() override { 1961 void PerformTest() override {
1949 EXPECT_TRUE( 1962 EXPECT_TRUE(
1950 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); 1963 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
1951 ASSERT_EQ(1u, num_initializations_) << "VideoEncoder not initialized."; 1964 ASSERT_EQ(2u, num_initializations_) << "VideoEncoder not initialized.";
1952 1965
1953 encoder_settings_.frameDroppingOn = true; 1966 encoder_settings_.frameDroppingOn = true;
1954 encoder_config_.encoder_specific_settings = GetEncoderSpecificSettings(); 1967 encoder_config_.encoder_specific_settings = GetEncoderSpecificSettings();
1955 stream_->ReconfigureVideoEncoder(std::move(encoder_config_)); 1968 stream_->ReconfigureVideoEncoder(std::move(encoder_config_));
1956 ASSERT_TRUE( 1969 ASSERT_TRUE(
1957 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); 1970 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
1958 EXPECT_EQ(2u, num_initializations_) 1971 EXPECT_EQ(3u, num_initializations_)
1959 << "ReconfigureVideoEncoder did not reinitialize the encoder with " 1972 << "ReconfigureVideoEncoder did not reinitialize the encoder with "
1960 "new encoder settings."; 1973 "new encoder settings.";
1961 } 1974 }
1962 1975
1963 int32_t Encode(const VideoFrame& input_image, 1976 int32_t Encode(const VideoFrame& input_image,
1964 const CodecSpecificInfo* codec_specific_info, 1977 const CodecSpecificInfo* codec_specific_info,
1965 const std::vector<FrameType>* frame_types) override { 1978 const std::vector<FrameType>* frame_types) override {
1966 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8. 1979 // Silently skip the encode, FakeEncoder::Encode doesn't produce VP8.
1967 return 0; 1980 return 0;
1968 } 1981 }
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
2195 num_initializations_(0), 2208 num_initializations_(0),
2196 call_(nullptr), 2209 call_(nullptr),
2197 send_stream_(nullptr) {} 2210 send_stream_(nullptr) {}
2198 2211
2199 private: 2212 private:
2200 int32_t InitEncode(const VideoCodec* codecSettings, 2213 int32_t InitEncode(const VideoCodec* codecSettings,
2201 int32_t numberOfCores, 2214 int32_t numberOfCores,
2202 size_t maxPayloadSize) override { 2215 size_t maxPayloadSize) override {
2203 EXPECT_GE(codecSettings->startBitrate, codecSettings->minBitrate); 2216 EXPECT_GE(codecSettings->startBitrate, codecSettings->minBitrate);
2204 EXPECT_LE(codecSettings->startBitrate, codecSettings->maxBitrate); 2217 EXPECT_LE(codecSettings->startBitrate, codecSettings->maxBitrate);
2205 if (num_initializations_ == 0) { 2218 // First reinitialization happens due to that the frame size is updated.
2219 if (num_initializations_ == 0 || num_initializations_ == 1) {
2206 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), 2220 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps),
2207 codecSettings->minBitrate); 2221 codecSettings->minBitrate);
2208 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), 2222 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps),
2209 codecSettings->startBitrate); 2223 codecSettings->startBitrate);
2210 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), 2224 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps),
2211 codecSettings->maxBitrate); 2225 codecSettings->maxBitrate);
2212 observation_complete_.Set(); 2226 observation_complete_.Set();
2213 } else if (num_initializations_ == 1) { 2227 } else if (num_initializations_ == 2) {
2214 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), 2228 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps),
2215 codecSettings->maxBitrate); 2229 codecSettings->maxBitrate);
2216 // The start bitrate should be kept (-1) and capped to the max bitrate. 2230 // The start bitrate should be kept (-1) and capped to the max bitrate.
2217 // Since this is not an end-to-end call no receiver should have been 2231 // Since this is not an end-to-end call no receiver should have been
2218 // returning a REMB that could lower this estimate. 2232 // returning a REMB that could lower this estimate.
2219 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); 2233 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate);
2220 } else if (num_initializations_ == 2) { 2234 } else if (num_initializations_ == 3) {
2221 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), 2235 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps),
2222 codecSettings->maxBitrate); 2236 codecSettings->maxBitrate);
2223 // The start bitrate will be whatever the rate BitRateController 2237 // The start bitrate will be whatever the rate BitRateController
2224 // has currently configured but in the span of the set max and min 2238 // has currently configured but in the span of the set max and min
2225 // bitrate. 2239 // bitrate.
2226 } 2240 }
2227 ++num_initializations_; 2241 ++num_initializations_;
2228 init_encode_event_.Set(); 2242 if (num_initializations_ > 1) {
2229 2243 init_encode_event_.Set();
2244 }
2230 return FakeEncoder::InitEncode(codecSettings, numberOfCores, 2245 return FakeEncoder::InitEncode(codecSettings, numberOfCores,
2231 maxPayloadSize); 2246 maxPayloadSize);
2232 } 2247 }
2233 2248
2234 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { 2249 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override {
2235 { 2250 {
2236 rtc::CritScope lock(&crit_); 2251 rtc::CritScope lock(&crit_);
2237 if (target_bitrate_ == newBitRate) { 2252 if (target_bitrate_ == newBitRate) {
2238 return FakeEncoder::SetRates(newBitRate, frameRate); 2253 return FakeEncoder::SetRates(newBitRate, frameRate);
2239 } 2254 }
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
2312 Call::Config::BitrateConfig bitrate_config; 2327 Call::Config::BitrateConfig bitrate_config;
2313 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; 2328 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000;
2314 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; 2329 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000;
2315 call_->SetBitrateConfig(bitrate_config); 2330 call_->SetBitrateConfig(bitrate_config);
2316 // Encoder rate is capped by EncoderConfig max_bitrate_bps. 2331 // Encoder rate is capped by EncoderConfig max_bitrate_bps.
2317 WaitForSetRates(kMaxBitrateKbps); 2332 WaitForSetRates(kMaxBitrateKbps);
2318 encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000; 2333 encoder_config_.max_bitrate_bps = kLowerMaxBitrateKbps * 1000;
2319 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); 2334 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy());
2320 ASSERT_TRUE( 2335 ASSERT_TRUE(
2321 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); 2336 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
2322 EXPECT_EQ(2, num_initializations_) 2337 EXPECT_EQ(3, num_initializations_)
2323 << "Encoder should have been reconfigured with the new value."; 2338 << "Encoder should have been reconfigured with the new value.";
2324 WaitForSetRates(kLowerMaxBitrateKbps); 2339 WaitForSetRates(kLowerMaxBitrateKbps);
2325 2340
2326 encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; 2341 encoder_config_.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000;
2327 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy()); 2342 send_stream_->ReconfigureVideoEncoder(encoder_config_.Copy());
2328 ASSERT_TRUE( 2343 ASSERT_TRUE(
2329 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs)); 2344 init_encode_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs));
2330 EXPECT_EQ(3, num_initializations_) 2345 EXPECT_EQ(4, num_initializations_)
2331 << "Encoder should have been reconfigured with the new value."; 2346 << "Encoder should have been reconfigured with the new value.";
2332 // Expected target bitrate is the start bitrate set in the call to 2347 // Expected target bitrate is the start bitrate set in the call to
2333 // call_->SetBitrateConfig. 2348 // call_->SetBitrateConfig.
2334 WaitForSetRates(kIncreasedStartBitrateKbps); 2349 WaitForSetRates(kIncreasedStartBitrateKbps);
2335 } 2350 }
2336 2351
2337 rtc::Event init_encode_event_; 2352 rtc::Event init_encode_event_;
2338 rtc::Event bitrate_changed_event_; 2353 rtc::Event bitrate_changed_event_;
2339 rtc::CriticalSection crit_; 2354 rtc::CriticalSection crit_;
2340 uint32_t target_bitrate_ GUARDED_BY(&crit_); 2355 uint32_t target_bitrate_ GUARDED_BY(&crit_);
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after
2873 observation_complete_.Set(); 2888 observation_complete_.Set();
2874 } 2889 }
2875 } 2890 }
2876 } test; 2891 } test;
2877 2892
2878 RunBaseTest(&test); 2893 RunBaseTest(&test);
2879 } 2894 }
2880 #endif // !defined(RTC_DISABLE_VP9) 2895 #endif // !defined(RTC_DISABLE_VP9)
2881 2896
2882 } // namespace webrtc 2897 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/media/engine/webrtcvideoengine2_unittest.cc ('k') | webrtc/video/vie_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698