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

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

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

Powered by Google App Engine
This is Rietveld 408576698