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

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

Issue 2516983004: Move ownership of PacketRouter from CongestionController to Call. (Closed)
Patch Set: Rebased. Created 4 years 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
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 123, 456, false, 0, 0, 789, 12, 345, 678, 901, -1, -1, -1, -1, -1, 0}; 65 123, 456, false, 0, 0, 789, 12, 345, 678, 901, -1, -1, -1, -1, -1, 0};
66 const AudioDecodingCallStats kAudioDecodeStats = MakeAudioDecodeStatsForTest(); 66 const AudioDecodingCallStats kAudioDecodeStats = MakeAudioDecodeStatsForTest();
67 67
68 struct ConfigHelper { 68 struct ConfigHelper {
69 ConfigHelper() 69 ConfigHelper()
70 : simulated_clock_(123456), 70 : simulated_clock_(123456),
71 decoder_factory_(new rtc::RefCountedObject<MockAudioDecoderFactory>), 71 decoder_factory_(new rtc::RefCountedObject<MockAudioDecoderFactory>),
72 congestion_controller_(&simulated_clock_, 72 congestion_controller_(&simulated_clock_,
73 &bitrate_observer_, 73 &bitrate_observer_,
74 &remote_bitrate_observer_, 74 &remote_bitrate_observer_,
75 &event_log_), 75 &event_log_,
76 &packet_router_),
76 audio_mixer_(new rtc::RefCountedObject<MockAudioMixer>()) { 77 audio_mixer_(new rtc::RefCountedObject<MockAudioMixer>()) {
77 using testing::Invoke; 78 using testing::Invoke;
78 79
79 EXPECT_CALL(voice_engine_, 80 EXPECT_CALL(voice_engine_,
80 RegisterVoiceEngineObserver(_)).WillOnce(Return(0)); 81 RegisterVoiceEngineObserver(_)).WillOnce(Return(0));
81 EXPECT_CALL(voice_engine_, 82 EXPECT_CALL(voice_engine_,
82 DeRegisterVoiceEngineObserver()).WillOnce(Return(0)); 83 DeRegisterVoiceEngineObserver()).WillOnce(Return(0));
83 EXPECT_CALL(voice_engine_, audio_processing()); 84 EXPECT_CALL(voice_engine_, audio_processing());
84 EXPECT_CALL(voice_engine_, audio_device_module()); 85 EXPECT_CALL(voice_engine_, audio_device_module());
85 EXPECT_CALL(voice_engine_, audio_transport()); 86 EXPECT_CALL(voice_engine_, audio_transport());
(...skipping 11 matching lines...) Expand all
97 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 15)).Times(1); 98 EXPECT_CALL(*channel_proxy_, SetNACKStatus(true, 15)).Times(1);
98 EXPECT_CALL(*channel_proxy_, 99 EXPECT_CALL(*channel_proxy_,
99 SetReceiveAudioLevelIndicationStatus(true, kAudioLevelId)) 100 SetReceiveAudioLevelIndicationStatus(true, kAudioLevelId))
100 .Times(1); 101 .Times(1);
101 EXPECT_CALL(*channel_proxy_, 102 EXPECT_CALL(*channel_proxy_,
102 EnableReceiveTransportSequenceNumber(kTransportSequenceNumberId)) 103 EnableReceiveTransportSequenceNumber(kTransportSequenceNumberId))
103 .Times(1); 104 .Times(1);
104 EXPECT_CALL(*channel_proxy_, 105 EXPECT_CALL(*channel_proxy_,
105 RegisterReceiverCongestionControlObjects(&packet_router_)) 106 RegisterReceiverCongestionControlObjects(&packet_router_))
106 .Times(1); 107 .Times(1);
107 EXPECT_CALL(congestion_controller_, packet_router())
108 .WillOnce(Return(&packet_router_));
109 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects()) 108 EXPECT_CALL(*channel_proxy_, ResetCongestionControlObjects())
110 .Times(1); 109 .Times(1);
111 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr)) 110 EXPECT_CALL(*channel_proxy_, RegisterExternalTransport(nullptr))
112 .Times(1); 111 .Times(1);
113 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport()) 112 EXPECT_CALL(*channel_proxy_, DeRegisterExternalTransport())
114 .Times(1); 113 .Times(1);
115 EXPECT_CALL(*channel_proxy_, GetAudioDecoderFactory()) 114 EXPECT_CALL(*channel_proxy_, GetAudioDecoderFactory())
116 .WillOnce(ReturnRef(decoder_factory_)); 115 .WillOnce(ReturnRef(decoder_factory_));
117 testing::Expectation expect_set = 116 testing::Expectation expect_set =
118 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(&event_log_)) 117 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(&event_log_))
119 .Times(1); 118 .Times(1);
120 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull())) 119 EXPECT_CALL(*channel_proxy_, SetRtcEventLog(testing::IsNull()))
121 .Times(1) 120 .Times(1)
122 .After(expect_set); 121 .After(expect_set);
123 EXPECT_CALL(*channel_proxy_, DisassociateSendChannel()).Times(1); 122 EXPECT_CALL(*channel_proxy_, DisassociateSendChannel()).Times(1);
124 return channel_proxy_; 123 return channel_proxy_;
125 })); 124 }));
126 stream_config_.voe_channel_id = kChannelId; 125 stream_config_.voe_channel_id = kChannelId;
127 stream_config_.rtp.local_ssrc = kLocalSsrc; 126 stream_config_.rtp.local_ssrc = kLocalSsrc;
128 stream_config_.rtp.remote_ssrc = kRemoteSsrc; 127 stream_config_.rtp.remote_ssrc = kRemoteSsrc;
129 stream_config_.rtp.nack.rtp_history_ms = 300; 128 stream_config_.rtp.nack.rtp_history_ms = 300;
130 stream_config_.rtp.extensions.push_back( 129 stream_config_.rtp.extensions.push_back(
131 RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId)); 130 RtpExtension(RtpExtension::kAudioLevelUri, kAudioLevelId));
132 stream_config_.rtp.extensions.push_back(RtpExtension( 131 stream_config_.rtp.extensions.push_back(RtpExtension(
133 RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId)); 132 RtpExtension::kTransportSequenceNumberUri, kTransportSequenceNumberId));
134 stream_config_.decoder_factory = decoder_factory_; 133 stream_config_.decoder_factory = decoder_factory_;
135 } 134 }
136 135
136 PacketRouter* packet_router() { return &packet_router_; }
137 MockCongestionController* congestion_controller() { 137 MockCongestionController* congestion_controller() {
138 return &congestion_controller_; 138 return &congestion_controller_;
139 } 139 }
140 MockRemoteBitrateEstimator* remote_bitrate_estimator() { 140 MockRemoteBitrateEstimator* remote_bitrate_estimator() {
141 return &remote_bitrate_estimator_; 141 return &remote_bitrate_estimator_;
142 } 142 }
143 MockRtcEventLog* event_log() { return &event_log_; } 143 MockRtcEventLog* event_log() { return &event_log_; }
144 AudioReceiveStream::Config& config() { return stream_config_; } 144 AudioReceiveStream::Config& config() { return stream_config_; }
145 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; } 145 rtc::scoped_refptr<AudioState> audio_state() { return audio_state_; }
146 rtc::scoped_refptr<MockAudioMixer> audio_mixer() { return audio_mixer_; } 146 rtc::scoped_refptr<MockAudioMixer> audio_mixer() { return audio_mixer_; }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 "{rtp: {remote_ssrc: 1234, local_ssrc: 5678, transport_cc: off, nack: " 254 "{rtp: {remote_ssrc: 1234, local_ssrc: 5678, transport_cc: off, nack: "
255 "{rtp_history_ms: 0}, extensions: [{uri: " 255 "{rtp_history_ms: 0}, extensions: [{uri: "
256 "urn:ietf:params:rtp-hdrext:ssrc-audio-level, id: 3}]}, " 256 "urn:ietf:params:rtp-hdrext:ssrc-audio-level, id: 3}]}, "
257 "rtcp_send_transport: nullptr, voe_channel_id: 2}", 257 "rtcp_send_transport: nullptr, voe_channel_id: 2}",
258 config.ToString()); 258 config.ToString());
259 } 259 }
260 260
261 TEST(AudioReceiveStreamTest, ConstructDestruct) { 261 TEST(AudioReceiveStreamTest, ConstructDestruct) {
262 ConfigHelper helper; 262 ConfigHelper helper;
263 internal::AudioReceiveStream recv_stream( 263 internal::AudioReceiveStream recv_stream(
264 helper.congestion_controller(), helper.config(), helper.audio_state(), 264 helper.packet_router(),
265 helper.event_log()); 265 helper.congestion_controller()->GetRemoteBitrateEstimator(true),
266 helper.config(), helper.audio_state(), helper.event_log());
266 } 267 }
267 268
268 MATCHER_P(VerifyHeaderExtension, expected_extension, "") { 269 MATCHER_P(VerifyHeaderExtension, expected_extension, "") {
269 return arg.extension.hasTransportSequenceNumber == 270 return arg.extension.hasTransportSequenceNumber ==
270 expected_extension.hasTransportSequenceNumber && 271 expected_extension.hasTransportSequenceNumber &&
271 arg.extension.transportSequenceNumber == 272 arg.extension.transportSequenceNumber ==
272 expected_extension.transportSequenceNumber; 273 expected_extension.transportSequenceNumber;
273 } 274 }
274 275
275 TEST(AudioReceiveStreamTest, ReceiveRtpPacket) { 276 TEST(AudioReceiveStreamTest, ReceiveRtpPacket) {
276 ConfigHelper helper; 277 ConfigHelper helper;
277 helper.config().rtp.transport_cc = true; 278 helper.config().rtp.transport_cc = true;
278 helper.SetupMockForBweFeedback(true); 279 helper.SetupMockForBweFeedback(true);
279 internal::AudioReceiveStream recv_stream( 280 internal::AudioReceiveStream recv_stream(
280 helper.congestion_controller(), helper.config(), helper.audio_state(), 281 helper.packet_router(),
281 helper.event_log()); 282 helper.congestion_controller()->GetRemoteBitrateEstimator(true),
283 helper.config(), helper.audio_state(), helper.event_log());
282 const int kTransportSequenceNumberValue = 1234; 284 const int kTransportSequenceNumberValue = 1234;
283 std::vector<uint8_t> rtp_packet = CreateRtpHeaderWithOneByteExtension( 285 std::vector<uint8_t> rtp_packet = CreateRtpHeaderWithOneByteExtension(
284 kTransportSequenceNumberId, kTransportSequenceNumberValue, 2); 286 kTransportSequenceNumberId, kTransportSequenceNumberValue, 2);
285 PacketTime packet_time(5678000, 0); 287 PacketTime packet_time(5678000, 0);
286 const size_t kExpectedHeaderLength = 20; 288 const size_t kExpectedHeaderLength = 20;
287 RTPHeaderExtension expected_extension; 289 RTPHeaderExtension expected_extension;
288 expected_extension.hasTransportSequenceNumber = true; 290 expected_extension.hasTransportSequenceNumber = true;
289 expected_extension.transportSequenceNumber = kTransportSequenceNumberValue; 291 expected_extension.transportSequenceNumber = kTransportSequenceNumberValue;
290 EXPECT_CALL(*helper.remote_bitrate_estimator(), 292 EXPECT_CALL(*helper.remote_bitrate_estimator(),
291 IncomingPacket(packet_time.timestamp / 1000, 293 IncomingPacket(packet_time.timestamp / 1000,
292 rtp_packet.size() - kExpectedHeaderLength, 294 rtp_packet.size() - kExpectedHeaderLength,
293 VerifyHeaderExtension(expected_extension))) 295 VerifyHeaderExtension(expected_extension)))
294 .Times(1); 296 .Times(1);
295 EXPECT_CALL(*helper.channel_proxy(), 297 EXPECT_CALL(*helper.channel_proxy(),
296 ReceivedRTPPacket(&rtp_packet[0], 298 ReceivedRTPPacket(&rtp_packet[0],
297 rtp_packet.size(), 299 rtp_packet.size(),
298 _)) 300 _))
299 .WillOnce(Return(true)); 301 .WillOnce(Return(true));
300 EXPECT_TRUE( 302 EXPECT_TRUE(
301 recv_stream.DeliverRtp(&rtp_packet[0], rtp_packet.size(), packet_time)); 303 recv_stream.DeliverRtp(&rtp_packet[0], rtp_packet.size(), packet_time));
302 } 304 }
303 305
304 TEST(AudioReceiveStreamTest, ReceiveRtcpPacket) { 306 TEST(AudioReceiveStreamTest, ReceiveRtcpPacket) {
305 ConfigHelper helper; 307 ConfigHelper helper;
306 helper.config().rtp.transport_cc = true; 308 helper.config().rtp.transport_cc = true;
307 helper.SetupMockForBweFeedback(true); 309 helper.SetupMockForBweFeedback(true);
308 internal::AudioReceiveStream recv_stream( 310 internal::AudioReceiveStream recv_stream(
309 helper.congestion_controller(), helper.config(), helper.audio_state(), 311 helper.packet_router(),
310 helper.event_log()); 312 helper.congestion_controller()->GetRemoteBitrateEstimator(true),
313 helper.config(), helper.audio_state(), helper.event_log());
311 314
312 std::vector<uint8_t> rtcp_packet = CreateRtcpSenderReport(); 315 std::vector<uint8_t> rtcp_packet = CreateRtcpSenderReport();
313 EXPECT_CALL(*helper.channel_proxy(), 316 EXPECT_CALL(*helper.channel_proxy(),
314 ReceivedRTCPPacket(&rtcp_packet[0], rtcp_packet.size())) 317 ReceivedRTCPPacket(&rtcp_packet[0], rtcp_packet.size()))
315 .WillOnce(Return(true)); 318 .WillOnce(Return(true));
316 EXPECT_TRUE(recv_stream.DeliverRtcp(&rtcp_packet[0], rtcp_packet.size())); 319 EXPECT_TRUE(recv_stream.DeliverRtcp(&rtcp_packet[0], rtcp_packet.size()));
317 } 320 }
318 321
319 TEST(AudioReceiveStreamTest, GetStats) { 322 TEST(AudioReceiveStreamTest, GetStats) {
320 ConfigHelper helper; 323 ConfigHelper helper;
321 internal::AudioReceiveStream recv_stream( 324 internal::AudioReceiveStream recv_stream(
322 helper.congestion_controller(), helper.config(), helper.audio_state(), 325 helper.packet_router(),
323 helper.event_log()); 326 helper.congestion_controller()->GetRemoteBitrateEstimator(true),
327 helper.config(), helper.audio_state(), helper.event_log());
324 helper.SetupMockForGetStats(); 328 helper.SetupMockForGetStats();
325 AudioReceiveStream::Stats stats = recv_stream.GetStats(); 329 AudioReceiveStream::Stats stats = recv_stream.GetStats();
326 EXPECT_EQ(kRemoteSsrc, stats.remote_ssrc); 330 EXPECT_EQ(kRemoteSsrc, stats.remote_ssrc);
327 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesReceived), stats.bytes_rcvd); 331 EXPECT_EQ(static_cast<int64_t>(kCallStats.bytesReceived), stats.bytes_rcvd);
328 EXPECT_EQ(static_cast<uint32_t>(kCallStats.packetsReceived), 332 EXPECT_EQ(static_cast<uint32_t>(kCallStats.packetsReceived),
329 stats.packets_rcvd); 333 stats.packets_rcvd);
330 EXPECT_EQ(kCallStats.cumulativeLost, stats.packets_lost); 334 EXPECT_EQ(kCallStats.cumulativeLost, stats.packets_lost);
331 EXPECT_EQ(Q8ToFloat(kCallStats.fractionLost), stats.fraction_lost); 335 EXPECT_EQ(Q8ToFloat(kCallStats.fractionLost), stats.fraction_lost);
332 EXPECT_EQ(std::string(kCodecInst.plname), stats.codec_name); 336 EXPECT_EQ(std::string(kCodecInst.plname), stats.codec_name);
333 EXPECT_EQ(kCallStats.extendedMax, stats.ext_seqnum); 337 EXPECT_EQ(kCallStats.extendedMax, stats.ext_seqnum);
(...skipping 23 matching lines...) Expand all
357 EXPECT_EQ(kAudioDecodeStats.decoded_plc_cng, stats.decoding_plc_cng); 361 EXPECT_EQ(kAudioDecodeStats.decoded_plc_cng, stats.decoding_plc_cng);
358 EXPECT_EQ(kAudioDecodeStats.decoded_muted_output, 362 EXPECT_EQ(kAudioDecodeStats.decoded_muted_output,
359 stats.decoding_muted_output); 363 stats.decoding_muted_output);
360 EXPECT_EQ(kCallStats.capture_start_ntp_time_ms_, 364 EXPECT_EQ(kCallStats.capture_start_ntp_time_ms_,
361 stats.capture_start_ntp_time_ms); 365 stats.capture_start_ntp_time_ms);
362 } 366 }
363 367
364 TEST(AudioReceiveStreamTest, SetGain) { 368 TEST(AudioReceiveStreamTest, SetGain) {
365 ConfigHelper helper; 369 ConfigHelper helper;
366 internal::AudioReceiveStream recv_stream( 370 internal::AudioReceiveStream recv_stream(
367 helper.congestion_controller(), helper.config(), helper.audio_state(), 371 helper.packet_router(),
368 helper.event_log()); 372 helper.congestion_controller()->GetRemoteBitrateEstimator(true),
373 helper.config(), helper.audio_state(), helper.event_log());
369 EXPECT_CALL(*helper.channel_proxy(), 374 EXPECT_CALL(*helper.channel_proxy(),
370 SetChannelOutputVolumeScaling(FloatEq(0.765f))); 375 SetChannelOutputVolumeScaling(FloatEq(0.765f)));
371 recv_stream.SetGain(0.765f); 376 recv_stream.SetGain(0.765f);
372 } 377 }
373 378
374 TEST(AudioReceiveStreamTest, StreamShouldNotBeAddedToMixerWhenVoEReturnsError) { 379 TEST(AudioReceiveStreamTest, StreamShouldNotBeAddedToMixerWhenVoEReturnsError) {
375 ConfigHelper helper; 380 ConfigHelper helper;
376 internal::AudioReceiveStream recv_stream( 381 internal::AudioReceiveStream recv_stream(
377 helper.congestion_controller(), helper.config(), helper.audio_state(), 382 helper.packet_router(),
378 helper.event_log()); 383 helper.congestion_controller()->GetRemoteBitrateEstimator(true),
384 helper.config(), helper.audio_state(), helper.event_log());
379 385
380 EXPECT_CALL(helper.voice_engine(), StartPlayout(_)).WillOnce(Return(-1)); 386 EXPECT_CALL(helper.voice_engine(), StartPlayout(_)).WillOnce(Return(-1));
381 EXPECT_CALL(*helper.audio_mixer(), AddSource(_)).Times(0); 387 EXPECT_CALL(*helper.audio_mixer(), AddSource(_)).Times(0);
382 388
383 recv_stream.Start(); 389 recv_stream.Start();
384 } 390 }
385 391
386 TEST(AudioReceiveStreamTest, StreamShouldBeAddedToMixerOnStart) { 392 TEST(AudioReceiveStreamTest, StreamShouldBeAddedToMixerOnStart) {
387 ConfigHelper helper; 393 ConfigHelper helper;
388 internal::AudioReceiveStream recv_stream( 394 internal::AudioReceiveStream recv_stream(
389 helper.congestion_controller(), helper.config(), helper.audio_state(), 395 helper.packet_router(),
390 helper.event_log()); 396 helper.congestion_controller()->GetRemoteBitrateEstimator(true),
397 helper.config(), helper.audio_state(), helper.event_log());
391 398
392 EXPECT_CALL(helper.voice_engine(), StartPlayout(_)).WillOnce(Return(0)); 399 EXPECT_CALL(helper.voice_engine(), StartPlayout(_)).WillOnce(Return(0));
393 EXPECT_CALL(helper.voice_engine(), StopPlayout(_)); 400 EXPECT_CALL(helper.voice_engine(), StopPlayout(_));
394 EXPECT_CALL(*helper.audio_mixer(), AddSource(&recv_stream)) 401 EXPECT_CALL(*helper.audio_mixer(), AddSource(&recv_stream))
395 .WillOnce(Return(true)); 402 .WillOnce(Return(true));
396 403
397 recv_stream.Start(); 404 recv_stream.Start();
398 } 405 }
399 } // namespace test 406 } // namespace test
400 } // namespace webrtc 407 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698