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

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

Issue 2658233002: Wire up audio packet loss to BWE. (Closed)
Patch Set: Only register BandwidthObserver when needed BWE is negotiated. 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
« no previous file with comments | « webrtc/audio/audio_send_stream.cc ('k') | webrtc/test/mock_voe_channel_proxy.h » ('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
(...skipping 14 matching lines...) Expand all
25 #include "webrtc/modules/rtp_rtcp/mocks/mock_rtcp_rtt_stats.h" 25 #include "webrtc/modules/rtp_rtcp/mocks/mock_rtcp_rtt_stats.h"
26 #include "webrtc/test/gtest.h" 26 #include "webrtc/test/gtest.h"
27 #include "webrtc/test/mock_voe_channel_proxy.h" 27 #include "webrtc/test/mock_voe_channel_proxy.h"
28 #include "webrtc/test/mock_voice_engine.h" 28 #include "webrtc/test/mock_voice_engine.h"
29 29
30 namespace webrtc { 30 namespace webrtc {
31 namespace test { 31 namespace test {
32 namespace { 32 namespace {
33 33
34 using testing::_; 34 using testing::_;
35 using testing::Eq;
36 using testing::Ne;
35 using testing::Return; 37 using testing::Return;
36 38
37 const int kChannelId = 1; 39 const int kChannelId = 1;
38 const uint32_t kSsrc = 1234; 40 const uint32_t kSsrc = 1234;
39 const char* kCName = "foo_name"; 41 const char* kCName = "foo_name";
40 const int kAudioLevelId = 2; 42 const int kAudioLevelId = 2;
41 const int kTransportSequenceNumberId = 4; 43 const int kTransportSequenceNumberId = 4;
42 const int kEchoDelayMedian = 254; 44 const int kEchoDelayMedian = 254;
43 const int kEchoDelayStdDev = -3; 45 const int kEchoDelayStdDev = -3;
44 const int kEchoReturnLoss = -65; 46 const int kEchoReturnLoss = -65;
(...skipping 10 matching lines...) Expand all
55 const CodecInst kIsacCodec = {103, "isac", 16000, 320, 1, 32000}; 57 const CodecInst kIsacCodec = {103, "isac", 16000, 320, 1, 32000};
56 58
57 class MockLimitObserver : public BitrateAllocator::LimitObserver { 59 class MockLimitObserver : public BitrateAllocator::LimitObserver {
58 public: 60 public:
59 MOCK_METHOD2(OnAllocationLimitsChanged, 61 MOCK_METHOD2(OnAllocationLimitsChanged,
60 void(uint32_t min_send_bitrate_bps, 62 void(uint32_t min_send_bitrate_bps,
61 uint32_t max_padding_bitrate_bps)); 63 uint32_t max_padding_bitrate_bps));
62 }; 64 };
63 65
64 struct ConfigHelper { 66 struct ConfigHelper {
65 ConfigHelper() 67 explicit ConfigHelper(bool audio_bwe_enabled)
66 : simulated_clock_(123456), 68 : simulated_clock_(123456),
67 stream_config_(nullptr), 69 stream_config_(nullptr),
68 congestion_controller_(&simulated_clock_, 70 congestion_controller_(&simulated_clock_,
69 &bitrate_observer_, 71 &bitrate_observer_,
70 &remote_bitrate_observer_, 72 &remote_bitrate_observer_,
71 &event_log_, 73 &event_log_,
72 &packet_router_), 74 &packet_router_),
73 bitrate_allocator_(&limit_observer_), 75 bitrate_allocator_(&limit_observer_),
74 worker_queue_("ConfigHelper_worker_queue") { 76 worker_queue_("ConfigHelper_worker_queue") {
75 using testing::Invoke; 77 using testing::Invoke;
76 78
77 EXPECT_CALL(voice_engine_, 79 EXPECT_CALL(voice_engine_,
78 RegisterVoiceEngineObserver(_)).WillOnce(Return(0)); 80 RegisterVoiceEngineObserver(_)).WillOnce(Return(0));
79 EXPECT_CALL(voice_engine_, 81 EXPECT_CALL(voice_engine_,
80 DeRegisterVoiceEngineObserver()).WillOnce(Return(0)); 82 DeRegisterVoiceEngineObserver()).WillOnce(Return(0));
81 EXPECT_CALL(voice_engine_, audio_device_module()); 83 EXPECT_CALL(voice_engine_, audio_device_module());
82 EXPECT_CALL(voice_engine_, audio_processing()); 84 EXPECT_CALL(voice_engine_, audio_processing());
83 EXPECT_CALL(voice_engine_, audio_transport()); 85 EXPECT_CALL(voice_engine_, audio_transport());
84 86
85 AudioState::Config config; 87 AudioState::Config config;
86 config.voice_engine = &voice_engine_; 88 config.voice_engine = &voice_engine_;
87 config.audio_mixer = AudioMixerImpl::Create(); 89 config.audio_mixer = AudioMixerImpl::Create();
88 audio_state_ = AudioState::Create(config); 90 audio_state_ = AudioState::Create(config);
89 91
90 SetupDefaultChannelProxy(); 92 SetupDefaultChannelProxy(audio_bwe_enabled);
91 93
92 EXPECT_CALL(voice_engine_, ChannelProxyFactory(kChannelId)) 94 EXPECT_CALL(voice_engine_, ChannelProxyFactory(kChannelId))
93 .WillOnce(Invoke([this](int channel_id) { 95 .WillOnce(Invoke([this](int channel_id) {
94 return channel_proxy_; 96 return channel_proxy_;
95 })); 97 }));
96 98
97 SetupMockForSetupSendCodec(); 99 SetupMockForSetupSendCodec();
98 100
99 stream_config_.voe_channel_id = kChannelId; 101 stream_config_.voe_channel_id = kChannelId;
100 stream_config_.rtp.ssrc = kSsrc; 102 stream_config_.rtp.ssrc = kSsrc;
101 stream_config_.rtp.nack.rtp_history_ms = 200; 103 stream_config_.rtp.nack.rtp_history_ms = 200;
102 stream_config_.rtp.c_name = kCName; 104 stream_config_.rtp.c_name = kCName;
103 stream_config_.rtp.extensions.push_back( 105 stream_config_.rtp.extensions.push_back(
104 RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId)); 106 RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId));
105 stream_config_.rtp.extensions.push_back(RtpExtension( 107 if (audio_bwe_enabled) {
106 RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId)); 108 stream_config_.rtp.extensions.push_back(
109 RtpExtension(RtpExtension::kTransportSequenceNumberUri,
110 kTransportSequenceNumberId));
111 stream_config_.send_codec_spec.transport_cc_enabled = true;
112 }
107 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_| 113 // Use ISAC as default codec so as to prevent unnecessary |voice_engine_|
108 // calls from the default ctor behavior. 114 // calls from the default ctor behavior.
109 stream_config_.send_codec_spec.codec_inst = kIsacCodec; 115 stream_config_.send_codec_spec.codec_inst = kIsacCodec;
110 stream_config_.min_bitrate_bps = 10000; 116 stream_config_.min_bitrate_bps = 10000;
111 stream_config_.max_bitrate_bps = 65000; 117 stream_config_.max_bitrate_bps = 65000;
112 } 118 }
113 119
114 AudioSendStream::Config& config() { return stream_config_; } 120 AudioSendStream::Config& config() { return stream_config_; }
115 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } 121 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; }
116 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; } 122 MockVoEChannelProxy* channel_proxy() { return channel_proxy_; }
117 PacketRouter* packet_router() { return &packet_router_; } 123 PacketRouter* packet_router() { return &packet_router_; }
118 CongestionController* congestion_controller() { 124 CongestionController* congestion_controller() {
119 return &congestion_controller_; 125 return &congestion_controller_;
120 } 126 }
121 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; } 127 BitrateAllocator* bitrate_allocator() { return &bitrate_allocator_; }
122 rtc::TaskQueue* worker_queue() { return &worker_queue_; } 128 rtc::TaskQueue* worker_queue() { return &worker_queue_; }
123 RtcEventLog* event_log() { return &event_log_; } 129 RtcEventLog* event_log() { return &event_log_; }
124 MockVoiceEngine* voice_engine() { return &voice_engine_; } 130 MockVoiceEngine* voice_engine() { return &voice_engine_; }
125 131
126 void SetupDefaultChannelProxy() { 132 void SetupDefaultChannelProxy(bool audio_bwe_enabled) {
127 using testing::StrEq; 133 using testing::StrEq;
128 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>(); 134 channel_proxy_ = new testing::StrictMock<MockVoEChannelProxy>();
129 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1); 135 EXPECT_CALL(*channel_proxy_, SetRTCPStatus(true)).Times(1);
130 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1); 136 EXPECT_CALL(*channel_proxy_, SetLocalSSRC(kSsrc)).Times(1);
131 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1); 137 EXPECT_CALL(*channel_proxy_, SetRTCP_CNAME(StrEq(kCName))).Times(1);
132 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1); 138 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 10)).Times(1);
133 EXPECT_CALL(*channel_proxy_, 139 EXPECT_CALL(*channel_proxy_,
134 SetSendAudioLevelIndicationStatus(true, kAudioLevelId)) 140 SetSendAudioLevelIndicationStatus(true, kAudioLevelId))
135 .Times(1); 141 .Times(1);
136 EXPECT_CALL(*channel_proxy_, 142
137 EnableSendTransportSequenceNumber(kTransportSequenceNumberId)) 143 if (audio_bwe_enabled) {
138 .Times(1); 144 EXPECT_CALL(*channel_proxy_,
139 EXPECT_CALL(*channel_proxy_, 145 EnableSendTransportSequenceNumber(kTransportSequenceNumberId))
140 RegisterSenderCongestionControlObjects( 146 .Times(1);
141 congestion_controller_.pacer(), 147 EXPECT_CALL(*channel_proxy_,
142 congestion_controller_.GetTransportFeedbackObserver(), 148 RegisterSenderCongestionControlObjects(
143 packet_router())) 149 congestion_controller_.pacer(),
144 .Times(1); 150 congestion_controller_.GetTransportFeedbackObserver(),
151 packet_router(), Ne(nullptr)))
152 .Times(1);
153 } else {
154 EXPECT_CALL(*channel_proxy_,
155 RegisterSenderCongestionControlObjects(
156 congestion_controller_.pacer(),
157 congestion_controller_.GetTransportFeedbackObserver(),
158 packet_router(), Eq(nullptr)))
159 .Times(1);
160 }
145 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1); 161 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()).Times(1);
146 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1); 162 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)).Times(1);
147 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1); 163 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()).Times(1);
148 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1); 164 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::NotNull())).Times(1);
149 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) 165 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull()))
150 .Times(1); // Destructor resets the event log 166 .Times(1); // Destructor resets the event log
151 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(&rtcp_rtt_stats_)).Times(1); 167 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(&rtcp_rtt_stats_)).Times(1);
152 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(testing::IsNull())) 168 EXPECT_CALL(*channel_proxy_, SetRtcpRttStats(testing::IsNull()))
153 .Times(1); // Destructor resets the rtt stats. 169 .Times(1); // Destructor resets the rtt stats.
154 } 170 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 "voe_channel_id: 1, min_bitrate_bps: 12000, max_bitrate_bps: 34000, " 280 "voe_channel_id: 1, min_bitrate_bps: 12000, max_bitrate_bps: 34000, "
265 "send_codec_spec: {nack_enabled: true, transport_cc_enabled: false, " 281 "send_codec_spec: {nack_enabled: true, transport_cc_enabled: false, "
266 "enable_codec_fec: true, enable_opus_dtx: false, opus_max_playback_rate: " 282 "enable_codec_fec: true, enable_opus_dtx: false, opus_max_playback_rate: "
267 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: " 283 "32000, cng_payload_type: 42, cng_plfreq: 56, min_ptime: 20, max_ptime: "
268 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: " 284 "60, codec_inst: {pltype: 103, plname: \"isac\", plfreq: 16000, pacsize: "
269 "320, channels: 1, rate: 32000}}}", 285 "320, channels: 1, rate: 32000}}}",
270 config.ToString()); 286 config.ToString());
271 } 287 }
272 288
273 TEST(AudioSendStreamTest, ConstructDestruct) { 289 TEST(AudioSendStreamTest, ConstructDestruct) {
274 ConfigHelper helper; 290 ConfigHelper helper(false);
275 internal::AudioSendStream send_stream( 291 internal::AudioSendStream send_stream(
276 helper.config(), helper.audio_state(), helper.worker_queue(), 292 helper.config(), helper.audio_state(), helper.worker_queue(),
277 helper.packet_router(), helper.congestion_controller(), 293 helper.packet_router(), helper.congestion_controller(),
278 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 294 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
279 } 295 }
280 296
281 TEST(AudioSendStreamTest, SendTelephoneEvent) { 297 TEST(AudioSendStreamTest, SendTelephoneEvent) {
282 ConfigHelper helper; 298 ConfigHelper helper(false);
283 internal::AudioSendStream send_stream( 299 internal::AudioSendStream send_stream(
284 helper.config(), helper.audio_state(), helper.worker_queue(), 300 helper.config(), helper.audio_state(), helper.worker_queue(),
285 helper.packet_router(), helper.congestion_controller(), 301 helper.packet_router(), helper.congestion_controller(),
286 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 302 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
287 helper.SetupMockForSendTelephoneEvent(); 303 helper.SetupMockForSendTelephoneEvent();
288 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType, 304 EXPECT_TRUE(send_stream.SendTelephoneEvent(kTelephoneEventPayloadType,
289 kTelephoneEventPayloadFrequency, kTelephoneEventCode, 305 kTelephoneEventPayloadFrequency, kTelephoneEventCode,
290 kTelephoneEventDuration)); 306 kTelephoneEventDuration));
291 } 307 }
292 308
293 TEST(AudioSendStreamTest, SetMuted) { 309 TEST(AudioSendStreamTest, SetMuted) {
294 ConfigHelper helper; 310 ConfigHelper helper(false);
295 internal::AudioSendStream send_stream( 311 internal::AudioSendStream send_stream(
296 helper.config(), helper.audio_state(), helper.worker_queue(), 312 helper.config(), helper.audio_state(), helper.worker_queue(),
297 helper.packet_router(), helper.congestion_controller(), 313 helper.packet_router(), helper.congestion_controller(),
298 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 314 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
299 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true)); 315 EXPECT_CALL(*helper.channel_proxy(), SetInputMute(true));
300 send_stream.SetMuted(true); 316 send_stream.SetMuted(true);
301 } 317 }
302 318
303 TEST(AudioSendStreamTest, GetStats) { 319 TEST(AudioSendStreamTest, AudioBweCorrectObjectsOnChannelProxy) {
304 ConfigHelper helper; 320 ConfigHelper helper(true);
305 internal::AudioSendStream send_stream( 321 internal::AudioSendStream send_stream(
306 helper.config(), helper.audio_state(), helper.worker_queue(), 322 helper.config(), helper.audio_state(), helper.worker_queue(),
307 helper.packet_router(), helper.congestion_controller(), 323 helper.packet_router(), helper.congestion_controller(),
324 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
325 }
326
327 TEST(AudioSendStreamTest, NoAudioBweCorrectObjectsOnChannelProxy) {
328 ConfigHelper helper(false);
329 internal::AudioSendStream send_stream(
330 helper.config(), helper.audio_state(), helper.worker_queue(),
331 helper.packet_router(), helper.congestion_controller(),
332 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
333 }
334
335 TEST(AudioSendStreamTest, GetStats) {
336 ConfigHelper helper(false);
337 internal::AudioSendStream send_stream(
338 helper.config(), helper.audio_state(), helper.worker_queue(),
339 helper.packet_router(), helper.congestion_controller(),
308 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 340 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
309 helper.SetupMockForGetStats(); 341 helper.SetupMockForGetStats();
310 AudioSendStream::Stats stats = send_stream.GetStats(); 342 AudioSendStream::Stats stats = send_stream.GetStats();
311 EXPECT_EQ(kSsrc, stats.local_ssrc); 343 EXPECT_EQ(kSsrc, stats.local_ssrc);
312 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent); 344 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesSent), stats.bytes_sent);
313 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent); 345 EXPECT_EQ(kCallStats.packetsSent, stats.packets_sent);
314 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost), 346 EXPECT_EQ(static_cast<int32_t>(kReportBlock.cumulative_num_packets_lost),
315 stats.packets_lost); 347 stats.packets_lost);
316 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost); 348 EXPECT_EQ(Q8ToFloat(kReportBlock.fraction_lost), stats.fraction_lost);
317 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name); 349 EXPECT_EQ(std::string(kIsacCodec.plname), stats.codec_name);
318 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number), 350 EXPECT_EQ(static_cast<int32_t>(kReportBlock.extended_highest_sequence_number),
319 stats.ext_seqnum); 351 stats.ext_seqnum);
320 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter / 352 EXPECT_EQ(static_cast<int32_t>(kReportBlock.interarrival_jitter /
321 (kIsacCodec.plfreq / 1000)), 353 (kIsacCodec.plfreq / 1000)),
322 stats.jitter_ms); 354 stats.jitter_ms);
323 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms); 355 EXPECT_EQ(kCallStats.rttMs, stats.rtt_ms);
324 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level); 356 EXPECT_EQ(static_cast<int32_t>(kSpeechInputLevel), stats.audio_level);
325 EXPECT_EQ(-1, stats.aec_quality_min); 357 EXPECT_EQ(-1, stats.aec_quality_min);
326 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms); 358 EXPECT_EQ(kEchoDelayMedian, stats.echo_delay_median_ms);
327 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms); 359 EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms);
328 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss); 360 EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss);
329 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement); 361 EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement);
330 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood); 362 EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood);
331 EXPECT_FALSE(stats.typing_noise_detected); 363 EXPECT_FALSE(stats.typing_noise_detected);
332 } 364 }
333 365
334 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) { 366 TEST(AudioSendStreamTest, GetStatsTypingNoiseDetected) {
335 ConfigHelper helper; 367 ConfigHelper helper(false);
336 internal::AudioSendStream send_stream( 368 internal::AudioSendStream send_stream(
337 helper.config(), helper.audio_state(), helper.worker_queue(), 369 helper.config(), helper.audio_state(), helper.worker_queue(),
338 helper.packet_router(), helper.congestion_controller(), 370 helper.packet_router(), helper.congestion_controller(),
339 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 371 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
340 helper.SetupMockForGetStats(); 372 helper.SetupMockForGetStats();
341 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); 373 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected);
342 374
343 internal::AudioState* internal_audio_state = 375 internal::AudioState* internal_audio_state =
344 static_cast<internal::AudioState*>(helper.audio_state().get()); 376 static_cast<internal::AudioState*>(helper.audio_state().get());
345 VoiceEngineObserver* voe_observer = 377 VoiceEngineObserver* voe_observer =
346 static_cast<VoiceEngineObserver*>(internal_audio_state); 378 static_cast<VoiceEngineObserver*>(internal_audio_state);
347 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING); 379 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_WARNING);
348 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected); 380 EXPECT_TRUE(send_stream.GetStats().typing_noise_detected);
349 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING); 381 voe_observer->CallbackOnError(-1, VE_TYPING_NOISE_OFF_WARNING);
350 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected); 382 EXPECT_FALSE(send_stream.GetStats().typing_noise_detected);
351 } 383 }
352 384
353 TEST(AudioSendStreamTest, SendCodecAppliesConfigParams) { 385 TEST(AudioSendStreamTest, SendCodecAppliesConfigParams) {
354 ConfigHelper helper; 386 ConfigHelper helper(false);
355 auto stream_config = helper.config(); 387 auto stream_config = helper.config();
356 const CodecInst kOpusCodec = {111, "opus", 48000, 960, 2, 64000}; 388 const CodecInst kOpusCodec = {111, "opus", 48000, 960, 2, 64000};
357 stream_config.send_codec_spec.codec_inst = kOpusCodec; 389 stream_config.send_codec_spec.codec_inst = kOpusCodec;
358 stream_config.send_codec_spec.enable_codec_fec = true; 390 stream_config.send_codec_spec.enable_codec_fec = true;
359 stream_config.send_codec_spec.enable_opus_dtx = true; 391 stream_config.send_codec_spec.enable_opus_dtx = true;
360 stream_config.send_codec_spec.opus_max_playback_rate = 12345; 392 stream_config.send_codec_spec.opus_max_playback_rate = 12345;
361 stream_config.send_codec_spec.cng_plfreq = 16000; 393 stream_config.send_codec_spec.cng_plfreq = 16000;
362 stream_config.send_codec_spec.cng_payload_type = 105; 394 stream_config.send_codec_spec.cng_payload_type = 105;
363 stream_config.send_codec_spec.min_ptime_ms = 10; 395 stream_config.send_codec_spec.min_ptime_ms = 10;
364 stream_config.send_codec_spec.max_ptime_ms = 60; 396 stream_config.send_codec_spec.max_ptime_ms = 60;
(...skipping 24 matching lines...) Expand all
389 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config)); 421 EnableAudioNetworkAdaptor(*stream_config.audio_network_adaptor_config));
390 internal::AudioSendStream send_stream( 422 internal::AudioSendStream send_stream(
391 stream_config, helper.audio_state(), helper.worker_queue(), 423 stream_config, helper.audio_state(), helper.worker_queue(),
392 helper.packet_router(), helper.congestion_controller(), 424 helper.packet_router(), helper.congestion_controller(),
393 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 425 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
394 } 426 }
395 427
396 // VAD is applied when codec is mono and the CNG frequency matches the codec 428 // VAD is applied when codec is mono and the CNG frequency matches the codec
397 // sample rate. 429 // sample rate.
398 TEST(AudioSendStreamTest, SendCodecCanApplyVad) { 430 TEST(AudioSendStreamTest, SendCodecCanApplyVad) {
399 ConfigHelper helper; 431 ConfigHelper helper(false);
400 auto stream_config = helper.config(); 432 auto stream_config = helper.config();
401 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000}; 433 const CodecInst kG722Codec = {9, "g722", 8000, 160, 1, 16000};
402 stream_config.send_codec_spec.codec_inst = kG722Codec; 434 stream_config.send_codec_spec.codec_inst = kG722Codec;
403 stream_config.send_codec_spec.cng_plfreq = 8000; 435 stream_config.send_codec_spec.cng_plfreq = 8000;
404 stream_config.send_codec_spec.cng_payload_type = 105; 436 stream_config.send_codec_spec.cng_payload_type = 105;
405 EXPECT_CALL(*helper.channel_proxy(), SetVADStatus(true)) 437 EXPECT_CALL(*helper.channel_proxy(), SetVADStatus(true))
406 .WillOnce(Return(true)); 438 .WillOnce(Return(true));
407 internal::AudioSendStream send_stream( 439 internal::AudioSendStream send_stream(
408 stream_config, helper.audio_state(), helper.worker_queue(), 440 stream_config, helper.audio_state(), helper.worker_queue(),
409 helper.packet_router(), helper.congestion_controller(), 441 helper.packet_router(), helper.congestion_controller(),
410 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 442 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
411 } 443 }
412 444
413 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) { 445 TEST(AudioSendStreamTest, DoesNotPassHigherBitrateThanMaxBitrate) {
414 ConfigHelper helper; 446 ConfigHelper helper(false);
415 internal::AudioSendStream send_stream( 447 internal::AudioSendStream send_stream(
416 helper.config(), helper.audio_state(), helper.worker_queue(), 448 helper.config(), helper.audio_state(), helper.worker_queue(),
417 helper.packet_router(), helper.congestion_controller(), 449 helper.packet_router(), helper.congestion_controller(),
418 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 450 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
419 EXPECT_CALL(*helper.channel_proxy(), 451 EXPECT_CALL(*helper.channel_proxy(),
420 SetBitrate(helper.config().max_bitrate_bps, _)); 452 SetBitrate(helper.config().max_bitrate_bps, _));
421 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50, 453 send_stream.OnBitrateUpdated(helper.config().max_bitrate_bps + 5000, 0.0, 50,
422 6000); 454 6000);
423 } 455 }
424 456
425 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) { 457 TEST(AudioSendStreamTest, ProbingIntervalOnBitrateUpdated) {
426 ConfigHelper helper; 458 ConfigHelper helper(false);
427 internal::AudioSendStream send_stream( 459 internal::AudioSendStream send_stream(
428 helper.config(), helper.audio_state(), helper.worker_queue(), 460 helper.config(), helper.audio_state(), helper.worker_queue(),
429 helper.packet_router(), helper.congestion_controller(), 461 helper.packet_router(), helper.congestion_controller(),
430 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats()); 462 helper.bitrate_allocator(), helper.event_log(), helper.rtcp_rtt_stats());
431 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000)); 463 EXPECT_CALL(*helper.channel_proxy(), SetBitrate(_, 5000));
432 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000); 464 send_stream.OnBitrateUpdated(50000, 0.0, 50, 5000);
433 } 465 }
434 466
435 } // namespace test 467 } // namespace test
436 } // namespace webrtc 468 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/audio/audio_send_stream.cc ('k') | webrtc/test/mock_voe_channel_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698