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

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

Issue 2685673003: Define RtpTransportControllerSendInterface. (Closed)
Patch Set: Fix dependency problem. Add accessors transport_feedback_observer and packet_sender. Created 3 years, 9 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/rtp_rtcp/mocks/mock_rtcp_rtt_stats.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"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 class MockTransmitMixer : public voe::TransmitMixer { 67 class MockTransmitMixer : public voe::TransmitMixer {
67 public: 68 public:
68 MOCK_CONST_METHOD0(AudioLevelFullRange, int16_t()); 69 MOCK_CONST_METHOD0(AudioLevelFullRange, int16_t());
69 }; 70 };
70 71
71 struct ConfigHelper { 72 struct ConfigHelper {
73 class FakeRtpTransportController
74 : public RtpTransportControllerSendInterface {
75 public:
76 explicit FakeRtpTransportController(RtcEventLog* event_log)
77 : simulated_clock_(123456),
78 congestion_controller_(&simulated_clock_,
79 &bitrate_observer_,
80 nullptr,
81 event_log,
82 &packet_router_) {}
83 VieRemb* remb() override { return nullptr; }
84 PacketRouter* packet_router() override { return &packet_router_; }
85
86 CongestionController* congestion_controller() override {
87 return &congestion_controller_;
88 }
89 TransportFeedbackObserver* transport_feedback_observer() override {
90 return &congestion_controller_;
91 }
92
93 RtpPacketSender* packet_sender() override {
94 return congestion_controller_.pacer();
95 }
96
97 private:
98 SimulatedClock simulated_clock_;
99 testing::NiceMock<MockCongestionObserver> bitrate_observer_;
100 PacketRouter packet_router_;
101 CongestionController congestion_controller_;
102 };
103
72 explicit ConfigHelper(bool audio_bwe_enabled) 104 explicit ConfigHelper(bool audio_bwe_enabled)
73 : simulated_clock_(123456), 105 : stream_config_(nullptr),
74 stream_config_(nullptr), 106 fake_transport_(&event_log_),
75 congestion_controller_(&simulated_clock_,
76 &bitrate_observer_,
77 nullptr,
78 &event_log_,
79 &packet_router_),
80 bitrate_allocator_(&limit_observer_), 107 bitrate_allocator_(&limit_observer_),
81 worker_queue_("ConfigHelper_worker_queue") { 108 worker_queue_("ConfigHelper_worker_queue") {
82 using testing::Invoke; 109 using testing::Invoke;
83 110
84 EXPECT_CALL(voice_engine_, 111 EXPECT_CALL(voice_engine_,
85 RegisterVoiceEngineObserver(_)).WillOnce(Return(0)); 112 RegisterVoiceEngineObserver(_)).WillOnce(Return(0));
86 EXPECT_CALL(voice_engine_, 113 EXPECT_CALL(voice_engine_,
87 DeRegisterVoiceEngineObserver()).WillOnce(Return(0)); 114 DeRegisterVoiceEngineObserver()).WillOnce(Return(0));
88 EXPECT_CALL(voice_engine_, audio_device_module()); 115 EXPECT_CALL(voice_engine_, audio_device_module());
89 EXPECT_CALL(voice_engine_, audio_processing()); 116 EXPECT_CALL(voice_engine_, audio_processing());
(...skipping 28 matching lines...) Expand all
118 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_| 145 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_|
119 // calls from the default ctor behavior. 146 // calls from the default ctor behavior.
120 stream_config_.send_codec_spec.codec_inst = kIsacCodec; 147 stream_config_.send_codec_spec.codec_inst = kIsacCodec;
121 stream_config_.min_bitrate_bps = 10000; 148 stream_config_.min_bitrate_bps = 10000;
122 stream_config_.max_bitrate_bps = 65000; 149 stream_config_.max_bitrate_bps = 65000;
123 } 150 }
124 151
125 AudioSendStream::Config& config() { return stream_config_; } 152 AudioSendStream::Config& config() { return stream_config_; }
126 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } 153 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; }
127 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; } 154 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; }
128 PacketRouter* packet_router() { return &packet_router_; } 155 RtpTransportControllerSendInterface* transport() { return &fake_transport_; }
129 CongestionController* congestion_controller() {
130 return &congestion_controller_;
131 }
132 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; } 156 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; }
133 rtc::TaskQueue* worker_queue() { return &worker_queue_; } 157 rtc::TaskQueue* worker_queue() { return &worker_queue_; }
134 RtcEventLog* event_log() { return &event_log_; } 158 RtcEventLog* event_log() { return &event_log_; }
135 MockVoiceEngine* voice_engine() { return &voice_engine_; } 159 MockVoiceEngine* voice_engine() { return &voice_engine_; }
136 160
137 void SetupDefaultChannelProxy(bool audio_bwe_enabled) { 161 void SetupDefaultChannelProxy(bool audio_bwe_enabled) {
138 using testing::StrEq; 162 using testing::StrEq;
139 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>(); 163 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>();
140 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1); 164 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1);
141 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1); 165 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1);
142 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1); 166 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1);
143 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1); 167 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1);
144 EXPECT_CALL(*channel_proxy_, 168 EXPECT_CALL(*channel_proxy_,
145 SetSendAudioLevelIndicationStatus(true, kAudioLevelId)) 169 SetSendAudioLevelIndicationStatus(true, kAudioLevelId))
146 .Times(1); 170 .Times(1);
147
148 if (audio_bwe_enabled) { 171 if (audio_bwe_enabled) {
149 EXPECT_CALL(*channel_proxy_, 172 EXPECT_CALL(*channel_proxy_,
150 EnableSendTransportSequenceNumber(kTransportSequenceNumberId)) 173 EnableSendTransportSequenceNumber(kTransportSequenceNumberId))
151 .Times(1); 174 .Times(1);
152 EXPECT_CALL(*channel_proxy_, 175 EXPECT_CALL(*channel_proxy_, RegisterSenderCongestionControlObjects(
153 RegisterSenderCongestionControlObjects( 176 &fake_transport_, Ne(nullptr)))
154 congestion_controller_.pacer(), &congestion_controller_,
155 packet_router(), Ne(nullptr)))
156 .Times(1); 177 .Times(1);
157 } else { 178 } else {
158 EXPECT_CALL(*channel_proxy_, 179 EXPECT_CALL(*channel_proxy_, RegisterSenderCongestionControlObjects(
159 RegisterSenderCongestionControlObjects( 180 &fake_transport_, Eq(nullptr)))
160 congestion_controller_.pacer(), &congestion_controller_,
161 packet_router(), Eq(nullptr)))
162 .Times(1); 181 .Times(1);
163 } 182 }
164 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1); 183 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1);
165 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1); 184 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1);
166 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1); 185 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1);
167 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1); 186 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1);
168 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) 187 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull()))
169 .Times(1); // Destructor resets the event log 188 .Times(1); // Destructor resets the event log
170 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(&rtcp_rtt_stats_)).Times(1); 189 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(&rtcp_rtt_stats_)).Times(1);
171 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(testing::IsNull())) 190 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(testing::IsNull()))
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement, 251 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement,
233 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement); 252 kEchoReturnLossEnhancement, kEchoReturnLossEnhancement);
234 audio_processing_stats_.delay_median = kEchoDelayMedian; 253 audio_processing_stats_.delay_median = kEchoDelayMedian;
235 audio_processing_stats_.delay_standard_deviation = kEchoDelayStdDev; 254 audio_processing_stats_.delay_standard_deviation = kEchoDelayStdDev;
236 255
237 EXPECT_CALL(audio_processing_, GetStatistics()) 256 EXPECT_CALL(audio_processing_, GetStatistics())
238 .WillRepeatedly(Return(audio_processing_stats_)); 257 .WillRepeatedly(Return(audio_processing_stats_));
239 } 258 }
240 259
241 private: 260 private:
242 SimulatedClock simulated_clock_;
243 testing::StrictMock<MockVoiceEngine> voice_engine_; 261 testing::StrictMock<MockVoiceEngine> voice_engine_;
244 rtc::scoped_refptr<AudioState> audio_state_; 262 rtc::scoped_refptr<AudioState> audio_state_;
245 AudioSendStream::Config stream_config_; 263 AudioSendStream::Config stream_config_;
246 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr; 264 testing::StrictMock<MockVoEChannelProxy>* channel_proxy_ = nullptr;
247 testing::NiceMock<MockCongestionObserver> bitrate_observer_; 265 testing::NiceMock<MockCongestionObserver> bitrate_observer_;
248 MockAudioProcessing audio_processing_; 266 MockAudioProcessing audio_processing_;
249 MockTransmitMixer transmit_mixer_; 267 MockTransmitMixer transmit_mixer_;
250 AudioProcessing::AudioProcessingStatistics audio_processing_stats_; 268 AudioProcessing::AudioProcessingStatistics audio_processing_stats_;
251 PacketRouter packet_router_; 269 FakeRtpTransportController fake_transport_;
252 CongestionController congestion_controller_;
253 MockRtcEventLog event_log_; 270 MockRtcEventLog event_log_;
254 MockRtcpRttStats rtcp_rtt_stats_; 271 MockRtcpRttStats rtcp_rtt_stats_;
255 testing::NiceMock<MockLimitObserver> limit_observer_; 272 testing::NiceMock<MockLimitObserver> limit_observer_;
256 BitrateAllocator bitrate_allocator_; 273 BitrateAllocator bitrate_allocator_;
257 // |worker_queue| is defined last to ensure all pending tasks are cancelled 274 // |worker_queue| is defined last to ensure all pending tasks are cancelled
258 // and deleted before any other members. 275 // and deleted before any other members.
259 rtc::TaskQueue worker_queue_; 276 rtc::TaskQueue worker_queue_;
260 }; 277 };
261 } // namespace 278 } // namespace
262 279
(...skipping 26 matching lines...) Expand all
289 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: " 306 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: "
290 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: " 307 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: "
291 "320, channels: 1, rate: 32000}}}", 308 "320, channels: 1, rate: 32000}}}",
292 config.ToString()); 309 config.ToString());
293 } 310 }
294 311
295 TEST(AudioSendStreamTest, ConstructDestruct) { 312 TEST(AudioSendStreamTest, ConstructDestruct) {
296 ConfigHelper helper(false); 313 ConfigHelper helper(false);
297 internal::AudioSendStream send_stream( 314 internal::AudioSendStream send_stream(
298 helper.config(), helper.audio_state(), helper.worker_queue(), 315 helper.config(), helper.audio_state(), helper.worker_queue(),
299 helper.packet_router(), helper.congestion_controller(), 316 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
300 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 317 helper.rtcp_rtt_stats());
301 } 318 }
302 319
303 TEST(AudioSendStreamTest, SendTelephoneEvent) { 320 TEST(AudioSendStreamTest, SendTelephoneEvent) {
304 ConfigHelper helper(false); 321 ConfigHelper helper(false);
305 internal::AudioSendStream send_stream( 322 internal::AudioSendStream send_stream(
306 helper.config(), helper.audio_state(), helper.worker_queue(), 323 helper.config(), helper.audio_state(), helper.worker_queue(),
307 helper.packet_router(), helper.congestion_controller(), 324 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
308 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 325 helper.rtcp_rtt_stats());
309 helper.SetupMockForSendTelephoneEvent(); 326 helper.SetupMockForSendTelephoneEvent();
310 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType, 327 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType,
311 kTelephoneEventPayloadFrequency, kTelephoneEventCode, 328 kTelephoneEventPayloadFrequency, kTelephoneEventCode,
312 kTelephoneEventDuration)); 329 kTelephoneEventDuration));
313 } 330 }
314 331
315 TEST(AudioSendStreamTest, SetMuted) { 332 TEST(AudioSendStreamTest, SetMuted) {
316 ConfigHelper helper(false); 333 ConfigHelper helper(false);
317 internal::AudioSendStream send_stream( 334 internal::AudioSendStream send_stream(
318 helper.config(), helper.audio_state(), helper.worker_queue(), 335 helper.config(), helper.audio_state(), helper.worker_queue(),
319 helper.packet_router(), helper.congestion_controller(), 336 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
320 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 337 helper.rtcp_rtt_stats());
321 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true)); 338 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true));
322 send_stream.SetMuted(true); 339 send_stream.SetMuted(true);
323 } 340 }
324 341
325 TEST(AudioSendStreamTest, AudioBweCorrectObjectsOnChannelProxy) { 342 TEST(AudioSendStreamTest, AudioBweCorrectObjectsOnChannelProxy) {
326 ConfigHelper helper(true); 343 ConfigHelper helper(true);
327 internal::AudioSendStream send_stream( 344 internal::AudioSendStream send_stream(
328 helper.config(), helper.audio_state(), helper.worker_queue(), 345 helper.config(), helper.audio_state(), helper.worker_queue(),
329 helper.packet_router(), helper.congestion_controller(), 346 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
330 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 347 helper.rtcp_rtt_stats());
331 } 348 }
332 349
333 TEST(AudioSendStreamTest, NoAudioBweCorrectObjectsOnChannelProxy) { 350 TEST(AudioSendStreamTest, NoAudioBweCorrectObjectsOnChannelProxy) {
334 ConfigHelper helper(false); 351 ConfigHelper helper(false);
335 internal::AudioSendStream send_stream( 352 internal::AudioSendStream send_stream(
336 helper.config(), helper.audio_state(), helper.worker_queue(), 353 helper.config(), helper.audio_state(), helper.worker_queue(),
337 helper.packet_router(), helper.congestion_controller(), 354 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
338 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 355 helper.rtcp_rtt_stats());
339 } 356 }
340 357
341 TEST(AudioSendStreamTest, GetStats) { 358 TEST(AudioSendStreamTest, GetStats) {
342 ConfigHelper helper(false); 359 ConfigHelper helper(false);
343 internal::AudioSendStream send_stream( 360 internal::AudioSendStream send_stream(
344 helper.config(), helper.audio_state(), helper.worker_queue(), 361 helper.config(), helper.audio_state(), helper.worker_queue(),
345 helper.packet_router(), helper.congestion_controller(), 362 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
346 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 363 helper.rtcp_rtt_stats());
347 helper.SetupMockForGetStats(); 364 helper.SetupMockForGetStats();
348 AudioSendStream::Stats stats = send_stream.GetStats(); 365 AudioSendStream::Stats stats = send_stream.GetStats();
349 EXPECT_EQ(kSsrc, stats.local_ssrc); 366 EXPECT_EQ(kSsrc, stats.local_ssrc);
350 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); 367 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent);
351 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); 368 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent);
352 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), 369 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost),
353 stats.packets_lost); 370 stats.packets_lost);
354 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); 371 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost);
355 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); 372 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name);
356 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), 373 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number),
357 stats.ext_seqnum); 374 stats.ext_seqnum);
358 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / 375 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter /
359 (kIsacCodec.plfreq / 1000)), 376 (kIsacCodec.plfreq / 1000)),
360 stats.jitter_ms); 377 stats.jitter_ms);
361 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); 378 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms);
362 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); 379 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level);
363 EXPECT_EQ(-1, stats.aec_quality_min); 380 EXPECT_EQ(-1, stats.aec_quality_min);
364 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); 381 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms);
365 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); 382 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms);
366 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); 383 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss);
367 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); 384 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement);
368 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); 385 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood);
369 EXPECT_FALSE(stats.typing_noise_detected); 386 EXPECT_FALSE(stats.typing_noise_detected);
370 } 387 }
371 388
372 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { 389 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) {
373 ConfigHelper helper(false); 390 ConfigHelper helper(false);
374 internal::AudioSendStream send_stream( 391 internal::AudioSendStream send_stream(
375 helper.config(), helper.audio_state(), helper.worker_queue(), 392 helper.config(), helper.audio_state(), helper.worker_queue(),
376 helper.packet_router(), helper.congestion_controller(), 393 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
377 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 394 helper.rtcp_rtt_stats());
378 helper.SetupMockForGetStats(); 395 helper.SetupMockForGetStats();
379 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); 396 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected);
380 397
381 internal::AudioState* internal_audio_state = 398 internal::AudioState* internal_audio_state =
382 static_cast<internal::AudioState*>(helper.audio_state().get()); 399 static_cast<internal::AudioState*>(helper.audio_state().get());
383 VoiceEngineObserver* voe_observer = 400 VoiceEngineObserver* voe_observer =
384 static_cast<VoiceEngineObserver*>(internal_audio_state); 401 static_cast<VoiceEngineObserver*>(internal_audio_state);
385 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); 402 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING);
386 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); 403 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected);
387 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); 404 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 .WillOnce(Return(true)); 437 .WillOnce(Return(true));
421 EXPECT_CALL( 438 EXPECT_CALL(
422 *helper.channel_proxy(), 439 *helper.channel_proxy(),
423 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms, 440 SetReceiverFrameLengthRange(stream_config.send_codec_spec.min_ptime_ms,
424 stream_config.send_codec_spec.max_ptime_ms)); 441 stream_config.send_codec_spec.max_ptime_ms));
425 EXPECT_CALL( 442 EXPECT_CALL(
426 *helper.channel_proxy(), 443 *helper.channel_proxy(),
427 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config)); 444 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config));
428 internal::AudioSendStream send_stream( 445 internal::AudioSendStream send_stream(
429 stream_config, helper.audio_state(), helper.worker_queue(), 446 stream_config, helper.audio_state(), helper.worker_queue(),
430 helper.packet_router(), helper.congestion_controller(), 447 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
431 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 448 helper.rtcp_rtt_stats());
432 } 449 }
433 450
434 // VAD is applied when codec is mono and the CNG frequency matches the codec 451 // VAD is applied when codec is mono and the CNG frequency matches the codec
435 // sample rate. 452 // sample rate.
436 TEST(AudioSendStreamTest, SendCodecCanApplyVad) { 453 TEST(AudioSendStreamTest, SendCodecCanApplyVad) {
437 ConfigHelper helper(false); 454 ConfigHelper helper(false);
438 auto stream_config = helper.config(); 455 auto stream_config = helper.config();
439 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000}; 456 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000};
440 stream_config.send_codec_spec.codec_inst = kG722Codec; 457 stream_config.send_codec_spec.codec_inst = kG722Codec;
441 stream_config.send_codec_spec.cng_plfreq = 8000; 458 stream_config.send_codec_spec.cng_plfreq = 8000;
442 stream_config.send_codec_spec.cng_payload_type = 105; 459 stream_config.send_codec_spec.cng_payload_type = 105;
443 EXPECT_CALL(*helper.channel_proxy(), SetVADStatus(true)) 460 EXPECT_CALL(*helper.channel_proxy(), SetVADStatus(true))
444 .WillOnce(Return(true)); 461 .WillOnce(Return(true));
445 internal::AudioSendStream send_stream( 462 internal::AudioSendStream send_stream(
446 stream_config, helper.audio_state(), helper.worker_queue(), 463 stream_config, helper.audio_state(), helper.worker_queue(),
447 helper.packet_router(), helper.congestion_controller(), 464 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
448 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 465 helper.rtcp_rtt_stats());
449 } 466 }
450 467
451 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) { 468 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) {
452 ConfigHelper helper(false); 469 ConfigHelper helper(false);
453 internal::AudioSendStream send_stream( 470 internal::AudioSendStream send_stream(
454 helper.config(), helper.audio_state(), helper.worker_queue(), 471 helper.config(), helper.audio_state(), helper.worker_queue(),
455 helper.packet_router(), helper.congestion_controller(), 472 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
456 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 473 helper.rtcp_rtt_stats());
457 EXPECT_CALL(*helper.channel_proxy(), 474 EXPECT_CALL(*helper.channel_proxy(),
458 SetBitrate(helper.config().max_bitrate_bps, _)); 475 SetBitrate(helper.config().max_bitrate_bps, _));
459 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50, 476 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50,
460 6000); 477 6000);
461 } 478 }
462 479
463 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) { 480 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) {
464 ConfigHelper helper(false); 481 ConfigHelper helper(false);
465 internal::AudioSendStream send_stream( 482 internal::AudioSendStream send_stream(
466 helper.config(), helper.audio_state(), helper.worker_queue(), 483 helper.config(), helper.audio_state(), helper.worker_queue(),
467 helper.packet_router(), helper.congestion_controller(), 484 helper.transport(), helper.bitrate_allocator(), helper.event_log(),
468 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 485 helper.rtcp_rtt_stats());
469 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000)); 486 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000));
470 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000); 487 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000);
471 } 488 }
472 489
473 } // namespace test 490 } // namespace test
474 } // namespace webrtc 491 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698