OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 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 | 10 |
11 #include <string> | 11 #include <string> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "webrtc/audio/audio_send_stream.h" | 14 #include "webrtc/audio/audio_send_stream.h" |
15 #include "webrtc/audio/audio_state.h" | 15 #include "webrtc/audio/audio_state.h" |
16 #include "webrtc/audio/conversion.h" | 16 #include "webrtc/audio/conversion.h" |
17 #include "webrtc/base/task_queue.h" | 17 #include "webrtc/base/task_queue.h" |
18 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h" | 18 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h" |
19 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h" | 19 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h" |
20 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h" | 20 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h" |
21 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" | 21 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" |
22 #include "webrtc/modules/congestion_controller/include/mock/mock_congestion_cont
roller.h" | 22 #include "webrtc/modules/congestion_controller/include/mock/mock_congestion_cont
roller.h" |
23 #include "webrtc/modules/pacing/paced_sender.h" | 23 #include "webrtc/modules/pacing/paced_sender.h" |
24 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_estimator.h" | 24 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra
te_estimator.h" |
| 25 #include "webrtc/modules/rtp_rtcp/mocks/mock_rtcp_rtt_stats.h" |
25 #include "webrtc/test/gtest.h" | 26 #include "webrtc/test/gtest.h" |
26 #include "webrtc/test/mock_voe_channel_proxy.h" | 27 #include "webrtc/test/mock_voe_channel_proxy.h" |
27 #include "webrtc/test/mock_voice_engine.h" | 28 #include "webrtc/test/mock_voice_engine.h" |
28 | 29 |
29 namespace webrtc { | 30 namespace webrtc { |
30 namespace test { | 31 namespace test { |
31 namespace { | 32 namespace { |
32 | 33 |
33 using testing::_; | 34 using testing::_; |
34 using testing::Return; | 35 using testing::Return; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
140 congestion_controller_.pacer(), | 141 congestion_controller_.pacer(), |
141 congestion_controller_.GetTransportFeedbackObserver(), | 142 congestion_controller_.GetTransportFeedbackObserver(), |
142 packet_router())) | 143 packet_router())) |
143 .Times(1); | 144 .Times(1); |
144 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1); | 145 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1); |
145 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1); | 146 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1); |
146 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1); | 147 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1); |
147 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1); | 148 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1); |
148 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) | 149 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) |
149 .Times(1); // Destructor resets the event log | 150 .Times(1); // Destructor resets the event log |
| 151 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(&rtcp_rtt_stats_)).Times(1); |
| 152 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(testing::IsNull())) |
| 153 .Times(1); // Destructor resets the rtt stats. |
150 } | 154 } |
151 | 155 |
152 void SetupMockForSetupSendCodec() { | 156 void SetupMockForSetupSendCodec() { |
153 EXPECT_CALL(voice_engine_, SetVADStatus(kChannelId, false, _, _)) | 157 EXPECT_CALL(voice_engine_, SetVADStatus(kChannelId, false, _, _)) |
154 .WillOnce(Return(0)); | 158 .WillOnce(Return(0)); |
155 EXPECT_CALL(voice_engine_, SetFECStatus(kChannelId, false)) | 159 EXPECT_CALL(voice_engine_, SetFECStatus(kChannelId, false)) |
156 .WillOnce(Return(0)); | 160 .WillOnce(Return(0)); |
157 EXPECT_CALL(*channel_proxy_, DisableAudioNetworkAdaptor()); | 161 EXPECT_CALL(*channel_proxy_, DisableAudioNetworkAdaptor()); |
158 // Let |GetSendCodec| return -1 for the first time to indicate that no send | 162 // Let |GetSendCodec| return -1 for the first time to indicate that no send |
159 // codec has been set. | 163 // codec has been set. |
160 EXPECT_CALL(voice_engine_, GetSendCodec(kChannelId, _)) | 164 EXPECT_CALL(voice_engine_, GetSendCodec(kChannelId, _)) |
161 .WillOnce(Return(-1)); | 165 .WillOnce(Return(-1)); |
162 EXPECT_CALL(voice_engine_, SetSendCodec(kChannelId, _)).WillOnce(Return(0)); | 166 EXPECT_CALL(voice_engine_, SetSendCodec(kChannelId, _)).WillOnce(Return(0)); |
163 } | 167 } |
| 168 RtcpRttStats* rtcp_rtt_stats() { return &rtcp_rtt_stats_; } |
164 | 169 |
165 void SetupMockForSendTelephoneEvent() { | 170 void SetupMockForSendTelephoneEvent() { |
166 EXPECT_TRUE(channel_proxy_); | 171 EXPECT_TRUE(channel_proxy_); |
167 EXPECT_CALL(*channel_proxy_, | 172 EXPECT_CALL(*channel_proxy_, |
168 SetSendTelephoneEventPayloadType(kTelephoneEventPayloadType, | 173 SetSendTelephoneEventPayloadType(kTelephoneEventPayloadType, |
169 kTelephoneEventPayloadFrequency)) | 174 kTelephoneEventPayloadFrequency)) |
170 .WillOnce(Return(true)); | 175 .WillOnce(Return(true)); |
171 EXPECT_CALL(*channel_proxy_, | 176 EXPECT_CALL(*channel_proxy_, |
172 SendTelephoneEventOutband(kTelephoneEventCode, kTelephoneEventDuration)) | 177 SendTelephoneEventOutband(kTelephoneEventCode, kTelephoneEventDuration)) |
173 .WillOnce(Return(true)); | 178 .WillOnce(Return(true)); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 rtc::scoped_refptr<AudioState> audio_state_; | 223 rtc::scoped_refptr<AudioState> audio_state_; |
219 AudioSendStream::Config stream_config_; | 224 AudioSendStream::Config stream_config_; |
220 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr; | 225 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr; |
221 testing::NiceMock<MockCongestionObserver> bitrate_observer_; | 226 testing::NiceMock<MockCongestionObserver> bitrate_observer_; |
222 testing::NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_; | 227 testing::NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_; |
223 MockAudioProcessing audio_processing_; | 228 MockAudioProcessing audio_processing_; |
224 AudioProcessing::AudioProcessingStatistics audio_processing_stats_; | 229 AudioProcessing::AudioProcessingStatistics audio_processing_stats_; |
225 PacketRouter packet_router_; | 230 PacketRouter packet_router_; |
226 CongestionController congestion_controller_; | 231 CongestionController congestion_controller_; |
227 MockRtcEventLog event_log_; | 232 MockRtcEventLog event_log_; |
| 233 MockRtcpRttStats rtcp_rtt_stats_; |
228 testing::NiceMock<MockLimitObserver> limit_observer_; | 234 testing::NiceMock<MockLimitObserver> limit_observer_; |
229 BitrateAllocator bitrate_allocator_; | 235 BitrateAllocator bitrate_allocator_; |
230 // |worker_queue| is defined last to ensure all pending tasks are cancelled | 236 // |worker_queue| is defined last to ensure all pending tasks are cancelled |
231 // and deleted before any other members. | 237 // and deleted before any other members. |
232 rtc::TaskQueue worker_queue_; | 238 rtc::TaskQueue worker_queue_; |
233 }; | 239 }; |
234 } // namespace | 240 } // namespace |
235 | 241 |
236 TEST(AudioSendStreamTest, ConfigToString) { | 242 TEST(AudioSendStreamTest, ConfigToString) { |
237 AudioSendStream::Config config(nullptr); | 243 AudioSendStream::Config config(nullptr); |
(...skipping 25 matching lines...) Expand all Loading... |
263 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: " | 269 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: " |
264 "320, channels: 1, rate: 32000}}}", | 270 "320, channels: 1, rate: 32000}}}", |
265 config.ToString()); | 271 config.ToString()); |
266 } | 272 } |
267 | 273 |
268 TEST(AudioSendStreamTest, ConstructDestruct) { | 274 TEST(AudioSendStreamTest, ConstructDestruct) { |
269 ConfigHelper helper; | 275 ConfigHelper helper; |
270 internal::AudioSendStream send_stream( | 276 internal::AudioSendStream send_stream( |
271 helper.config(), helper.audio_state(), helper.worker_queue(), | 277 helper.config(), helper.audio_state(), helper.worker_queue(), |
272 helper.packet_router(), helper.congestion_controller(), | 278 helper.packet_router(), helper.congestion_controller(), |
273 helper.bitrate_allocator(), helper.event_log()); | 279 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
274 } | 280 } |
275 | 281 |
276 TEST(AudioSendStreamTest, SendTelephoneEvent) { | 282 TEST(AudioSendStreamTest, SendTelephoneEvent) { |
277 ConfigHelper helper; | 283 ConfigHelper helper; |
278 internal::AudioSendStream send_stream( | 284 internal::AudioSendStream send_stream( |
279 helper.config(), helper.audio_state(), helper.worker_queue(), | 285 helper.config(), helper.audio_state(), helper.worker_queue(), |
280 helper.packet_router(), helper.congestion_controller(), | 286 helper.packet_router(), helper.congestion_controller(), |
281 helper.bitrate_allocator(), helper.event_log()); | 287 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
282 helper.SetupMockForSendTelephoneEvent(); | 288 helper.SetupMockForSendTelephoneEvent(); |
283 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType, | 289 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType, |
284 kTelephoneEventPayloadFrequency, kTelephoneEventCode, | 290 kTelephoneEventPayloadFrequency, kTelephoneEventCode, |
285 kTelephoneEventDuration)); | 291 kTelephoneEventDuration)); |
286 } | 292 } |
287 | 293 |
288 TEST(AudioSendStreamTest, SetMuted) { | 294 TEST(AudioSendStreamTest, SetMuted) { |
289 ConfigHelper helper; | 295 ConfigHelper helper; |
290 internal::AudioSendStream send_stream( | 296 internal::AudioSendStream send_stream( |
291 helper.config(), helper.audio_state(), helper.worker_queue(), | 297 helper.config(), helper.audio_state(), helper.worker_queue(), |
292 helper.packet_router(), helper.congestion_controller(), | 298 helper.packet_router(), helper.congestion_controller(), |
293 helper.bitrate_allocator(), helper.event_log()); | 299 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
294 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true)); | 300 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true)); |
295 send_stream.SetMuted(true); | 301 send_stream.SetMuted(true); |
296 } | 302 } |
297 | 303 |
298 TEST(AudioSendStreamTest, GetStats) { | 304 TEST(AudioSendStreamTest, GetStats) { |
299 ConfigHelper helper; | 305 ConfigHelper helper; |
300 internal::AudioSendStream send_stream( | 306 internal::AudioSendStream send_stream( |
301 helper.config(), helper.audio_state(), helper.worker_queue(), | 307 helper.config(), helper.audio_state(), helper.worker_queue(), |
302 helper.packet_router(), helper.congestion_controller(), | 308 helper.packet_router(), helper.congestion_controller(), |
303 helper.bitrate_allocator(), helper.event_log()); | 309 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
304 helper.SetupMockForGetStats(); | 310 helper.SetupMockForGetStats(); |
305 AudioSendStream::Stats stats = send_stream.GetStats(); | 311 AudioSendStream::Stats stats = send_stream.GetStats(); |
306 EXPECT_EQ(kSsrc, stats.local_ssrc); | 312 EXPECT_EQ(kSsrc, stats.local_ssrc); |
307 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); | 313 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); |
308 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); | 314 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); |
309 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), | 315 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), |
310 stats.packets_lost); | 316 stats.packets_lost); |
311 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); | 317 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); |
312 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); | 318 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); |
313 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), | 319 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), |
(...skipping 10 matching lines...) Expand all Loading... |
324 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); | 330 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); |
325 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); | 331 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); |
326 EXPECT_FALSE(stats.typing_noise_detected); | 332 EXPECT_FALSE(stats.typing_noise_detected); |
327 } | 333 } |
328 | 334 |
329 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { | 335 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { |
330 ConfigHelper helper; | 336 ConfigHelper helper; |
331 internal::AudioSendStream send_stream( | 337 internal::AudioSendStream send_stream( |
332 helper.config(), helper.audio_state(), helper.worker_queue(), | 338 helper.config(), helper.audio_state(), helper.worker_queue(), |
333 helper.packet_router(), helper.congestion_controller(), | 339 helper.packet_router(), helper.congestion_controller(), |
334 helper.bitrate_allocator(), helper.event_log()); | 340 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
335 helper.SetupMockForGetStats(); | 341 helper.SetupMockForGetStats(); |
336 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); | 342 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); |
337 | 343 |
338 internal::AudioState* internal_audio_state = | 344 internal::AudioState* internal_audio_state = |
339 static_cast<internal::AudioState*>(helper.audio_state().get()); | 345 static_cast<internal::AudioState*>(helper.audio_state().get()); |
340 VoiceEngineObserver* voe_observer = | 346 VoiceEngineObserver* voe_observer = |
341 static_cast<VoiceEngineObserver*>(internal_audio_state); | 347 static_cast<VoiceEngineObserver*>(internal_audio_state); |
342 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); | 348 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); |
343 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); | 349 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); |
344 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); | 350 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 EXPECT_CALL( | 384 EXPECT_CALL( |
379 *helper.channel_proxy(), | 385 *helper.channel_proxy(), |
380 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms, | 386 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms, |
381 stream_config.send_codec_spec.max_ptime_ms)); | 387 stream_config.send_codec_spec.max_ptime_ms)); |
382 EXPECT_CALL( | 388 EXPECT_CALL( |
383 *helper.channel_proxy(), | 389 *helper.channel_proxy(), |
384 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config)); | 390 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config)); |
385 internal::AudioSendStream send_stream( | 391 internal::AudioSendStream send_stream( |
386 stream_config, helper.audio_state(), helper.worker_queue(), | 392 stream_config, helper.audio_state(), helper.worker_queue(), |
387 helper.packet_router(), helper.congestion_controller(), | 393 helper.packet_router(), helper.congestion_controller(), |
388 helper.bitrate_allocator(), helper.event_log()); | 394 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
389 } | 395 } |
390 | 396 |
391 // VAD is applied when codec is mono and the CNG frequency matches the codec | 397 // VAD is applied when codec is mono and the CNG frequency matches the codec |
392 // sample rate. | 398 // sample rate. |
393 TEST(AudioSendStreamTest, SendCodecCanApplyVad) { | 399 TEST(AudioSendStreamTest, SendCodecCanApplyVad) { |
394 ConfigHelper helper; | 400 ConfigHelper helper; |
395 auto stream_config = helper.config(); | 401 auto stream_config = helper.config(); |
396 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000}; | 402 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000}; |
397 stream_config.send_codec_spec.codec_inst = kG722Codec; | 403 stream_config.send_codec_spec.codec_inst = kG722Codec; |
398 stream_config.send_codec_spec.cng_plfreq = 8000; | 404 stream_config.send_codec_spec.cng_plfreq = 8000; |
399 stream_config.send_codec_spec.cng_payload_type = 105; | 405 stream_config.send_codec_spec.cng_payload_type = 105; |
400 EXPECT_CALL(*helper.voice_engine(), SetVADStatus(kChannelId, true, _, _)) | 406 EXPECT_CALL(*helper.voice_engine(), SetVADStatus(kChannelId, true, _, _)) |
401 .WillOnce(Return(0)); | 407 .WillOnce(Return(0)); |
402 internal::AudioSendStream send_stream( | 408 internal::AudioSendStream send_stream( |
403 stream_config, helper.audio_state(), helper.worker_queue(), | 409 stream_config, helper.audio_state(), helper.worker_queue(), |
404 helper.packet_router(), helper.congestion_controller(), | 410 helper.packet_router(), helper.congestion_controller(), |
405 helper.bitrate_allocator(), helper.event_log()); | 411 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
406 } | 412 } |
407 | 413 |
408 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) { | 414 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) { |
409 ConfigHelper helper; | 415 ConfigHelper helper; |
410 internal::AudioSendStream send_stream( | 416 internal::AudioSendStream send_stream( |
411 helper.config(), helper.audio_state(), helper.worker_queue(), | 417 helper.config(), helper.audio_state(), helper.worker_queue(), |
412 helper.packet_router(), helper.congestion_controller(), | 418 helper.packet_router(), helper.congestion_controller(), |
413 helper.bitrate_allocator(), helper.event_log()); | 419 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
414 EXPECT_CALL(*helper.channel_proxy(), | 420 EXPECT_CALL(*helper.channel_proxy(), |
415 SetBitrate(helper.config().max_bitrate_bps, _)); | 421 SetBitrate(helper.config().max_bitrate_bps, _)); |
416 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50, | 422 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50, |
417 6000); | 423 6000); |
418 } | 424 } |
419 | 425 |
420 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) { | 426 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) { |
421 ConfigHelper helper; | 427 ConfigHelper helper; |
422 internal::AudioSendStream send_stream( | 428 internal::AudioSendStream send_stream( |
423 helper.config(), helper.audio_state(), helper.worker_queue(), | 429 helper.config(), helper.audio_state(), helper.worker_queue(), |
424 helper.packet_router(), helper.congestion_controller(), | 430 helper.packet_router(), helper.congestion_controller(), |
425 helper.bitrate_allocator(), helper.event_log()); | 431 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); |
426 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000)); | 432 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000)); |
427 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000); | 433 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000); |
428 } | 434 } |
429 | 435 |
430 } // namespace test | 436 } // namespace test |
431 } // namespace webrtc | 437 } // namespace webrtc |
OLD | NEW |