OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |