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 f6b7450473b9c79e4bf570fc2829e9d68fce692a..9ce2bce27e598043a0fb1c47826ea662f127975b 100644 |
--- a/webrtc/video/video_send_stream_tests.cc |
+++ b/webrtc/video/video_send_stream_tests.cc |
@@ -3169,16 +3169,10 @@ TEST_F(VideoSendStreamTest, |
TestRequestSourceRotateVideo(true); |
} |
-// Flaky on Win32 Release: http://crbug.com/webrtc/6886 |
-#if defined(WEBRTC_WIN) |
-#define MAYBE_RemoveOverheadFromBandwidth DISABLED_RemoveOverheadFromBandwidth |
-#else |
-#define MAYBE_RemoveOverheadFromBandwidth RemoveOverheadFromBandwidth |
-#endif |
// This test verifies that overhead is removed from the bandwidth estimate by |
// testing that the maximum possible target payload rate is smaller than the |
// maximum bandwidth estimate by the overhead rate. |
-TEST_F(VideoSendStreamTest, MAYBE_RemoveOverheadFromBandwidth) { |
+TEST_F(VideoSendStreamTest, RemoveOverheadFromBandwidth) { |
test::ScopedFieldTrials override_field_trials( |
"WebRTC-SendSideBwe-WithOverhead/Enabled/"); |
class RemoveOverheadFromBandwidthTest : public test::EndToEndTest, |
@@ -3188,13 +3182,19 @@ TEST_F(VideoSendStreamTest, MAYBE_RemoveOverheadFromBandwidth) { |
: EndToEndTest(test::CallTest::kDefaultTimeoutMs), |
FakeEncoder(Clock::GetRealTimeClock()), |
call_(nullptr), |
- max_bitrate_kbps_(0) {} |
+ max_bitrate_bps_(0), |
+ first_packet_sent_(false), |
+ bitrate_changed_event_(false, false) {} |
int32_t SetRateAllocation(const BitrateAllocation& bitrate, |
uint32_t frameRate) override { |
rtc::CritScope lock(&crit_); |
- if (max_bitrate_kbps_ < bitrate.get_sum_kbps()) |
- max_bitrate_kbps_ = bitrate.get_sum_kbps(); |
+ // Wait for the first sent packet so that videosendstream knows |
+ // rtp_overhead. |
+ if (first_packet_sent_) { |
+ max_bitrate_bps_ = bitrate.get_sum_bps(); |
+ bitrate_changed_event_.Set(); |
+ } |
return FakeEncoder::SetRateAllocation(bitrate, frameRate); |
} |
@@ -3211,29 +3211,39 @@ TEST_F(VideoSendStreamTest, MAYBE_RemoveOverheadFromBandwidth) { |
EXPECT_FALSE(send_config->rtp.extensions.empty()); |
} |
+ Action OnSendRtp(const uint8_t* packet, size_t length) override { |
+ rtc::CritScope lock(&crit_); |
+ first_packet_sent_ = true; |
+ return SEND_PACKET; |
+ } |
+ |
void PerformTest() override { |
- call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 20); |
Call::Config::BitrateConfig bitrate_config; |
- constexpr int kStartBitrateBps = 50000; |
+ constexpr int kStartBitrateBps = 60000; |
constexpr int kMaxBitrateBps = 60000; |
+ constexpr int kMinBitrateBps = 10000; |
bitrate_config.start_bitrate_bps = kStartBitrateBps; |
bitrate_config.max_bitrate_bps = kMaxBitrateBps; |
+ bitrate_config.min_bitrate_bps = kMinBitrateBps; |
call_->SetBitrateConfig(bitrate_config); |
+ call_->OnTransportOverheadChanged(webrtc::MediaType::VIDEO, 20); |
// At a bitrate of 60kbps with a packet size of 1200B video and an |
- // overhead of 40B per packet video produces 2kbps overhead. |
- // So with a BWE should reach 58kbps but not 60kbps. |
- Wait(); |
+ // overhead of 40B per packet video produces 2240bps overhead. |
+ // So the encoder BW should be set to 57760bps. |
+ bitrate_changed_event_.Wait(VideoSendStreamTest::kDefaultTimeoutMs); |
{ |
rtc::CritScope lock(&crit_); |
- EXPECT_EQ(58u, max_bitrate_kbps_); |
+ EXPECT_LE(57760u, max_bitrate_bps_); |
} |
} |
private: |
Call* call_; |
rtc::CriticalSection crit_; |
- uint32_t max_bitrate_kbps_ GUARDED_BY(&crit_); |
+ uint32_t max_bitrate_bps_ GUARDED_BY(&crit_); |
+ bool first_packet_sent_ GUARDED_BY(&crit_); |
+ rtc::Event bitrate_changed_event_; |
} test; |
RunBaseTest(&test); |