| 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 |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 uint32_t max_padding_bitrate_bps)); | 60 uint32_t max_padding_bitrate_bps)); |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 struct ConfigHelper { | 63 struct ConfigHelper { |
| 64 ConfigHelper() | 64 ConfigHelper() |
| 65 : simulated_clock_(123456), | 65 : simulated_clock_(123456), |
| 66 stream_config_(nullptr), | 66 stream_config_(nullptr), |
| 67 congestion_controller_(&simulated_clock_, | 67 congestion_controller_(&simulated_clock_, |
| 68 &bitrate_observer_, | 68 &bitrate_observer_, |
| 69 &remote_bitrate_observer_, | 69 &remote_bitrate_observer_, |
| 70 &event_log_), | 70 &event_log_, |
| 71 &packet_router_), |
| 71 bitrate_allocator_(&limit_observer_), | 72 bitrate_allocator_(&limit_observer_), |
| 72 worker_queue_("ConfigHelper_worker_queue") { | 73 worker_queue_("ConfigHelper_worker_queue") { |
| 73 using testing::Invoke; | 74 using testing::Invoke; |
| 74 | 75 |
| 75 EXPECT_CALL(voice_engine_, | 76 EXPECT_CALL(voice_engine_, |
| 76 RegisterVoiceEngineObserver(_)).WillOnce(Return(0)); | 77 RegisterVoiceEngineObserver(_)).WillOnce(Return(0)); |
| 77 EXPECT_CALL(voice_engine_, | 78 EXPECT_CALL(voice_engine_, |
| 78 DeRegisterVoiceEngineObserver()).WillOnce(Return(0)); | 79 DeRegisterVoiceEngineObserver()).WillOnce(Return(0)); |
| 79 EXPECT_CALL(voice_engine_, audio_device_module()); | 80 EXPECT_CALL(voice_engine_, audio_device_module()); |
| 80 EXPECT_CALL(voice_engine_, audio_processing()); | 81 EXPECT_CALL(voice_engine_, audio_processing()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 103 stream_config_.rtp.extensions.push_back(RtpExtension( | 104 stream_config_.rtp.extensions.push_back(RtpExtension( |
| 104 RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId)); | 105 RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId)); |
| 105 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_| | 106 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_| |
| 106 // calls from the default ctor behavior. | 107 // calls from the default ctor behavior. |
| 107 stream_config_.send_codec_spec.codec_inst = kIsacCodec; | 108 stream_config_.send_codec_spec.codec_inst = kIsacCodec; |
| 108 } | 109 } |
| 109 | 110 |
| 110 AudioSendStream::Config& config() { return stream_config_; } | 111 AudioSendStream::Config& config() { return stream_config_; } |
| 111 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } | 112 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } |
| 112 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; } | 113 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; } |
| 114 PacketRouter* packet_router() { return &packet_router_; } |
| 113 CongestionController* congestion_controller() { | 115 CongestionController* congestion_controller() { |
| 114 return &congestion_controller_; | 116 return &congestion_controller_; |
| 115 } | 117 } |
| 116 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; } | 118 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; } |
| 117 rtc::TaskQueue* worker_queue() { return &worker_queue_; } | 119 rtc::TaskQueue* worker_queue() { return &worker_queue_; } |
| 118 RtcEventLog* event_log() { return &event_log_; } | 120 RtcEventLog* event_log() { return &event_log_; } |
| 119 MockVoiceEngine* voice_engine() { return &voice_engine_; } | 121 MockVoiceEngine* voice_engine() { return &voice_engine_; } |
| 120 | 122 |
| 121 void SetupDefaultChannelProxy() { | 123 void SetupDefaultChannelProxy() { |
| 122 using testing::StrEq; | 124 using testing::StrEq; |
| 123 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>(); | 125 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>(); |
| 124 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1); | 126 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1); |
| 125 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1); | 127 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1); |
| 126 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1); | 128 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1); |
| 127 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1); | 129 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1); |
| 128 EXPECT_CALL(*channel_proxy_, | 130 EXPECT_CALL(*channel_proxy_, |
| 129 SetSendAudioLevelIndicationStatus(true, kAudioLevelId)) | 131 SetSendAudioLevelIndicationStatus(true, kAudioLevelId)) |
| 130 .Times(1); | 132 .Times(1); |
| 131 EXPECT_CALL(*channel_proxy_, | 133 EXPECT_CALL(*channel_proxy_, |
| 132 EnableSendTransportSequenceNumber(kTransportSequenceNumberId)) | 134 EnableSendTransportSequenceNumber(kTransportSequenceNumberId)) |
| 133 .Times(1); | 135 .Times(1); |
| 134 EXPECT_CALL(*channel_proxy_, | 136 EXPECT_CALL(*channel_proxy_, |
| 135 RegisterSenderCongestionControlObjects( | 137 RegisterSenderCongestionControlObjects( |
| 136 congestion_controller_.pacer(), | 138 congestion_controller_.pacer(), |
| 137 congestion_controller_.GetTransportFeedbackObserver(), | 139 congestion_controller_.GetTransportFeedbackObserver(), |
| 138 congestion_controller_.packet_router())) | 140 packet_router())) |
| 139 .Times(1); | 141 .Times(1); |
| 140 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1); | 142 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1); |
| 141 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1); | 143 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1); |
| 142 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1); | 144 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1); |
| 143 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1); | 145 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1); |
| 144 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) | 146 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) |
| 145 .Times(1); // Destructor resets the event log | 147 .Times(1); // Destructor resets the event log |
| 146 } | 148 } |
| 147 | 149 |
| 148 void SetupMockForSetupSendCodec() { | 150 void SetupMockForSetupSendCodec() { |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 private: | 213 private: |
| 212 SimulatedClock simulated_clock_; | 214 SimulatedClock simulated_clock_; |
| 213 testing::StrictMock<MockVoiceEngine> voice_engine_; | 215 testing::StrictMock<MockVoiceEngine> voice_engine_; |
| 214 rtc::scoped_refptr<AudioState> audio_state_; | 216 rtc::scoped_refptr<AudioState> audio_state_; |
| 215 AudioSendStream::Config stream_config_; | 217 AudioSendStream::Config stream_config_; |
| 216 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr; | 218 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr; |
| 217 testing::NiceMock<MockCongestionObserver> bitrate_observer_; | 219 testing::NiceMock<MockCongestionObserver> bitrate_observer_; |
| 218 testing::NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_; | 220 testing::NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_; |
| 219 MockAudioProcessing audio_processing_; | 221 MockAudioProcessing audio_processing_; |
| 220 AudioProcessing::AudioProcessingStatistics audio_processing_stats_; | 222 AudioProcessing::AudioProcessingStatistics audio_processing_stats_; |
| 223 PacketRouter packet_router_; |
| 221 CongestionController congestion_controller_; | 224 CongestionController congestion_controller_; |
| 222 MockRtcEventLog event_log_; | 225 MockRtcEventLog event_log_; |
| 223 testing::NiceMock<MockLimitObserver> limit_observer_; | 226 testing::NiceMock<MockLimitObserver> limit_observer_; |
| 224 BitrateAllocator bitrate_allocator_; | 227 BitrateAllocator bitrate_allocator_; |
| 225 // |worker_queue| is defined last to ensure all pending tasks are cancelled | 228 // |worker_queue| is defined last to ensure all pending tasks are cancelled |
| 226 // and deleted before any other members. | 229 // and deleted before any other members. |
| 227 rtc::TaskQueue worker_queue_; | 230 rtc::TaskQueue worker_queue_; |
| 228 }; | 231 }; |
| 229 } // namespace | 232 } // namespace |
| 230 | 233 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 257 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: " | 260 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: " |
| 258 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: " | 261 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: " |
| 259 "320, channels: 1, rate: 32000}}}", | 262 "320, channels: 1, rate: 32000}}}", |
| 260 config.ToString()); | 263 config.ToString()); |
| 261 } | 264 } |
| 262 | 265 |
| 263 TEST(AudioSendStreamTest, ConstructDestruct) { | 266 TEST(AudioSendStreamTest, ConstructDestruct) { |
| 264 ConfigHelper helper; | 267 ConfigHelper helper; |
| 265 internal::AudioSendStream send_stream( | 268 internal::AudioSendStream send_stream( |
| 266 helper.config(), helper.audio_state(), helper.worker_queue(), | 269 helper.config(), helper.audio_state(), helper.worker_queue(), |
| 267 helper.congestion_controller(), helper.bitrate_allocator(), | 270 helper.packet_router(), helper.congestion_controller(), |
| 268 helper.event_log()); | 271 helper.bitrate_allocator(), helper.event_log()); |
| 269 } | 272 } |
| 270 | 273 |
| 271 TEST(AudioSendStreamTest, SendTelephoneEvent) { | 274 TEST(AudioSendStreamTest, SendTelephoneEvent) { |
| 272 ConfigHelper helper; | 275 ConfigHelper helper; |
| 273 internal::AudioSendStream send_stream( | 276 internal::AudioSendStream send_stream( |
| 274 helper.config(), helper.audio_state(), helper.worker_queue(), | 277 helper.config(), helper.audio_state(), helper.worker_queue(), |
| 275 helper.congestion_controller(), helper.bitrate_allocator(), | 278 helper.packet_router(), helper.congestion_controller(), |
| 276 helper.event_log()); | 279 helper.bitrate_allocator(), helper.event_log()); |
| 277 helper.SetupMockForSendTelephoneEvent(); | 280 helper.SetupMockForSendTelephoneEvent(); |
| 278 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType, | 281 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType, |
| 279 kTelephoneEventPayloadFrequency, kTelephoneEventCode, | 282 kTelephoneEventPayloadFrequency, kTelephoneEventCode, |
| 280 kTelephoneEventDuration)); | 283 kTelephoneEventDuration)); |
| 281 } | 284 } |
| 282 | 285 |
| 283 TEST(AudioSendStreamTest, SetMuted) { | 286 TEST(AudioSendStreamTest, SetMuted) { |
| 284 ConfigHelper helper; | 287 ConfigHelper helper; |
| 285 internal::AudioSendStream send_stream( | 288 internal::AudioSendStream send_stream( |
| 286 helper.config(), helper.audio_state(), helper.worker_queue(), | 289 helper.config(), helper.audio_state(), helper.worker_queue(), |
| 287 helper.congestion_controller(), helper.bitrate_allocator(), | 290 helper.packet_router(), helper.congestion_controller(), |
| 288 helper.event_log()); | 291 helper.bitrate_allocator(), helper.event_log()); |
| 289 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true)); | 292 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true)); |
| 290 send_stream.SetMuted(true); | 293 send_stream.SetMuted(true); |
| 291 } | 294 } |
| 292 | 295 |
| 293 TEST(AudioSendStreamTest, GetStats) { | 296 TEST(AudioSendStreamTest, GetStats) { |
| 294 ConfigHelper helper; | 297 ConfigHelper helper; |
| 295 internal::AudioSendStream send_stream( | 298 internal::AudioSendStream send_stream( |
| 296 helper.config(), helper.audio_state(), helper.worker_queue(), | 299 helper.config(), helper.audio_state(), helper.worker_queue(), |
| 297 helper.congestion_controller(), helper.bitrate_allocator(), | 300 helper.packet_router(), helper.congestion_controller(), |
| 298 helper.event_log()); | 301 helper.bitrate_allocator(), helper.event_log()); |
| 299 helper.SetupMockForGetStats(); | 302 helper.SetupMockForGetStats(); |
| 300 AudioSendStream::Stats stats = send_stream.GetStats(); | 303 AudioSendStream::Stats stats = send_stream.GetStats(); |
| 301 EXPECT_EQ(kSsrc, stats.local_ssrc); | 304 EXPECT_EQ(kSsrc, stats.local_ssrc); |
| 302 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); | 305 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); |
| 303 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); | 306 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); |
| 304 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), | 307 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), |
| 305 stats.packets_lost); | 308 stats.packets_lost); |
| 306 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); | 309 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); |
| 307 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); | 310 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); |
| 308 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), | 311 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), |
| 309 stats.ext_seqnum); | 312 stats.ext_seqnum); |
| 310 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / | 313 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / |
| 311 (kIsacCodec.plfreq / 1000)), | 314 (kIsacCodec.plfreq / 1000)), |
| 312 stats.jitter_ms); | 315 stats.jitter_ms); |
| 313 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); | 316 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); |
| 314 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); | 317 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); |
| 315 EXPECT_EQ(-1, stats.aec_quality_min); | 318 EXPECT_EQ(-1, stats.aec_quality_min); |
| 316 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); | 319 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); |
| 317 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); | 320 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); |
| 318 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); | 321 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); |
| 319 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); | 322 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); |
| 320 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); | 323 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); |
| 321 EXPECT_FALSE(stats.typing_noise_detected); | 324 EXPECT_FALSE(stats.typing_noise_detected); |
| 322 } | 325 } |
| 323 | 326 |
| 324 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { | 327 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { |
| 325 ConfigHelper helper; | 328 ConfigHelper helper; |
| 326 internal::AudioSendStream send_stream( | 329 internal::AudioSendStream send_stream( |
| 327 helper.config(), helper.audio_state(), helper.worker_queue(), | 330 helper.config(), helper.audio_state(), helper.worker_queue(), |
| 328 helper.congestion_controller(), helper.bitrate_allocator(), | 331 helper.packet_router(), helper.congestion_controller(), |
| 329 helper.event_log()); | 332 helper.bitrate_allocator(), helper.event_log()); |
| 330 helper.SetupMockForGetStats(); | 333 helper.SetupMockForGetStats(); |
| 331 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); | 334 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); |
| 332 | 335 |
| 333 internal::AudioState* internal_audio_state = | 336 internal::AudioState* internal_audio_state = |
| 334 static_cast<internal::AudioState*>(helper.audio_state().get()); | 337 static_cast<internal::AudioState*>(helper.audio_state().get()); |
| 335 VoiceEngineObserver* voe_observer = | 338 VoiceEngineObserver* voe_observer = |
| 336 static_cast<VoiceEngineObserver*>(internal_audio_state); | 339 static_cast<VoiceEngineObserver*>(internal_audio_state); |
| 337 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); | 340 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); |
| 338 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); | 341 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); |
| 339 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); | 342 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 372 .WillOnce(Return(0)); | 375 .WillOnce(Return(0)); |
| 373 EXPECT_CALL( | 376 EXPECT_CALL( |
| 374 *helper.channel_proxy(), | 377 *helper.channel_proxy(), |
| 375 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms, | 378 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms, |
| 376 stream_config.send_codec_spec.max_ptime_ms)); | 379 stream_config.send_codec_spec.max_ptime_ms)); |
| 377 EXPECT_CALL( | 380 EXPECT_CALL( |
| 378 *helper.channel_proxy(), | 381 *helper.channel_proxy(), |
| 379 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config)); | 382 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config)); |
| 380 internal::AudioSendStream send_stream( | 383 internal::AudioSendStream send_stream( |
| 381 stream_config, helper.audio_state(), helper.worker_queue(), | 384 stream_config, helper.audio_state(), helper.worker_queue(), |
| 382 helper.congestion_controller(), helper.bitrate_allocator(), | 385 helper.packet_router(), helper.congestion_controller(), |
| 383 helper.event_log()); | 386 helper.bitrate_allocator(), helper.event_log()); |
| 384 } | 387 } |
| 385 | 388 |
| 386 // VAD is applied when codec is mono and the CNG frequency matches the codec | 389 // VAD is applied when codec is mono and the CNG frequency matches the codec |
| 387 // sample rate. | 390 // sample rate. |
| 388 TEST(AudioSendStreamTest, SendCodecCanApplyVad) { | 391 TEST(AudioSendStreamTest, SendCodecCanApplyVad) { |
| 389 ConfigHelper helper; | 392 ConfigHelper helper; |
| 390 auto stream_config = helper.config(); | 393 auto stream_config = helper.config(); |
| 391 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000}; | 394 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000}; |
| 392 stream_config.send_codec_spec.codec_inst = kG722Codec; | 395 stream_config.send_codec_spec.codec_inst = kG722Codec; |
| 393 stream_config.send_codec_spec.cng_plfreq = 8000; | 396 stream_config.send_codec_spec.cng_plfreq = 8000; |
| 394 stream_config.send_codec_spec.cng_payload_type = 105; | 397 stream_config.send_codec_spec.cng_payload_type = 105; |
| 395 EXPECT_CALL(*helper.voice_engine(), SetVADStatus(kChannelId, true, _, _)) | 398 EXPECT_CALL(*helper.voice_engine(), SetVADStatus(kChannelId, true, _, _)) |
| 396 .WillOnce(Return(0)); | 399 .WillOnce(Return(0)); |
| 397 internal::AudioSendStream send_stream( | 400 internal::AudioSendStream send_stream( |
| 398 stream_config, helper.audio_state(), helper.worker_queue(), | 401 stream_config, helper.audio_state(), helper.worker_queue(), |
| 399 helper.congestion_controller(), helper.bitrate_allocator(), | 402 helper.packet_router(), helper.congestion_controller(), |
| 400 helper.event_log()); | 403 helper.bitrate_allocator(), helper.event_log()); |
| 401 } | 404 } |
| 402 | 405 |
| 403 } // namespace test | 406 } // namespace test |
| 404 } // namespace webrtc | 407 } // namespace webrtc |
| OLD | NEW |