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

Side by Side Diff: media/cast/net/cast_transport_sender_impl_unittest.cc

Issue 1709863002: Add Cast PLI support on sender side. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address dcheng's comments. Created 4 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 // 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
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
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
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
OLDNEW
« no previous file with comments | « media/cast/net/cast_transport_sender_impl.cc ('k') | media/cast/net/mock_cast_transport_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698