OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 enum { kPacketBufferSize = 10 }; | 54 enum { kPacketBufferSize = 10 }; |
55 | 55 |
56 uint8_t packet_buffer_[kPacketBufferSize]; | 56 uint8_t packet_buffer_[kPacketBufferSize]; |
57 uint8_t frame_buffer_[10 * kPacketBufferSize]; | 57 uint8_t frame_buffer_[10 * kPacketBufferSize]; |
58 | 58 |
59 VCMSessionInfo session_; | 59 VCMSessionInfo session_; |
60 VCMPacket packet_; | 60 VCMPacket packet_; |
61 FrameData frame_data; | 61 FrameData frame_data; |
62 }; | 62 }; |
63 | 63 |
64 class TestVP8Partitions : public TestSessionInfo { | |
65 protected: | |
66 enum { kMaxVP8Partitions = 9 }; | |
67 | |
68 virtual void SetUp() { | |
69 TestSessionInfo::SetUp(); | |
70 vp8_header_ = &packet_header_.type.Video.codecHeader.VP8; | |
71 packet_header_.frameType = kVideoFrameDelta; | |
72 packet_header_.type.Video.codec = kRtpVideoVp8; | |
73 vp8_header_->InitRTPVideoHeaderVP8(); | |
74 fragmentation_.VerifyAndAllocateFragmentationHeader(kMaxVP8Partitions); | |
75 } | |
76 | |
77 bool VerifyPartition(int partition_id, | |
78 int packets_expected, | |
79 int start_value) { | |
80 EXPECT_EQ(packets_expected * packet_buffer_size(), | |
81 fragmentation_.fragmentationLength[partition_id]); | |
82 for (int i = 0; i < packets_expected; ++i) { | |
83 size_t packet_index = fragmentation_.fragmentationOffset[partition_id] + | |
84 i * packet_buffer_size(); | |
85 if (packet_index + packet_buffer_size() > frame_buffer_size()) | |
86 return false; | |
87 VerifyPacket(frame_buffer_ + packet_index, start_value + i); | |
88 } | |
89 return true; | |
90 } | |
91 | |
92 WebRtcRTPHeader packet_header_; | |
93 RTPVideoHeaderVP8* vp8_header_; | |
94 RTPFragmentationHeader fragmentation_; | |
95 }; | |
96 | |
97 class TestNalUnits : public TestSessionInfo { | 64 class TestNalUnits : public TestSessionInfo { |
98 protected: | 65 protected: |
99 virtual void SetUp() { | 66 virtual void SetUp() { |
100 TestSessionInfo::SetUp(); | 67 TestSessionInfo::SetUp(); |
101 packet_.codec = kVideoCodecVP8; | 68 packet_.codec = kVideoCodecVP8; |
102 } | 69 } |
103 | 70 |
104 bool VerifyNalu(int offset, int packets_expected, int start_value) { | 71 bool VerifyNalu(int offset, int packets_expected, int start_value) { |
105 EXPECT_GE(session_.SessionLength(), | 72 EXPECT_GE(session_.SessionLength(), |
106 packets_expected * packet_buffer_size()); | 73 packets_expected * packet_buffer_size()); |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
409 kNoErrors, frame_data))); | 376 kNoErrors, frame_data))); |
410 | 377 |
411 packet_.seqNum = 0x0009; | 378 packet_.seqNum = 0x0009; |
412 packet_.isFirstPacket = false; | 379 packet_.isFirstPacket = false; |
413 packet_.markerBit = false; | 380 packet_.markerBit = false; |
414 FillPacket(1); | 381 FillPacket(1); |
415 EXPECT_EQ( | 382 EXPECT_EQ( |
416 -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); | 383 -3, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); |
417 } | 384 } |
418 | 385 |
419 TEST_F(TestVP8Partitions, TwoPartitionsOneLoss) { | |
420 // Partition 0 | Partition 1 | |
421 // [ 0 ] [ 2 ] | [ 3 ] | |
422 packet_header_.type.Video.isFirstPacket = true; | |
423 vp8_header_->beginningOfPartition = true; | |
424 vp8_header_->partitionId = 0; | |
425 packet_header_.header.markerBit = false; | |
426 packet_header_.header.sequenceNumber = 0; | |
427 FillPacket(0); | |
428 VCMPacket* packet = | |
429 new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
430 EXPECT_EQ(packet_buffer_size(), | |
431 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
432 kNoErrors, frame_data))); | |
433 delete packet; | |
434 | |
435 packet_header_.type.Video.isFirstPacket = false; | |
436 vp8_header_->partitionId = 0; | |
437 vp8_header_->beginningOfPartition = false; | |
438 packet_header_.header.markerBit = false; | |
439 packet_header_.header.sequenceNumber += 2; | |
440 FillPacket(2); | |
441 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
442 EXPECT_EQ(packet_buffer_size(), | |
443 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
444 kNoErrors, frame_data))); | |
445 delete packet; | |
446 | |
447 packet_header_.type.Video.isFirstPacket = false; | |
448 vp8_header_->partitionId = 1; | |
449 vp8_header_->beginningOfPartition = true; | |
450 packet_header_.header.markerBit = true; | |
451 packet_header_.header.sequenceNumber += 1; | |
452 FillPacket(3); | |
453 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
454 EXPECT_EQ(packet_buffer_size(), | |
455 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
456 kNoErrors, frame_data))); | |
457 delete packet; | |
458 | |
459 // One packet should be removed (end of partition 0). | |
460 EXPECT_EQ(2 * packet_buffer_size(), | |
461 session_.BuildVP8FragmentationHeader( | |
462 frame_buffer_, frame_buffer_size(), &fragmentation_)); | |
463 SCOPED_TRACE("Calling VerifyPartition"); | |
464 EXPECT_TRUE(VerifyPartition(0, 1, 0)); | |
465 SCOPED_TRACE("Calling VerifyPartition"); | |
466 EXPECT_TRUE(VerifyPartition(1, 1, 3)); | |
467 } | |
468 | |
469 TEST_F(TestVP8Partitions, TwoPartitionsOneLoss2) { | |
470 // Partition 0 | Partition 1 | |
471 // [ 1 ] [ 2 ] | [ 3 ] [ 5 ] | |
472 packet_header_.type.Video.isFirstPacket = true; | |
473 vp8_header_->beginningOfPartition = true; | |
474 vp8_header_->partitionId = 0; | |
475 packet_header_.header.markerBit = false; | |
476 packet_header_.header.sequenceNumber = 1; | |
477 FillPacket(1); | |
478 VCMPacket* packet = | |
479 new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
480 EXPECT_EQ(packet_buffer_size(), | |
481 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
482 kNoErrors, frame_data))); | |
483 delete packet; | |
484 | |
485 packet_header_.type.Video.isFirstPacket = false; | |
486 vp8_header_->partitionId = 0; | |
487 vp8_header_->beginningOfPartition = false; | |
488 packet_header_.header.markerBit = false; | |
489 packet_header_.header.sequenceNumber += 1; | |
490 FillPacket(2); | |
491 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
492 EXPECT_EQ(packet_buffer_size(), | |
493 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
494 kNoErrors, frame_data))); | |
495 delete packet; | |
496 | |
497 packet_header_.type.Video.isFirstPacket = false; | |
498 vp8_header_->partitionId = 1; | |
499 vp8_header_->beginningOfPartition = true; | |
500 packet_header_.header.markerBit = false; | |
501 packet_header_.header.sequenceNumber += 1; | |
502 FillPacket(3); | |
503 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
504 EXPECT_EQ(packet_buffer_size(), | |
505 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
506 kNoErrors, frame_data))); | |
507 delete packet; | |
508 | |
509 packet_header_.type.Video.isFirstPacket = false; | |
510 vp8_header_->partitionId = 1; | |
511 vp8_header_->beginningOfPartition = false; | |
512 packet_header_.header.markerBit = true; | |
513 packet_header_.header.sequenceNumber += 2; | |
514 FillPacket(5); | |
515 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
516 EXPECT_EQ(packet_buffer_size(), | |
517 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
518 kNoErrors, frame_data))); | |
519 delete packet; | |
520 | |
521 // One packet should be removed (end of partition 2), 3 left. | |
522 EXPECT_EQ(3 * packet_buffer_size(), | |
523 session_.BuildVP8FragmentationHeader( | |
524 frame_buffer_, frame_buffer_size(), &fragmentation_)); | |
525 SCOPED_TRACE("Calling VerifyPartition"); | |
526 EXPECT_TRUE(VerifyPartition(0, 2, 1)); | |
527 SCOPED_TRACE("Calling VerifyPartition"); | |
528 EXPECT_TRUE(VerifyPartition(1, 1, 3)); | |
529 } | |
530 | |
531 TEST_F(TestVP8Partitions, TwoPartitionsNoLossWrap) { | |
532 // Partition 0 | Partition 1 | |
533 // [ fffd ] [ fffe ] | [ ffff ] [ 0 ] | |
534 packet_header_.type.Video.isFirstPacket = true; | |
535 vp8_header_->beginningOfPartition = true; | |
536 vp8_header_->partitionId = 0; | |
537 packet_header_.header.markerBit = false; | |
538 packet_header_.header.sequenceNumber = 0xfffd; | |
539 FillPacket(0); | |
540 VCMPacket* packet = | |
541 new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
542 EXPECT_EQ(packet_buffer_size(), | |
543 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
544 kNoErrors, frame_data))); | |
545 delete packet; | |
546 | |
547 packet_header_.type.Video.isFirstPacket = false; | |
548 vp8_header_->partitionId = 0; | |
549 vp8_header_->beginningOfPartition = false; | |
550 packet_header_.header.markerBit = false; | |
551 packet_header_.header.sequenceNumber += 1; | |
552 FillPacket(1); | |
553 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
554 EXPECT_EQ(packet_buffer_size(), | |
555 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
556 kNoErrors, frame_data))); | |
557 delete packet; | |
558 | |
559 packet_header_.type.Video.isFirstPacket = false; | |
560 vp8_header_->partitionId = 1; | |
561 vp8_header_->beginningOfPartition = true; | |
562 packet_header_.header.markerBit = false; | |
563 packet_header_.header.sequenceNumber += 1; | |
564 FillPacket(2); | |
565 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
566 EXPECT_EQ(packet_buffer_size(), | |
567 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
568 kNoErrors, frame_data))); | |
569 delete packet; | |
570 | |
571 packet_header_.type.Video.isFirstPacket = false; | |
572 vp8_header_->partitionId = 1; | |
573 vp8_header_->beginningOfPartition = false; | |
574 packet_header_.header.markerBit = true; | |
575 packet_header_.header.sequenceNumber += 1; | |
576 FillPacket(3); | |
577 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
578 EXPECT_EQ(packet_buffer_size(), | |
579 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
580 kNoErrors, frame_data))); | |
581 delete packet; | |
582 | |
583 // No packet should be removed. | |
584 EXPECT_EQ(4 * packet_buffer_size(), | |
585 session_.BuildVP8FragmentationHeader( | |
586 frame_buffer_, frame_buffer_size(), &fragmentation_)); | |
587 SCOPED_TRACE("Calling VerifyPartition"); | |
588 EXPECT_TRUE(VerifyPartition(0, 2, 0)); | |
589 SCOPED_TRACE("Calling VerifyPartition"); | |
590 EXPECT_TRUE(VerifyPartition(1, 2, 2)); | |
591 } | |
592 | |
593 TEST_F(TestVP8Partitions, TwoPartitionsLossWrap) { | |
594 // Partition 0 | Partition 1 | |
595 // [ fffd ] [ fffe ] | [ ffff ] [ 1 ] | |
596 packet_header_.type.Video.isFirstPacket = true; | |
597 vp8_header_->beginningOfPartition = true; | |
598 vp8_header_->partitionId = 0; | |
599 packet_header_.header.markerBit = false; | |
600 packet_header_.header.sequenceNumber = 0xfffd; | |
601 FillPacket(0); | |
602 VCMPacket* packet = | |
603 new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
604 EXPECT_EQ(packet_buffer_size(), | |
605 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
606 kNoErrors, frame_data))); | |
607 delete packet; | |
608 | |
609 packet_header_.type.Video.isFirstPacket = false; | |
610 vp8_header_->partitionId = 0; | |
611 vp8_header_->beginningOfPartition = false; | |
612 packet_header_.header.markerBit = false; | |
613 packet_header_.header.sequenceNumber += 1; | |
614 FillPacket(1); | |
615 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
616 EXPECT_EQ(packet_buffer_size(), | |
617 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
618 kNoErrors, frame_data))); | |
619 delete packet; | |
620 | |
621 packet_header_.type.Video.isFirstPacket = false; | |
622 vp8_header_->partitionId = 1; | |
623 vp8_header_->beginningOfPartition = true; | |
624 packet_header_.header.markerBit = false; | |
625 packet_header_.header.sequenceNumber += 1; | |
626 FillPacket(2); | |
627 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
628 EXPECT_EQ(packet_buffer_size(), | |
629 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
630 kNoErrors, frame_data))); | |
631 delete packet; | |
632 | |
633 packet_header_.type.Video.isFirstPacket = false; | |
634 vp8_header_->partitionId = 1; | |
635 vp8_header_->beginningOfPartition = false; | |
636 packet_header_.header.markerBit = true; | |
637 packet_header_.header.sequenceNumber += 2; | |
638 FillPacket(3); | |
639 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
640 EXPECT_EQ(packet_buffer_size(), | |
641 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
642 kNoErrors, frame_data))); | |
643 delete packet; | |
644 | |
645 // One packet should be removed from the last partition | |
646 EXPECT_EQ(3 * packet_buffer_size(), | |
647 session_.BuildVP8FragmentationHeader( | |
648 frame_buffer_, frame_buffer_size(), &fragmentation_)); | |
649 SCOPED_TRACE("Calling VerifyPartition"); | |
650 EXPECT_TRUE(VerifyPartition(0, 2, 0)); | |
651 SCOPED_TRACE("Calling VerifyPartition"); | |
652 EXPECT_TRUE(VerifyPartition(1, 1, 2)); | |
653 } | |
654 | |
655 TEST_F(TestVP8Partitions, ThreePartitionsOneMissing) { | |
656 // Partition 1 |Partition 2 | Partition 3 | |
657 // [ 1 ] [ 2 ] | | [ 5 ] | [ 6 ] | |
658 packet_header_.type.Video.isFirstPacket = true; | |
659 vp8_header_->beginningOfPartition = true; | |
660 vp8_header_->partitionId = 0; | |
661 packet_header_.header.markerBit = false; | |
662 packet_header_.header.sequenceNumber = 1; | |
663 FillPacket(1); | |
664 VCMPacket* packet = | |
665 new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
666 EXPECT_EQ(packet_buffer_size(), | |
667 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
668 kNoErrors, frame_data))); | |
669 delete packet; | |
670 | |
671 packet_header_.type.Video.isFirstPacket = false; | |
672 vp8_header_->partitionId = 0; | |
673 vp8_header_->beginningOfPartition = false; | |
674 packet_header_.header.markerBit = false; | |
675 packet_header_.header.sequenceNumber += 1; | |
676 FillPacket(2); | |
677 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
678 EXPECT_EQ(packet_buffer_size(), | |
679 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
680 kNoErrors, frame_data))); | |
681 delete packet; | |
682 | |
683 packet_header_.type.Video.isFirstPacket = false; | |
684 vp8_header_->partitionId = 2; | |
685 vp8_header_->beginningOfPartition = true; | |
686 packet_header_.header.markerBit = false; | |
687 packet_header_.header.sequenceNumber += 3; | |
688 FillPacket(5); | |
689 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
690 EXPECT_EQ(packet_buffer_size(), | |
691 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
692 kNoErrors, frame_data))); | |
693 delete packet; | |
694 | |
695 packet_header_.type.Video.isFirstPacket = false; | |
696 vp8_header_->partitionId = 2; | |
697 vp8_header_->beginningOfPartition = false; | |
698 packet_header_.header.markerBit = true; | |
699 packet_header_.header.sequenceNumber += 1; | |
700 FillPacket(6); | |
701 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
702 EXPECT_EQ(packet_buffer_size(), | |
703 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
704 kNoErrors, frame_data))); | |
705 delete packet; | |
706 | |
707 // No packet should be removed. | |
708 EXPECT_EQ(4 * packet_buffer_size(), | |
709 session_.BuildVP8FragmentationHeader( | |
710 frame_buffer_, frame_buffer_size(), &fragmentation_)); | |
711 SCOPED_TRACE("Calling VerifyPartition"); | |
712 EXPECT_TRUE(VerifyPartition(0, 2, 1)); | |
713 SCOPED_TRACE("Calling VerifyPartition"); | |
714 EXPECT_TRUE(VerifyPartition(2, 2, 5)); | |
715 } | |
716 | |
717 TEST_F(TestVP8Partitions, ThreePartitionsLossInSecond) { | |
718 // Partition 0 |Partition 1 | Partition 2 | |
719 // [ 1 ] [ 2 ] | [ 4 ] [ 5 ] | [ 6 ] [ 7 ] | |
720 packet_header_.type.Video.isFirstPacket = true; | |
721 vp8_header_->beginningOfPartition = true; | |
722 vp8_header_->partitionId = 0; | |
723 packet_header_.header.markerBit = false; | |
724 packet_header_.header.sequenceNumber = 1; | |
725 FillPacket(1); | |
726 VCMPacket* packet = | |
727 new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
728 EXPECT_EQ(packet_buffer_size(), | |
729 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
730 kNoErrors, frame_data))); | |
731 delete packet; | |
732 | |
733 packet_header_.type.Video.isFirstPacket = false; | |
734 vp8_header_->partitionId = 0; | |
735 vp8_header_->beginningOfPartition = false; | |
736 packet_header_.header.markerBit = false; | |
737 packet_header_.header.sequenceNumber += 1; | |
738 FillPacket(2); | |
739 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
740 EXPECT_EQ(packet_buffer_size(), | |
741 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
742 kNoErrors, frame_data))); | |
743 delete packet; | |
744 | |
745 packet_header_.type.Video.isFirstPacket = false; | |
746 vp8_header_->partitionId = 1; | |
747 vp8_header_->beginningOfPartition = false; | |
748 packet_header_.header.markerBit = false; | |
749 packet_header_.header.sequenceNumber += 2; | |
750 FillPacket(4); | |
751 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
752 EXPECT_EQ(packet_buffer_size(), | |
753 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
754 kNoErrors, frame_data))); | |
755 delete packet; | |
756 | |
757 packet_header_.type.Video.isFirstPacket = false; | |
758 vp8_header_->partitionId = 1; | |
759 vp8_header_->beginningOfPartition = false; | |
760 packet_header_.header.markerBit = false; | |
761 packet_header_.header.sequenceNumber += 1; | |
762 FillPacket(5); | |
763 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
764 EXPECT_EQ(packet_buffer_size(), | |
765 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
766 kNoErrors, frame_data))); | |
767 delete packet; | |
768 | |
769 packet_header_.type.Video.isFirstPacket = false; | |
770 vp8_header_->partitionId = 2; | |
771 vp8_header_->beginningOfPartition = true; | |
772 packet_header_.header.markerBit = false; | |
773 packet_header_.header.sequenceNumber += 1; | |
774 FillPacket(6); | |
775 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
776 EXPECT_EQ(packet_buffer_size(), | |
777 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
778 kNoErrors, frame_data))); | |
779 delete packet; | |
780 | |
781 packet_header_.type.Video.isFirstPacket = false; | |
782 vp8_header_->partitionId = 2; | |
783 vp8_header_->beginningOfPartition = false; | |
784 packet_header_.header.markerBit = true; | |
785 packet_header_.header.sequenceNumber += 1; | |
786 FillPacket(7); | |
787 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
788 EXPECT_EQ(packet_buffer_size(), | |
789 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
790 kNoErrors, frame_data))); | |
791 delete packet; | |
792 | |
793 // 2 partitions left. 2 packets removed from second partition | |
794 EXPECT_EQ(4 * packet_buffer_size(), | |
795 session_.BuildVP8FragmentationHeader( | |
796 frame_buffer_, frame_buffer_size(), &fragmentation_)); | |
797 SCOPED_TRACE("Calling VerifyPartition"); | |
798 EXPECT_TRUE(VerifyPartition(0, 2, 1)); | |
799 SCOPED_TRACE("Calling VerifyPartition"); | |
800 EXPECT_TRUE(VerifyPartition(2, 2, 6)); | |
801 } | |
802 | |
803 TEST_F(TestVP8Partitions, AggregationOverTwoPackets) { | |
804 // Partition 0 | Partition 1 | Partition 2 | |
805 // [ 0 | ] [ 1 ] | [ 2 ] | |
806 packet_header_.type.Video.isFirstPacket = true; | |
807 vp8_header_->beginningOfPartition = true; | |
808 vp8_header_->partitionId = 0; | |
809 packet_header_.header.markerBit = false; | |
810 packet_header_.header.sequenceNumber = 0; | |
811 FillPacket(0); | |
812 VCMPacket* packet = | |
813 new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
814 EXPECT_EQ(packet_buffer_size(), | |
815 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
816 kNoErrors, frame_data))); | |
817 delete packet; | |
818 | |
819 packet_header_.type.Video.isFirstPacket = false; | |
820 vp8_header_->partitionId = 1; | |
821 vp8_header_->beginningOfPartition = false; | |
822 packet_header_.header.markerBit = false; | |
823 packet_header_.header.sequenceNumber += 1; | |
824 FillPacket(1); | |
825 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
826 EXPECT_EQ(packet_buffer_size(), | |
827 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
828 kNoErrors, frame_data))); | |
829 delete packet; | |
830 | |
831 packet_header_.type.Video.isFirstPacket = false; | |
832 vp8_header_->partitionId = 2; | |
833 vp8_header_->beginningOfPartition = true; | |
834 packet_header_.header.markerBit = true; | |
835 packet_header_.header.sequenceNumber += 1; | |
836 FillPacket(2); | |
837 packet = new VCMPacket(packet_buffer_, packet_buffer_size(), packet_header_); | |
838 EXPECT_EQ(packet_buffer_size(), | |
839 static_cast<size_t>(session_.InsertPacket(*packet, frame_buffer_, | |
840 kNoErrors, frame_data))); | |
841 delete packet; | |
842 | |
843 // No packets removed. | |
844 EXPECT_EQ(3 * packet_buffer_size(), | |
845 session_.BuildVP8FragmentationHeader( | |
846 frame_buffer_, frame_buffer_size(), &fragmentation_)); | |
847 SCOPED_TRACE("Calling VerifyPartition"); | |
848 EXPECT_TRUE(VerifyPartition(0, 2, 0)); | |
849 // This partition is aggregated in partition 0 | |
850 SCOPED_TRACE("Calling VerifyPartition"); | |
851 EXPECT_TRUE(VerifyPartition(1, 0, 0)); | |
852 SCOPED_TRACE("Calling VerifyPartition"); | |
853 EXPECT_TRUE(VerifyPartition(2, 1, 2)); | |
854 } | |
855 | |
856 TEST_F(TestNalUnits, OnlyReceivedEmptyPacket) { | 386 TEST_F(TestNalUnits, OnlyReceivedEmptyPacket) { |
857 packet_.isFirstPacket = false; | 387 packet_.isFirstPacket = false; |
858 packet_.completeNALU = kNaluComplete; | 388 packet_.completeNALU = kNaluComplete; |
859 packet_.frameType = kEmptyFrame; | 389 packet_.frameType = kEmptyFrame; |
860 packet_.sizeBytes = 0; | 390 packet_.sizeBytes = 0; |
861 packet_.seqNum = 0; | 391 packet_.seqNum = 0; |
862 packet_.markerBit = false; | 392 packet_.markerBit = false; |
863 EXPECT_EQ( | 393 EXPECT_EQ( |
864 0, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); | 394 0, session_.InsertPacket(packet_, frame_buffer_, kNoErrors, frame_data)); |
865 | 395 |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1021 FillPacket(1); | 551 FillPacket(1); |
1022 EXPECT_EQ(packet_buffer_size(), | 552 EXPECT_EQ(packet_buffer_size(), |
1023 static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, | 553 static_cast<size_t>(session_.InsertPacket(packet_, frame_buffer_, |
1024 kNoErrors, frame_data))); | 554 kNoErrors, frame_data))); |
1025 | 555 |
1026 EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable()); | 556 EXPECT_EQ(2 * packet_buffer_size(), session_.MakeDecodable()); |
1027 EXPECT_EQ(0U, session_.SessionLength()); | 557 EXPECT_EQ(0U, session_.SessionLength()); |
1028 } | 558 } |
1029 | 559 |
1030 } // namespace webrtc | 560 } // namespace webrtc |
OLD | NEW |