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

Side by Side Diff: media/cast/sender/video_sender_unittest.cc

Issue 387933005: Cast: Refactor RTCP handling (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix test Created 6 years, 5 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/sender/video_sender.cc ('k') | media/cast/test/cast_benchmarks.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/test/simple_test_tick_clock.h" 11 #include "base/test/simple_test_tick_clock.h"
12 #include "media/base/video_frame.h" 12 #include "media/base/video_frame.h"
13 #include "media/cast/cast_environment.h" 13 #include "media/cast/cast_environment.h"
14 #include "media/cast/logging/simple_event_subscriber.h" 14 #include "media/cast/logging/simple_event_subscriber.h"
15 #include "media/cast/net/cast_transport_config.h" 15 #include "media/cast/net/cast_transport_config.h"
16 #include "media/cast/net/cast_transport_sender_impl.h" 16 #include "media/cast/net/cast_transport_sender_impl.h"
17 #include "media/cast/net/pacing/paced_sender.h" 17 #include "media/cast/net/pacing/paced_sender.h"
18 #include "media/cast/net/rtcp/rtcp_receiver.h"
18 #include "media/cast/sender/video_sender.h" 19 #include "media/cast/sender/video_sender.h"
19 #include "media/cast/test/fake_single_thread_task_runner.h" 20 #include "media/cast/test/fake_single_thread_task_runner.h"
20 #include "media/cast/test/fake_video_encode_accelerator.h" 21 #include "media/cast/test/fake_video_encode_accelerator.h"
21 #include "media/cast/test/utility/default_config.h" 22 #include "media/cast/test/utility/default_config.h"
22 #include "media/cast/test/utility/video_utility.h" 23 #include "media/cast/test/utility/video_utility.h"
23 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 26
26 namespace media { 27 namespace media {
27 namespace cast { 28 namespace cast {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 paused_(false) {} 60 paused_(false) {}
60 61
61 // A singular packet implies a RTCP packet. 62 // A singular packet implies a RTCP packet.
62 virtual bool SendPacket(PacketRef packet, 63 virtual bool SendPacket(PacketRef packet,
63 const base::Closure& cb) OVERRIDE { 64 const base::Closure& cb) OVERRIDE {
64 if (paused_) { 65 if (paused_) {
65 stored_packet_ = packet; 66 stored_packet_ = packet;
66 callback_ = cb; 67 callback_ = cb;
67 return false; 68 return false;
68 } 69 }
69 if (Rtcp::IsRtcpPacket(&packet->data[0], packet->data.size())) { 70 if (RtcpReceiver::IsRtcpPacket(&packet->data[0], packet->data.size())) {
70 ++number_of_rtcp_packets_; 71 ++number_of_rtcp_packets_;
71 } else { 72 } else {
72 // Check that at least one RTCP packet was sent before the first RTP 73 // Check that at least one RTCP packet was sent before the first RTP
73 // packet. This confirms that the receiver will have the necessary lip 74 // packet. This confirms that the receiver will have the necessary lip
74 // sync info before it has to calculate the playout time of the first 75 // sync info before it has to calculate the playout time of the first
75 // frame. 76 // frame.
76 if (number_of_rtp_packets_ == 0) 77 if (number_of_rtp_packets_ == 0)
77 EXPECT_LE(1, number_of_rtcp_packets_); 78 EXPECT_LE(1, number_of_rtcp_packets_);
78 ++number_of_rtp_packets_; 79 ++number_of_rtp_packets_;
79 } 80 }
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 266
266 // Make sure that we send at least one RTCP packet. 267 // Make sure that we send at least one RTCP packet.
267 base::TimeDelta max_rtcp_timeout = 268 base::TimeDelta max_rtcp_timeout =
268 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2); 269 base::TimeDelta::FromMilliseconds(1 + kDefaultRtcpIntervalMs * 3 / 2);
269 270
270 RunTasks(max_rtcp_timeout.InMilliseconds()); 271 RunTasks(max_rtcp_timeout.InMilliseconds());
271 EXPECT_LE(1, transport_.number_of_rtp_packets()); 272 EXPECT_LE(1, transport_.number_of_rtp_packets());
272 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 273 EXPECT_LE(1, transport_.number_of_rtcp_packets());
273 // Build Cast msg and expect RTCP packet. 274 // Build Cast msg and expect RTCP packet.
274 RtcpCastMessage cast_feedback(1); 275 RtcpCastMessage cast_feedback(1);
275 cast_feedback.media_ssrc_ = 2; 276 cast_feedback.media_ssrc = 2;
276 cast_feedback.ack_frame_id_ = 0; 277 cast_feedback.ack_frame_id = 0;
277 video_sender_->OnReceivedCastFeedback(cast_feedback); 278 video_sender_->OnReceivedCastFeedback(cast_feedback);
278 RunTasks(max_rtcp_timeout.InMilliseconds()); 279 RunTasks(max_rtcp_timeout.InMilliseconds());
279 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 280 EXPECT_LE(1, transport_.number_of_rtcp_packets());
280 } 281 }
281 282
282 TEST_F(VideoSenderTest, ResendTimer) { 283 TEST_F(VideoSenderTest, ResendTimer) {
283 InitEncoder(false); 284 InitEncoder(false);
284 285
285 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 286 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
286 287
287 const base::TimeTicks capture_time = testing_clock_->NowTicks(); 288 const base::TimeTicks capture_time = testing_clock_->NowTicks();
288 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 289 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
289 290
290 // ACK the key frame. 291 // ACK the key frame.
291 RtcpCastMessage cast_feedback(1); 292 RtcpCastMessage cast_feedback(1);
292 cast_feedback.media_ssrc_ = 2; 293 cast_feedback.media_ssrc = 2;
293 cast_feedback.ack_frame_id_ = 0; 294 cast_feedback.ack_frame_id = 0;
294 video_sender_->OnReceivedCastFeedback(cast_feedback); 295 video_sender_->OnReceivedCastFeedback(cast_feedback);
295 296
296 video_frame = GetNewVideoFrame(); 297 video_frame = GetNewVideoFrame();
297 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 298 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
298 299
299 base::TimeDelta max_resend_timeout = 300 base::TimeDelta max_resend_timeout =
300 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs); 301 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs);
301 302
302 // Make sure that we do a re-send. 303 // Make sure that we do a re-send.
303 RunTasks(max_resend_timeout.InMilliseconds()); 304 RunTasks(max_resend_timeout.InMilliseconds());
(...skipping 13 matching lines...) Expand all
317 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 318 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
318 319
319 const base::TimeTicks capture_time = testing_clock_->NowTicks(); 320 const base::TimeTicks capture_time = testing_clock_->NowTicks();
320 video_sender_->InsertRawVideoFrame(video_frame, capture_time); 321 video_sender_->InsertRawVideoFrame(video_frame, capture_time);
321 RunTasks(33); 322 RunTasks(33);
322 } 323 }
323 324
324 task_runner_->RunTasks(); 325 task_runner_->RunTasks();
325 326
326 RtcpCastMessage cast_feedback(1); 327 RtcpCastMessage cast_feedback(1);
327 cast_feedback.ack_frame_id_ = num_frames - 1; 328 cast_feedback.ack_frame_id = num_frames - 1;
328 329
329 video_sender_->OnReceivedCastFeedback(cast_feedback); 330 video_sender_->OnReceivedCastFeedback(cast_feedback);
330 331
331 std::vector<FrameEvent> frame_events; 332 std::vector<FrameEvent> frame_events;
332 event_subscriber.GetFrameEventsAndReset(&frame_events); 333 event_subscriber.GetFrameEventsAndReset(&frame_events);
333 334
334 ASSERT_TRUE(!frame_events.empty()); 335 ASSERT_TRUE(!frame_events.empty());
335 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type); 336 EXPECT_EQ(FRAME_ACK_RECEIVED, frame_events.rbegin()->type);
336 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type); 337 EXPECT_EQ(VIDEO_EVENT, frame_events.rbegin()->media_type);
337 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id); 338 EXPECT_EQ(num_frames - 1u, frame_events.rbegin()->frame_id);
(...skipping 25 matching lines...) Expand all
363 RunTasks(33); 364 RunTasks(33);
364 } 365 }
365 366
366 // We expect a frame to be retransmitted because of duplicated ACKs. 367 // We expect a frame to be retransmitted because of duplicated ACKs.
367 // Only one packet of the frame is re-transmitted. 368 // Only one packet of the frame is re-transmitted.
368 EXPECT_EQ(number_of_packets_sent + 1, 369 EXPECT_EQ(number_of_packets_sent + 1,
369 transport_.number_of_rtp_packets()); 370 transport_.number_of_rtp_packets());
370 371
371 // Start acking and make sure we're back to steady-state. 372 // Start acking and make sure we're back to steady-state.
372 RtcpCastMessage cast_feedback(1); 373 RtcpCastMessage cast_feedback(1);
373 cast_feedback.media_ssrc_ = 2; 374 cast_feedback.media_ssrc = 2;
374 cast_feedback.ack_frame_id_ = 0; 375 cast_feedback.ack_frame_id = 0;
375 video_sender_->OnReceivedCastFeedback(cast_feedback); 376 video_sender_->OnReceivedCastFeedback(cast_feedback);
376 EXPECT_LE( 377 EXPECT_LE(
377 4, 378 4,
378 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 379 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
379 380
380 // Empty the pipeline. 381 // Empty the pipeline.
381 RunTasks(100); 382 RunTasks(100);
382 // Should have sent at least 7 packets. 383 // Should have sent at least 7 packets.
383 EXPECT_LE( 384 EXPECT_LE(
384 7, 385 7,
385 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets()); 386 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
386 } 387 }
387 388
388 TEST_F(VideoSenderTest, DuplicateAckRetransmit) { 389 TEST_F(VideoSenderTest, DuplicateAckRetransmit) {
389 InitEncoder(false); 390 InitEncoder(false);
390 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 391 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
391 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 392 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
392 RunTasks(33); 393 RunTasks(33);
393 RtcpCastMessage cast_feedback(1); 394 RtcpCastMessage cast_feedback(1);
394 cast_feedback.media_ssrc_ = 2; 395 cast_feedback.media_ssrc = 2;
395 cast_feedback.ack_frame_id_ = 0; 396 cast_feedback.ack_frame_id = 0;
396 397
397 // Send 3 more frames but don't ACK. 398 // Send 3 more frames but don't ACK.
398 for (int i = 0; i < 3; ++i) { 399 for (int i = 0; i < 3; ++i) {
399 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 400 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
400 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 401 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
401 RunTasks(33); 402 RunTasks(33);
402 } 403 }
403 const int number_of_packets_sent = transport_.number_of_rtp_packets(); 404 const int number_of_packets_sent = transport_.number_of_rtp_packets();
404 405
405 // Send duplicated ACKs and mix some invalid NACKs. 406 // Send duplicated ACKs and mix some invalid NACKs.
406 for (int i = 0; i < 10; ++i) { 407 for (int i = 0; i < 10; ++i) {
407 RtcpCastMessage ack_feedback(1); 408 RtcpCastMessage ack_feedback(1);
408 ack_feedback.media_ssrc_ = 2; 409 ack_feedback.media_ssrc = 2;
409 ack_feedback.ack_frame_id_ = 0; 410 ack_feedback.ack_frame_id = 0;
410 RtcpCastMessage nack_feedback(1); 411 RtcpCastMessage nack_feedback(1);
411 nack_feedback.media_ssrc_ = 2; 412 nack_feedback.media_ssrc = 2;
412 nack_feedback.missing_frames_and_packets_[255] = PacketIdSet(); 413 nack_feedback.missing_frames_and_packets[255] = PacketIdSet();
413 video_sender_->OnReceivedCastFeedback(ack_feedback); 414 video_sender_->OnReceivedCastFeedback(ack_feedback);
414 video_sender_->OnReceivedCastFeedback(nack_feedback); 415 video_sender_->OnReceivedCastFeedback(nack_feedback);
415 } 416 }
416 EXPECT_EQ(number_of_packets_sent, transport_.number_of_rtp_packets()); 417 EXPECT_EQ(number_of_packets_sent, transport_.number_of_rtp_packets());
417 418
418 // Re-transmit one packet because of duplicated ACKs. 419 // Re-transmit one packet because of duplicated ACKs.
419 for (int i = 0; i < 3; ++i) { 420 for (int i = 0; i < 3; ++i) {
420 RtcpCastMessage ack_feedback(1); 421 RtcpCastMessage ack_feedback(1);
421 ack_feedback.media_ssrc_ = 2; 422 ack_feedback.media_ssrc = 2;
422 ack_feedback.ack_frame_id_ = 0; 423 ack_feedback.ack_frame_id = 0;
423 video_sender_->OnReceivedCastFeedback(ack_feedback); 424 video_sender_->OnReceivedCastFeedback(ack_feedback);
424 } 425 }
425 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 426 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets());
426 } 427 }
427 428
428 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) { 429 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) {
429 InitEncoder(false); 430 InitEncoder(false);
430 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 431 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
431 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 432 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
432 RunTasks(33); 433 RunTasks(33);
433 RtcpCastMessage cast_feedback(1); 434 RtcpCastMessage cast_feedback(1);
434 cast_feedback.media_ssrc_ = 2; 435 cast_feedback.media_ssrc = 2;
435 cast_feedback.ack_frame_id_ = 0; 436 cast_feedback.ack_frame_id = 0;
436 437
437 // Send 2 more frames but don't ACK. 438 // Send 2 more frames but don't ACK.
438 for (int i = 0; i < 2; ++i) { 439 for (int i = 0; i < 2; ++i) {
439 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 440 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
440 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 441 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
441 RunTasks(33); 442 RunTasks(33);
442 } 443 }
443 // Pause the transport 444 // Pause the transport
444 transport_.SetPause(true); 445 transport_.SetPause(true);
445 446
446 // Insert one more video frame. 447 // Insert one more video frame.
447 video_frame = GetLargeNewVideoFrame(); 448 video_frame = GetLargeNewVideoFrame();
448 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 449 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
449 RunTasks(33); 450 RunTasks(33);
450 451
451 const int number_of_packets_sent = transport_.number_of_rtp_packets(); 452 const int number_of_packets_sent = transport_.number_of_rtp_packets();
452 453
453 // Send duplicated ACKs and mix some invalid NACKs. 454 // Send duplicated ACKs and mix some invalid NACKs.
454 for (int i = 0; i < 10; ++i) { 455 for (int i = 0; i < 10; ++i) {
455 RtcpCastMessage ack_feedback(1); 456 RtcpCastMessage ack_feedback(1);
456 ack_feedback.media_ssrc_ = 2; 457 ack_feedback.media_ssrc = 2;
457 ack_feedback.ack_frame_id_ = 0; 458 ack_feedback.ack_frame_id = 0;
458 RtcpCastMessage nack_feedback(1); 459 RtcpCastMessage nack_feedback(1);
459 nack_feedback.media_ssrc_ = 2; 460 nack_feedback.media_ssrc = 2;
460 nack_feedback.missing_frames_and_packets_[255] = PacketIdSet(); 461 nack_feedback.missing_frames_and_packets[255] = PacketIdSet();
461 video_sender_->OnReceivedCastFeedback(ack_feedback); 462 video_sender_->OnReceivedCastFeedback(ack_feedback);
462 video_sender_->OnReceivedCastFeedback(nack_feedback); 463 video_sender_->OnReceivedCastFeedback(nack_feedback);
463 } 464 }
464 EXPECT_EQ(number_of_packets_sent, transport_.number_of_rtp_packets()); 465 EXPECT_EQ(number_of_packets_sent, transport_.number_of_rtp_packets());
465 466
466 // Re-transmit one packet because of duplicated ACKs. 467 // Re-transmit one packet because of duplicated ACKs.
467 for (int i = 0; i < 3; ++i) { 468 for (int i = 0; i < 3; ++i) {
468 RtcpCastMessage ack_feedback(1); 469 RtcpCastMessage ack_feedback(1);
469 ack_feedback.media_ssrc_ = 2; 470 ack_feedback.media_ssrc = 2;
470 ack_feedback.ack_frame_id_ = 0; 471 ack_feedback.ack_frame_id = 0;
471 video_sender_->OnReceivedCastFeedback(ack_feedback); 472 video_sender_->OnReceivedCastFeedback(ack_feedback);
472 } 473 }
473 474
474 transport_.SetPause(false); 475 transport_.SetPause(false);
475 RunTasks(100); 476 RunTasks(100);
476 EXPECT_LT(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 477 EXPECT_LT(number_of_packets_sent + 1, transport_.number_of_rtp_packets());
477 } 478 }
478 479
479 TEST_F(VideoSenderTest, AcksCancelRetransmits) { 480 TEST_F(VideoSenderTest, AcksCancelRetransmits) {
480 InitEncoder(false); 481 InitEncoder(false);
481 transport_.SetPause(true); 482 transport_.SetPause(true);
482 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame(); 483 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame();
483 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 484 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
484 RunTasks(33); 485 RunTasks(33);
485 486
486 // Frame should be in buffer, waiting. Now let's ack it. 487 // Frame should be in buffer, waiting. Now let's ack it.
487 RtcpCastMessage cast_feedback(1); 488 RtcpCastMessage cast_feedback(1);
488 cast_feedback.media_ssrc_ = 2; 489 cast_feedback.media_ssrc = 2;
489 cast_feedback.ack_frame_id_ = 0; 490 cast_feedback.ack_frame_id = 0;
490 video_sender_->OnReceivedCastFeedback(cast_feedback); 491 video_sender_->OnReceivedCastFeedback(cast_feedback);
491 492
492 transport_.SetPause(false); 493 transport_.SetPause(false);
493 RunTasks(33); 494 RunTasks(33);
494 EXPECT_EQ(0, transport_.number_of_rtp_packets()); 495 EXPECT_EQ(0, transport_.number_of_rtp_packets());
495 } 496 }
496 497
497 TEST_F(VideoSenderTest, NAcksCancelRetransmits) { 498 TEST_F(VideoSenderTest, NAcksCancelRetransmits) {
498 InitEncoder(false); 499 InitEncoder(false);
499 transport_.SetPause(true); 500 transport_.SetPause(true);
500 // Send two video frames. 501 // Send two video frames.
501 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame(); 502 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame();
502 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 503 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
503 RunTasks(33); 504 RunTasks(33);
504 video_frame = GetLargeNewVideoFrame(); 505 video_frame = GetLargeNewVideoFrame();
505 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 506 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
506 RunTasks(33); 507 RunTasks(33);
507 508
508 // Frames should be in buffer, waiting. Now let's ack the first one and nack 509 // Frames should be in buffer, waiting. Now let's ack the first one and nack
509 // one packet in the second one. 510 // one packet in the second one.
510 RtcpCastMessage cast_feedback(1); 511 RtcpCastMessage cast_feedback(1);
511 cast_feedback.media_ssrc_ = 2; 512 cast_feedback.media_ssrc = 2;
512 cast_feedback.ack_frame_id_ = 0; 513 cast_feedback.ack_frame_id = 0;
513 PacketIdSet missing_packets; 514 PacketIdSet missing_packets;
514 missing_packets.insert(0); 515 missing_packets.insert(0);
515 cast_feedback.missing_frames_and_packets_[1] = missing_packets; 516 cast_feedback.missing_frames_and_packets[1] = missing_packets;
516 video_sender_->OnReceivedCastFeedback(cast_feedback); 517 video_sender_->OnReceivedCastFeedback(cast_feedback);
517 518
518 transport_.SetPause(false); 519 transport_.SetPause(false);
519 RunTasks(33); 520 RunTasks(33);
520 // Only one packet should be retransmitted. 521 // Only one packet should be retransmitted.
521 EXPECT_EQ(1, transport_.number_of_rtp_packets()); 522 EXPECT_EQ(1, transport_.number_of_rtp_packets());
522 } 523 }
523 524
524 } // namespace cast 525 } // namespace cast
525 } // namespace media 526 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/sender/video_sender.cc ('k') | media/cast/test/cast_benchmarks.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698