OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "media/cast/net/cast_transport_sender_impl.h" | 5 #include "media/cast/net/cast_transport_sender_impl.h" |
6 | 6 |
7 #include <gtest/gtest.h> | 7 #include <gtest/gtest.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 void InitWithoutLogging(); | 89 void InitWithoutLogging(); |
90 void InitWithOptions(); | 90 void InitWithOptions(); |
91 void InitWithLogging(); | 91 void InitWithLogging(); |
92 | 92 |
93 void InitializeVideo() { | 93 void InitializeVideo() { |
94 CastTransportRtpConfig rtp_config; | 94 CastTransportRtpConfig rtp_config; |
95 rtp_config.ssrc = kVideoSsrc; | 95 rtp_config.ssrc = kVideoSsrc; |
96 rtp_config.feedback_ssrc = 2; | 96 rtp_config.feedback_ssrc = 2; |
97 rtp_config.rtp_payload_type = 3; | 97 rtp_config.rtp_payload_type = 3; |
98 transport_sender_->InitializeVideo(rtp_config, RtcpCastMessageCallback(), | 98 transport_sender_->InitializeVideo(rtp_config, RtcpCastMessageCallback(), |
99 RtcpRttCallback()); | 99 RtcpRttCallback(), RtcpPliCallback()); |
100 } | 100 } |
101 | 101 |
102 void InitializeAudio() { | 102 void InitializeAudio() { |
103 CastTransportRtpConfig rtp_config; | 103 CastTransportRtpConfig rtp_config; |
104 rtp_config.ssrc = kAudioSsrc; | 104 rtp_config.ssrc = kAudioSsrc; |
105 rtp_config.feedback_ssrc = 3; | 105 rtp_config.feedback_ssrc = 3; |
106 rtp_config.rtp_payload_type = 4; | 106 rtp_config.rtp_payload_type = 4; |
107 transport_sender_->InitializeAudio(rtp_config, RtcpCastMessageCallback(), | 107 transport_sender_->InitializeAudio(rtp_config, RtcpCastMessageCallback(), |
108 RtcpRttCallback()); | 108 RtcpRttCallback(), RtcpPliCallback()); |
109 } | 109 } |
110 | 110 |
111 base::SimpleTestTickClock testing_clock_; | 111 base::SimpleTestTickClock testing_clock_; |
112 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; | 112 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; |
113 scoped_ptr<CastTransportSenderImpl> transport_sender_; | 113 scoped_ptr<CastTransportSenderImpl> transport_sender_; |
114 FakePacketSender* transport_; // Owned by CastTransportSender. | 114 FakePacketSender* transport_; // Owned by CastTransportSender. |
115 int num_times_logging_callback_called_; | 115 int num_times_logging_callback_called_; |
116 }; | 116 }; |
117 | 117 |
118 namespace { | 118 namespace { |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 transport_->SetPaused(true); | 212 transport_->SetPaused(true); |
213 DedupInfo dedup_info; | 213 DedupInfo dedup_info; |
214 dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(10); | 214 dedup_info.resend_interval = base::TimeDelta::FromMilliseconds(10); |
215 transport_sender_->ResendPackets( | 215 transport_sender_->ResendPackets( |
216 kVideoSsrc, missing_packets, true, dedup_info); | 216 kVideoSsrc, missing_packets, true, dedup_info); |
217 | 217 |
218 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); | 218 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
219 EXPECT_EQ(2, num_times_logging_callback_called_); | 219 EXPECT_EQ(2, num_times_logging_callback_called_); |
220 | 220 |
221 RtcpCastMessage cast_message; | 221 RtcpCastMessage cast_message; |
222 cast_message.media_ssrc = kVideoSsrc; | 222 cast_message.remote_ssrc = kVideoSsrc; |
223 cast_message.ack_frame_id = 1; | 223 cast_message.ack_frame_id = 1; |
224 cast_message.missing_frames_and_packets[1].insert(3); | 224 cast_message.missing_frames_and_packets[1].insert(3); |
225 transport_sender_->OnReceivedCastMessage(kVideoSsrc, | 225 transport_sender_->OnReceivedCastMessage(kVideoSsrc, |
226 RtcpCastMessageCallback(), | 226 RtcpCastMessageCallback(), |
227 cast_message); | 227 cast_message); |
228 transport_->SetPaused(false); | 228 transport_->SetPaused(false); |
229 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); | 229 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
230 EXPECT_EQ(3, num_times_logging_callback_called_); | 230 EXPECT_EQ(3, num_times_logging_callback_called_); |
231 | 231 |
232 // Resend one packet in the socket when unpaused. | 232 // Resend one packet in the socket when unpaused. |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
334 transport_sender_->InsertFrame(kAudioSsrc, fake_audio); | 334 transport_sender_->InsertFrame(kAudioSsrc, fake_audio); |
335 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); | 335 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); |
336 fake_audio.frame_id = 2; | 336 fake_audio.frame_id = 2; |
337 fake_audio.reference_time = testing_clock_.NowTicks(); | 337 fake_audio.reference_time = testing_clock_.NowTicks(); |
338 transport_sender_->InsertFrame(kAudioSsrc, fake_audio); | 338 transport_sender_->InsertFrame(kAudioSsrc, fake_audio); |
339 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); | 339 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); |
340 EXPECT_EQ(2, transport_->packets_sent()); | 340 EXPECT_EQ(2, transport_->packets_sent()); |
341 | 341 |
342 // Ack the first audio frame. | 342 // Ack the first audio frame. |
343 RtcpCastMessage cast_message; | 343 RtcpCastMessage cast_message; |
344 cast_message.media_ssrc = kAudioSsrc; | 344 cast_message.remote_ssrc = kAudioSsrc; |
345 cast_message.ack_frame_id = 1; | 345 cast_message.ack_frame_id = 1; |
346 transport_sender_->OnReceivedCastMessage(kAudioSsrc, | 346 transport_sender_->OnReceivedCastMessage(kAudioSsrc, |
347 RtcpCastMessageCallback(), | 347 RtcpCastMessageCallback(), |
348 cast_message); | 348 cast_message); |
349 task_runner_->RunTasks(); | 349 task_runner_->RunTasks(); |
350 EXPECT_EQ(2, transport_->packets_sent()); | 350 EXPECT_EQ(2, transport_->packets_sent()); |
351 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. | 351 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. |
352 | 352 |
353 // Send a fake video frame that will be decomposed into 4 packets. | 353 // Send a fake video frame that will be decomposed into 4 packets. |
354 EncodedFrame fake_video; | 354 EncodedFrame fake_video; |
355 fake_video.frame_id = 1; | 355 fake_video.frame_id = 1; |
356 fake_video.dependency = EncodedFrame::KEY; | 356 fake_video.dependency = EncodedFrame::KEY; |
357 fake_video.data.resize(5000, ' '); | 357 fake_video.data.resize(5000, ' '); |
358 transport_sender_->InsertFrame(kVideoSsrc, fake_video); | 358 transport_sender_->InsertFrame(kVideoSsrc, fake_video); |
359 task_runner_->RunTasks(); | 359 task_runner_->RunTasks(); |
360 EXPECT_EQ(6, transport_->packets_sent()); | 360 EXPECT_EQ(6, transport_->packets_sent()); |
361 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. | 361 EXPECT_EQ(0, num_times_logging_callback_called_); // Only 4 ms since last. |
362 | 362 |
363 // Retransmission is reject because audio is not acked yet. | 363 // Retransmission is reject because audio is not acked yet. |
364 cast_message.media_ssrc = kVideoSsrc; | 364 cast_message.remote_ssrc = kVideoSsrc; |
365 cast_message.ack_frame_id = 0; | 365 cast_message.ack_frame_id = 0; |
366 cast_message.missing_frames_and_packets[1].insert(3); | 366 cast_message.missing_frames_and_packets[1].insert(3); |
367 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); | 367 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(10)); |
368 transport_sender_->OnReceivedCastMessage(kVideoSsrc, | 368 transport_sender_->OnReceivedCastMessage(kVideoSsrc, |
369 RtcpCastMessageCallback(), | 369 RtcpCastMessageCallback(), |
370 cast_message); | 370 cast_message); |
371 task_runner_->RunTasks(); | 371 task_runner_->RunTasks(); |
372 EXPECT_EQ(6, transport_->packets_sent()); | 372 EXPECT_EQ(6, transport_->packets_sent()); |
373 EXPECT_EQ(1, num_times_logging_callback_called_); | 373 EXPECT_EQ(1, num_times_logging_callback_called_); |
374 | 374 |
375 // Ack the second audio frame. | 375 // Ack the second audio frame. |
376 cast_message.media_ssrc = kAudioSsrc; | 376 cast_message.remote_ssrc = kAudioSsrc; |
377 cast_message.ack_frame_id = 2; | 377 cast_message.ack_frame_id = 2; |
378 cast_message.missing_frames_and_packets.clear(); | 378 cast_message.missing_frames_and_packets.clear(); |
379 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); | 379 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); |
380 transport_sender_->OnReceivedCastMessage(kAudioSsrc, | 380 transport_sender_->OnReceivedCastMessage(kAudioSsrc, |
381 RtcpCastMessageCallback(), | 381 RtcpCastMessageCallback(), |
382 cast_message); | 382 cast_message); |
383 task_runner_->RunTasks(); | 383 task_runner_->RunTasks(); |
384 EXPECT_EQ(6, transport_->packets_sent()); | 384 EXPECT_EQ(6, transport_->packets_sent()); |
385 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 6 ms since last. | 385 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 6 ms since last. |
386 | 386 |
387 // Retransmission of video packet now accepted. | 387 // Retransmission of video packet now accepted. |
388 cast_message.media_ssrc = kVideoSsrc; | 388 cast_message.remote_ssrc = kVideoSsrc; |
389 cast_message.ack_frame_id = 1; | 389 cast_message.ack_frame_id = 1; |
390 cast_message.missing_frames_and_packets[1].insert(3); | 390 cast_message.missing_frames_and_packets[1].insert(3); |
391 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); | 391 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); |
392 transport_sender_->OnReceivedCastMessage(kVideoSsrc, | 392 transport_sender_->OnReceivedCastMessage(kVideoSsrc, |
393 RtcpCastMessageCallback(), | 393 RtcpCastMessageCallback(), |
394 cast_message); | 394 cast_message); |
395 task_runner_->RunTasks(); | 395 task_runner_->RunTasks(); |
396 EXPECT_EQ(7, transport_->packets_sent()); | 396 EXPECT_EQ(7, transport_->packets_sent()); |
397 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 8 ms since last. | 397 EXPECT_EQ(1, num_times_logging_callback_called_); // Only 8 ms since last. |
398 | 398 |
399 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); | 399 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(2)); |
400 EXPECT_EQ(2, num_times_logging_callback_called_); | 400 EXPECT_EQ(2, num_times_logging_callback_called_); |
401 } | 401 } |
402 | 402 |
403 } // namespace cast | 403 } // namespace cast |
404 } // namespace media | 404 } // namespace media |
OLD | NEW |