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

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

Issue 2106183002: Fix bug where min transmit bitrate wasn't working (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Addressed comments Created 4 years, 5 months 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/video/video_send_stream.cc ('k') | no next file » | 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 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 1114
1115 std::unique_ptr<RtpRtcp> rtp_rtcp_; 1115 std::unique_ptr<RtpRtcp> rtp_rtcp_;
1116 std::unique_ptr<internal::TransportAdapter> feedback_transport_; 1116 std::unique_ptr<internal::TransportAdapter> feedback_transport_;
1117 VideoSendStream* stream_; 1117 VideoSendStream* stream_;
1118 bool bitrate_capped_; 1118 bool bitrate_capped_;
1119 } test; 1119 } test;
1120 1120
1121 RunBaseTest(&test); 1121 RunBaseTest(&test);
1122 } 1122 }
1123 1123
1124 class MaxPaddingSetTest : public test::SendTest {
1125 public:
1126 static const uint32_t kMinTransmitBitrateBps = 400000;
1127 static const uint32_t kActualEncodeBitrateBps = 40000;
1128 static const uint32_t kMinPacketsToSend = 50;
1129
1130 explicit MaxPaddingSetTest(bool test_switch_content_type)
1131 : SendTest(test::CallTest::kDefaultTimeoutMs),
1132 call_(nullptr),
1133 send_stream_(nullptr),
1134 packets_sent_(0),
1135 running_without_padding_(test_switch_content_type) {}
1136
1137 void OnVideoStreamsCreated(
1138 VideoSendStream* send_stream,
1139 const std::vector<VideoReceiveStream*>& receive_streams) override {
1140 send_stream_ = send_stream;
1141 }
1142
1143 void ModifyVideoConfigs(
1144 VideoSendStream::Config* send_config,
1145 std::vector<VideoReceiveStream::Config>* receive_configs,
1146 VideoEncoderConfig* encoder_config) override {
1147 RTC_DCHECK_EQ(1u, encoder_config->streams.size());
1148 if (running_without_padding_) {
1149 encoder_config->min_transmit_bitrate_bps = 0;
1150 encoder_config->content_type =
1151 VideoEncoderConfig::ContentType::kRealtimeVideo;
1152 } else {
1153 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps;
1154 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen;
1155 }
1156 encoder_config_ = *encoder_config;
1157 }
1158
1159 void OnCallsCreated(Call* sender_call, Call* receiver_call) override {
1160 call_ = sender_call;
1161 }
1162
1163 Action OnSendRtp(const uint8_t* packet, size_t length) override {
1164 rtc::CritScope lock(&crit_);
1165
1166 if (running_without_padding_)
1167 EXPECT_EQ(0, call_->GetStats().max_padding_bitrate_bps);
1168
1169 // Wait until at least kMinFramesToSend frames have been encoded, so that
perkj_webrtc 2016/07/05 12:41:16 kMinPacketsToSend ?
sprang_webrtc 2016/07/05 12:51:01 Done.
1170 // we have reliable data.
1171 if (++packets_sent_ < kMinPacketsToSend)
1172 return SEND_PACKET;
1173
1174 if (running_without_padding_) {
1175 // We've sent kMinFramesToSend frames with default configuration, switch
perkj_webrtc 2016/07/05 12:41:16 kMinPacketsToSend
sprang_webrtc 2016/07/05 12:51:01 Done.
1176 // to enabling screen content and setting min transmit bitrate.
1177 packets_sent_ = 0;
1178 encoder_config_.min_transmit_bitrate_bps = kMinTransmitBitrateBps;
1179 encoder_config_.content_type = VideoEncoderConfig::ContentType::kScreen;
1180 send_stream_->ReconfigureVideoEncoder(encoder_config_);
1181 running_without_padding_ = false;
1182 return SEND_PACKET;
1183 }
1184
1185 // Make sure the pacer has been configured with a min transmit bitrate.
1186 if (call_->GetStats().max_padding_bitrate_bps > 0)
1187 observation_complete_.Set();
1188
1189 return SEND_PACKET;
1190 }
1191
1192 void PerformTest() override {
1193 ASSERT_TRUE(Wait()) << "Timed out waiting for a valid padding bitrate.";
1194 }
1195
1196 private:
1197 rtc::CriticalSection crit_;
1198 Call* call_;
1199 VideoSendStream* send_stream_;
1200 VideoEncoderConfig encoder_config_;
1201 uint32_t packets_sent_ GUARDED_BY(crit_);
1202 bool running_without_padding_;
1203 };
1204
1205 TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrate) {
1206 MaxPaddingSetTest test(false);
1207 RunBaseTest(&test);
1208 }
1209
1210 TEST_F(VideoSendStreamTest, RespectsMinTransmitBitrateAfterContentSwitch) {
1211 MaxPaddingSetTest test(true);
1212 RunBaseTest(&test);
1213 }
1214
1124 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { 1215 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) {
1125 class StartBitrateObserver : public test::FakeEncoder { 1216 class StartBitrateObserver : public test::FakeEncoder {
1126 public: 1217 public:
1127 StartBitrateObserver() 1218 StartBitrateObserver()
1128 : FakeEncoder(Clock::GetRealTimeClock()), 1219 : FakeEncoder(Clock::GetRealTimeClock()),
1129 start_bitrate_changed_(false, false), 1220 start_bitrate_changed_(false, false),
1130 start_bitrate_kbps_(0) {} 1221 start_bitrate_kbps_(0) {}
1131 int32_t InitEncode(const VideoCodec* config, 1222 int32_t InitEncode(const VideoCodec* config,
1132 int32_t number_of_cores, 1223 int32_t number_of_cores,
1133 size_t max_payload_size) override { 1224 size_t max_payload_size) override {
(...skipping 1242 matching lines...) Expand 10 before | Expand all | Expand 10 after
2376 observation_complete_.Set(); 2467 observation_complete_.Set();
2377 } 2468 }
2378 } 2469 }
2379 } test; 2470 } test;
2380 2471
2381 RunBaseTest(&test); 2472 RunBaseTest(&test);
2382 } 2473 }
2383 #endif // !defined(RTC_DISABLE_VP9) 2474 #endif // !defined(RTC_DISABLE_VP9)
2384 2475
2385 } // namespace webrtc 2476 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_send_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698