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

Side by Side Diff: webrtc/audio/audio_send_stream_unittest.cc

Issue 2685673003: Define RtpTransportControllerSendInterface. (Closed)
Patch Set: Fix rebasing error. Created 3 years, 10 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
OLDNEW
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/call/rtp_transport_controller.h"
18 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h" 19 #include "webrtc/logging/rtc_event_log/mock/mock_rtc_event_log.h"
19 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h" 20 #include "webrtc/modules/audio_mixer/audio_mixer_impl.h"
20 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h" 21 #include "webrtc/modules/audio_processing/include/mock_audio_processing.h"
21 #include "webrtc/modules/congestion_controller/include/congestion_controller.h" 22 #include "webrtc/modules/congestion_controller/include/congestion_controller.h"
22 #include "webrtc/modules/congestion_controller/include/mock/mock_congestion_cont roller.h" 23 #include "webrtc/modules/congestion_controller/include/mock/mock_congestion_cont roller.h"
23 #include "webrtc/modules/pacing/paced_sender.h" 24 #include "webrtc/modules/pacing/paced_sender.h"
24 #include "webrtc/modules/remote_bitrate_estimator/include/mock/mock_remote_bitra te_estimator.h" 25 #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" 26 #include "webrtc/modules/rtp_rtcp/mocks/mock_rtcp_rtt_stats.h"
26 #include "webrtc/test/gtest.h" 27 #include "webrtc/test/gtest.h"
27 #include "webrtc/test/mock_voe_channel_proxy.h" 28 #include "webrtc/test/mock_voe_channel_proxy.h"
(...skipping 29 matching lines...) Expand all
57 const CodecInst kIsacCodec = {103, "isac", 16000, 320, 1, 32000}; 58 const CodecInst kIsacCodec = {103, "isac", 16000, 320, 1, 32000};
58 59
59 class MockLimitObserver : public BitrateAllocator::LimitObserver { 60 class MockLimitObserver : public BitrateAllocator::LimitObserver {
60 public: 61 public:
61 MOCK_METHOD2(OnAllocationLimitsChanged, 62 MOCK_METHOD2(OnAllocationLimitsChanged,
62 void(uint32_t min_send_bitrate_bps, 63 void(uint32_t min_send_bitrate_bps,
63 uint32_t max_padding_bitrate_bps)); 64 uint32_t max_padding_bitrate_bps));
64 }; 65 };
65 66
66 struct ConfigHelper { 67 struct ConfigHelper {
68 class FakeRtpTransportController
69 : public RtpTransportControllerSendInterface {
70 public:
71 explicit FakeRtpTransportController(RtcEventLog* event_log)
72 : simulated_clock_(123456),
73 congestion_controller_(&simulated_clock_,
74 &bitrate_observer_,
75 &remote_bitrate_observer_,
76 event_log,
77 &packet_router_) {}
78 CongestionController* congestion_controller() override {
79 return &congestion_controller_;
80 }
81 VieRemb* remb() override { return nullptr; }
82 PacketRouter* packet_router() override { return &packet_router_; }
83
84 private:
85 SimulatedClock simulated_clock_;
86 testing::NiceMock<MockCongestionObserver> bitrate_observer_;
87 testing::NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_;
88 PacketRouter packet_router_;
89 CongestionController congestion_controller_;
90 };
91
67 explicit ConfigHelper(bool audio_bwe_enabled) 92 explicit ConfigHelper(bool audio_bwe_enabled)
68 : simulated_clock_(123456), 93 : stream_config_(nullptr),
69 stream_config_(nullptr), 94 fake_transport_(&event_log_),
70 congestion_controller_(&simulated_clock_,
71 &bitrate_observer_,
72 &remote_bitrate_observer_,
73 &event_log_,
74 &packet_router_),
75 bitrate_allocator_(&limit_observer_), 95 bitrate_allocator_(&limit_observer_),
76 worker_queue_("ConfigHelper_worker_queue") { 96 worker_queue_("ConfigHelper_worker_queue") {
77 using testing::Invoke; 97 using testing::Invoke;
78 98
79 EXPECT_CALL(voice_engine_, 99 EXPECT_CALL(voice_engine_,
80 RegisterVoiceEngineObserver(_)).WillOnce(Return(0)); 100 RegisterVoiceEngineObserver(_)).WillOnce(Return(0));
81 EXPECT_CALL(voice_engine_, 101 EXPECT_CALL(voice_engine_,
82 DeRegisterVoiceEngineObserver()).WillOnce(Return(0)); 102 DeRegisterVoiceEngineObserver()).WillOnce(Return(0));
83 EXPECT_CALL(voice_engine_, audio_device_module()); 103 EXPECT_CALL(voice_engine_, audio_device_module());
84 EXPECT_CALL(voice_engine_, audio_processing()); 104 EXPECT_CALL(voice_engine_, audio_processing());
(...skipping 28 matching lines...) Expand all
113 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_| 133 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_|
114 // calls from the default ctor behavior. 134 // calls from the default ctor behavior.
115 stream_config_.send_codec_spec.codec_inst = kIsacCodec; 135 stream_config_.send_codec_spec.codec_inst = kIsacCodec;
116 stream_config_.min_bitrate_bps = 10000; 136 stream_config_.min_bitrate_bps = 10000;
117 stream_config_.max_bitrate_bps = 65000; 137 stream_config_.max_bitrate_bps = 65000;
118 } 138 }
119 139
120 AudioSendStream::Config& config() { return stream_config_; } 140 AudioSendStream::Config& config() { return stream_config_; }
121 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } 141 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; }
122 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; } 142 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; }
123 PacketRouter* packet_router() { return &packet_router_; } 143 RtpTransportControllerSendInterface* transport() { return &fake_transport_; }
124 CongestionController* congestion_controller() {
125 return &congestion_controller_;
126 }
127 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; } 144 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; }
128 rtc::TaskQueue* worker_queue() { return &worker_queue_; } 145 rtc::TaskQueue* worker_queue() { return &worker_queue_; }
129 RtcEventLog* event_log() { return &event_log_; } 146 RtcEventLog* event_log() { return &event_log_; }
130 MockVoiceEngine* voice_engine() { return &voice_engine_; } 147 MockVoiceEngine* voice_engine() { return &voice_engine_; }
131 148
132 void SetupDefaultChannelProxy(bool audio_bwe_enabled) { 149 void SetupDefaultChannelProxy(bool audio_bwe_enabled) {
133 using testing::StrEq; 150 using testing::StrEq;
134 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>(); 151 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>();
135 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1); 152 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1);
136 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1); 153 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1);
137 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1); 154 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1);
138 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1); 155 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1);
139 EXPECT_CALL(*channel_proxy_, 156 EXPECT_CALL(*channel_proxy_,
140 SetSendAudioLevelIndicationStatus(true, kAudioLevelId)) 157 SetSendAudioLevelIndicationStatus(true, kAudioLevelId))
141 .Times(1); 158 .Times(1);
142
143 if (audio_bwe_enabled) { 159 if (audio_bwe_enabled) {
144 EXPECT_CALL(*channel_proxy_, 160 EXPECT_CALL(*channel_proxy_,
145 EnableSendTransportSequenceNumber(kTransportSequenceNumberId)) 161 EnableSendTransportSequenceNumber(kTransportSequenceNumberId))
146 .Times(1); 162 .Times(1);
147 EXPECT_CALL(*channel_proxy_, 163 EXPECT_CALL(*channel_proxy_, RegisterSenderCongestionControlObjects(
148 RegisterSenderCongestionControlObjects( 164 &fake_transport_, Ne(nullptr)))
149 congestion_controller_.pacer(),
150 congestion_controller_.GetTransportFeedbackObserver(),
151 packet_router(), Ne(nullptr)))
152 .Times(1); 165 .Times(1);
153 } else { 166 } else {
154 EXPECT_CALL(*channel_proxy_, 167 EXPECT_CALL(*channel_proxy_, RegisterSenderCongestionControlObjects(
155 RegisterSenderCongestionControlObjects( 168 &fake_transport_, Eq(nullptr)))
156 congestion_controller_.pacer(),
157 congestion_controller_.GetTransportFeedbackObserver(),
158 packet_router(), Eq(nullptr)))
159 .Times(1); 169 .Times(1);
160 } 170 }
161 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1); 171 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1);
162 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1); 172 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1);
163 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1); 173 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1);
164 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1); 174 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1);
165 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) 175 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull()))
166 .Times(1); // Destructor resets the event log 176 .Times(1); // Destructor resets the event log
167 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(&rtcp_rtt_stats_)).Times(1); 177 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(&rtcp_rtt_stats_)).Times(1);
168 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(testing::IsNull())) 178 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(testing::IsNull()))
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement, 236 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement,
227 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement); 237 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement);
228 audio_processing_stats_.delay_median = kEchoDelayMedian; 238 audio_processing_stats_.delay_median = kEchoDelayMedian;
229 audio_processing_stats_.delay_standard_deviation = kEchoDelayStdDev; 239 audio_processing_stats_.delay_standard_deviation = kEchoDelayStdDev;
230 240
231 EXPECT_CALL(audio_processing_, GetStatistics()) 241 EXPECT_CALL(audio_processing_, GetStatistics())
232 .WillRepeatedly(Return(audio_processing_stats_)); 242 .WillRepeatedly(Return(audio_processing_stats_));
233 } 243 }
234 244
235 private: 245 private:
236 SimulatedClock simulated_clock_;
237 testing::StrictMock<MockVoiceEngine> voice_engine_; 246 testing::StrictMock<MockVoiceEngine> voice_engine_;
238 rtc::scoped_refptr<AudioState> audio_state_; 247 rtc::scoped_refptr<AudioState> audio_state_;
239 AudioSendStream::Config stream_config_; 248 AudioSendStream::Config stream_config_;
240 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr; 249 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr;
241 testing::NiceMock<MockCongestionObserver> bitrate_observer_;
242 testing::NiceMock<MockRemoteBitrateObserver> remote_bitrate_observer_;
243 MockAudioProcessing audio_processing_; 250 MockAudioProcessing audio_processing_;
244 AudioProcessing::AudioProcessingStatistics audio_processing_stats_; 251 AudioProcessing::AudioProcessingStatistics audio_processing_stats_;
245 PacketRouter packet_router_; 252 FakeRtpTransportController fake_transport_;
246 CongestionController congestion_controller_;
247 MockRtcEventLog event_log_; 253 MockRtcEventLog event_log_;
248 MockRtcpRttStats rtcp_rtt_stats_; 254 MockRtcpRttStats rtcp_rtt_stats_;
249 testing::NiceMock<MockLimitObserver> limit_observer_; 255 testing::NiceMock<MockLimitObserver> limit_observer_;
250 BitrateAllocator bitrate_allocator_; 256 BitrateAllocator bitrate_allocator_;
251 // |worker_queue| is defined last to ensure all pending tasks are cancelled 257 // |worker_queue| is defined last to ensure all pending tasks are cancelled
252 // and deleted before any other members. 258 // and deleted before any other members.
253 rtc::TaskQueue worker_queue_; 259 rtc::TaskQueue worker_queue_;
254 }; 260 };
255 } // namespace 261 } // namespace
256 262
(...skipping 26 matching lines...) Expand all
283 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: " 289 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: "
284 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: " 290 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: "
285 "320, channels: 1, rate: 32000}}}", 291 "320, channels: 1, rate: 32000}}}",
286 config.ToString()); 292 config.ToString());
287 } 293 }
288 294
289 TEST(AudioSendStreamTest, ConstructDestruct) { 295 TEST(AudioSendStreamTest, ConstructDestruct) {
290 ConfigHelper helper(false); 296 ConfigHelper helper(false);
291 internal::AudioSendStream send_stream( 297 internal::AudioSendStream send_stream(
292 helper.config(), helper.audio_state(), helper.worker_queue(), 298 helper.config(), helper.audio_state(), helper.worker_queue(),
293 helper.packet_router(), helper.congestion_controller(), 299 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
294 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 300 helper.rtcp_rtt_stats());
295 } 301 }
296 302
297 TEST(AudioSendStreamTest, SendTelephoneEvent) { 303 TEST(AudioSendStreamTest, SendTelephoneEvent) {
298 ConfigHelper helper(false); 304 ConfigHelper helper(false);
299 internal::AudioSendStream send_stream( 305 internal::AudioSendStream send_stream(
300 helper.config(), helper.audio_state(), helper.worker_queue(), 306 helper.config(), helper.audio_state(), helper.worker_queue(),
301 helper.packet_router(), helper.congestion_controller(), 307 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
302 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 308 helper.rtcp_rtt_stats());
303 helper.SetupMockForSendTelephoneEvent(); 309 helper.SetupMockForSendTelephoneEvent();
304 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType, 310 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType,
305 kTelephoneEventPayloadFrequency, kTelephoneEventCode, 311 kTelephoneEventPayloadFrequency, kTelephoneEventCode,
306 kTelephoneEventDuration)); 312 kTelephoneEventDuration));
307 } 313 }
308 314
309 TEST(AudioSendStreamTest, SetMuted) { 315 TEST(AudioSendStreamTest, SetMuted) {
310 ConfigHelper helper(false); 316 ConfigHelper helper(false);
311 internal::AudioSendStream send_stream( 317 internal::AudioSendStream send_stream(
312 helper.config(), helper.audio_state(), helper.worker_queue(), 318 helper.config(), helper.audio_state(), helper.worker_queue(),
313 helper.packet_router(), helper.congestion_controller(), 319 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
314 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 320 helper.rtcp_rtt_stats());
315 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true)); 321 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true));
316 send_stream.SetMuted(true); 322 send_stream.SetMuted(true);
317 } 323 }
318 324
319 TEST(AudioSendStreamTest, AudioBweCorrectObjectsOnChannelProxy) { 325 TEST(AudioSendStreamTest, AudioBweCorrectObjectsOnChannelProxy) {
320 ConfigHelper helper(true); 326 ConfigHelper helper(true);
321 internal::AudioSendStream send_stream( 327 internal::AudioSendStream send_stream(
322 helper.config(), helper.audio_state(), helper.worker_queue(), 328 helper.config(), helper.audio_state(), helper.worker_queue(),
323 helper.packet_router(), helper.congestion_controller(), 329 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
324 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 330 helper.rtcp_rtt_stats());
325 } 331 }
326 332
327 TEST(AudioSendStreamTest, NoAudioBweCorrectObjectsOnChannelProxy) { 333 TEST(AudioSendStreamTest, NoAudioBweCorrectObjectsOnChannelProxy) {
328 ConfigHelper helper(false); 334 ConfigHelper helper(false);
329 internal::AudioSendStream send_stream( 335 internal::AudioSendStream send_stream(
330 helper.config(), helper.audio_state(), helper.worker_queue(), 336 helper.config(), helper.audio_state(), helper.worker_queue(),
331 helper.packet_router(), helper.congestion_controller(), 337 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
332 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 338 helper.rtcp_rtt_stats());
333 } 339 }
334 340
335 TEST(AudioSendStreamTest, GetStats) { 341 TEST(AudioSendStreamTest, GetStats) {
336 ConfigHelper helper(false); 342 ConfigHelper helper(false);
337 internal::AudioSendStream send_stream( 343 internal::AudioSendStream send_stream(
338 helper.config(), helper.audio_state(), helper.worker_queue(), 344 helper.config(), helper.audio_state(), helper.worker_queue(),
339 helper.packet_router(), helper.congestion_controller(), 345 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
340 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 346 helper.rtcp_rtt_stats());
341 helper.SetupMockForGetStats(); 347 helper.SetupMockForGetStats();
342 AudioSendStream::Stats stats = send_stream.GetStats(); 348 AudioSendStream::Stats stats = send_stream.GetStats();
343 EXPECT_EQ(kSsrc, stats.local_ssrc); 349 EXPECT_EQ(kSsrc, stats.local_ssrc);
344 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); 350 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent);
345 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); 351 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent);
346 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), 352 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost),
347 stats.packets_lost); 353 stats.packets_lost);
348 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); 354 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost);
349 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); 355 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name);
350 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), 356 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number),
351 stats.ext_seqnum); 357 stats.ext_seqnum);
352 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / 358 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter /
353 (kIsacCodec.plfreq / 1000)), 359 (kIsacCodec.plfreq / 1000)),
354 stats.jitter_ms); 360 stats.jitter_ms);
355 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); 361 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms);
356 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); 362 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level);
357 EXPECT_EQ(-1, stats.aec_quality_min); 363 EXPECT_EQ(-1, stats.aec_quality_min);
358 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); 364 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms);
359 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); 365 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms);
360 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); 366 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss);
361 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); 367 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement);
362 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); 368 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood);
363 EXPECT_FALSE(stats.typing_noise_detected); 369 EXPECT_FALSE(stats.typing_noise_detected);
364 } 370 }
365 371
366 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { 372 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) {
367 ConfigHelper helper(false); 373 ConfigHelper helper(false);
368 internal::AudioSendStream send_stream( 374 internal::AudioSendStream send_stream(
369 helper.config(), helper.audio_state(), helper.worker_queue(), 375 helper.config(), helper.audio_state(), helper.worker_queue(),
370 helper.packet_router(), helper.congestion_controller(), 376 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
371 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 377 helper.rtcp_rtt_stats());
372 helper.SetupMockForGetStats(); 378 helper.SetupMockForGetStats();
373 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); 379 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected);
374 380
375 internal::AudioState* internal_audio_state = 381 internal::AudioState* internal_audio_state =
376 static_cast<internal::AudioState*>(helper.audio_state().get()); 382 static_cast<internal::AudioState*>(helper.audio_state().get());
377 VoiceEngineObserver* voe_observer = 383 VoiceEngineObserver* voe_observer =
378 static_cast<VoiceEngineObserver*>(internal_audio_state); 384 static_cast<VoiceEngineObserver*>(internal_audio_state);
379 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); 385 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING);
380 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); 386 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected);
381 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); 387 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 .WillOnce(Return(true)); 420 .WillOnce(Return(true));
415 EXPECT_CALL( 421 EXPECT_CALL(
416 *helper.channel_proxy(), 422 *helper.channel_proxy(),
417 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms, 423 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms,
418 stream_config.send_codec_spec.max_ptime_ms)); 424 stream_config.send_codec_spec.max_ptime_ms));
419 EXPECT_CALL( 425 EXPECT_CALL(
420 *helper.channel_proxy(), 426 *helper.channel_proxy(),
421 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config)); 427 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config));
422 internal::AudioSendStream send_stream( 428 internal::AudioSendStream send_stream(
423 stream_config, helper.audio_state(), helper.worker_queue(), 429 stream_config, helper.audio_state(), helper.worker_queue(),
424 helper.packet_router(), helper.congestion_controller(), 430 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
425 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 431 helper.rtcp_rtt_stats());
426 } 432 }
427 433
428 // VAD is applied when codec is mono and the CNG frequency matches the codec 434 // VAD is applied when codec is mono and the CNG frequency matches the codec
429 // sample rate. 435 // sample rate.
430 TEST(AudioSendStreamTest, SendCodecCanApplyVad) { 436 TEST(AudioSendStreamTest, SendCodecCanApplyVad) {
431 ConfigHelper helper(false); 437 ConfigHelper helper(false);
432 auto stream_config = helper.config(); 438 auto stream_config = helper.config();
433 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000}; 439 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000};
434 stream_config.send_codec_spec.codec_inst = kG722Codec; 440 stream_config.send_codec_spec.codec_inst = kG722Codec;
435 stream_config.send_codec_spec.cng_plfreq = 8000; 441 stream_config.send_codec_spec.cng_plfreq = 8000;
436 stream_config.send_codec_spec.cng_payload_type = 105; 442 stream_config.send_codec_spec.cng_payload_type = 105;
437 EXPECT_CALL(*helper.channel_proxy(), SetVADStatus(true)) 443 EXPECT_CALL(*helper.channel_proxy(), SetVADStatus(true))
438 .WillOnce(Return(true)); 444 .WillOnce(Return(true));
439 internal::AudioSendStream send_stream( 445 internal::AudioSendStream send_stream(
440 stream_config, helper.audio_state(), helper.worker_queue(), 446 stream_config, helper.audio_state(), helper.worker_queue(),
441 helper.packet_router(), helper.congestion_controller(), 447 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
442 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 448 helper.rtcp_rtt_stats());
443 } 449 }
444 450
445 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) { 451 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) {
446 ConfigHelper helper(false); 452 ConfigHelper helper(false);
447 internal::AudioSendStream send_stream( 453 internal::AudioSendStream send_stream(
448 helper.config(), helper.audio_state(), helper.worker_queue(), 454 helper.config(), helper.audio_state(), helper.worker_queue(),
449 helper.packet_router(), helper.congestion_controller(), 455 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
450 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 456 helper.rtcp_rtt_stats());
451 EXPECT_CALL(*helper.channel_proxy(), 457 EXPECT_CALL(*helper.channel_proxy(),
452 SetBitrate(helper.config().max_bitrate_bps, _)); 458 SetBitrate(helper.config().max_bitrate_bps, _));
453 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50, 459 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50,
454 6000); 460 6000);
455 } 461 }
456 462
457 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) { 463 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) {
458 ConfigHelper helper(false); 464 ConfigHelper helper(false);
459 internal::AudioSendStream send_stream( 465 internal::AudioSendStream send_stream(
460 helper.config(), helper.audio_state(), helper.worker_queue(), 466 helper.config(), helper.audio_state(), helper.worker_queue(),
461 helper.packet_router(), helper.congestion_controller(), 467 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
462 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 468 helper.rtcp_rtt_stats());
463 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000)); 469 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000));
464 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000); 470 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000);
465 } 471 }
466 472
467 } // namespace test 473 } // namespace test
468 } // namespace webrtc 474 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/audio/audio_send_stream.cc ('k') | webrtc/call/BUILD.gn » ('j') | webrtc/call/call.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698