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

Side by Side Diff: webrtc/video/end_to_end_tests.cc

Issue 2672373002: Revert of Improve and re-enable FEC end-to-end tests. (Closed)
Patch Set: Created 3 years, 10 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 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 #include <algorithm> 10 #include <algorithm>
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 596
597 uint32_t local_ssrc_; 597 uint32_t local_ssrc_;
598 uint32_t remote_ssrc_; 598 uint32_t remote_ssrc_;
599 Transport* receive_transport_; 599 Transport* receive_transport_;
600 rtc::Optional<uint16_t> sequence_number_to_retransmit_; 600 rtc::Optional<uint16_t> sequence_number_to_retransmit_;
601 } test; 601 } test;
602 602
603 RunBaseTest(&test); 603 RunBaseTest(&test);
604 } 604 }
605 605
606 TEST_P(EndToEndTest, ReceivesUlpfec) { 606 // Disable due to failure, see bugs.webrtc.org/7050 for
607 // details.
608 TEST_P(EndToEndTest, DISABLED_CanReceiveUlpfec) {
607 class UlpfecRenderObserver : public test::EndToEndTest, 609 class UlpfecRenderObserver : public test::EndToEndTest,
608 public rtc::VideoSinkInterface<VideoFrame> { 610 public rtc::VideoSinkInterface<VideoFrame> {
609 public: 611 public:
610 UlpfecRenderObserver() 612 UlpfecRenderObserver()
611 : EndToEndTest(kDefaultTimeoutMs), 613 : EndToEndTest(kDefaultTimeoutMs), state_(kFirstPacket) {}
612 random_(0xcafef00d1),
613 num_packets_sent_(0) {}
614 614
615 private: 615 private:
616 Action OnSendRtp(const uint8_t* packet, size_t length) override { 616 Action OnSendRtp(const uint8_t* packet, size_t length) override {
617 rtc::CritScope lock(&crit_); 617 rtc::CritScope lock(&crit_);
618 RTPHeader header; 618 RTPHeader header;
619 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 619 EXPECT_TRUE(parser_->Parse(packet, length, &header));
620 620
621 EXPECT_TRUE(header.payloadType == kFakeVideoSendPayloadType ||
622 header.payloadType == kRedPayloadType)
623 << "Unknown payload type received.";
624 EXPECT_EQ(kVideoSendSsrcs[0], header.ssrc) << "Unknown SSRC received.";
625
626 // Parse RED header.
627 int encapsulated_payload_type = -1; 621 int encapsulated_payload_type = -1;
628 if (header.payloadType == kRedPayloadType) { 622 if (header.payloadType == kRedPayloadType) {
629 encapsulated_payload_type = 623 encapsulated_payload_type =
630 static_cast<int>(packet[header.headerLength]); 624 static_cast<int>(packet[header.headerLength]);
631 625 if (encapsulated_payload_type != kFakeVideoSendPayloadType)
632 EXPECT_TRUE(encapsulated_payload_type == kFakeVideoSendPayloadType || 626 EXPECT_EQ(kUlpfecPayloadType, encapsulated_payload_type);
633 encapsulated_payload_type == kUlpfecPayloadType) 627 } else {
634 << "Unknown encapsulated payload type received."; 628 EXPECT_EQ(kFakeVideoSendPayloadType, header.payloadType);
635 } 629 }
636 630
637 // To reduce test flakiness, always let ULPFEC packets through. 631 if (protected_sequence_numbers_.count(header.sequenceNumber) != 0) {
638 if (encapsulated_payload_type == kUlpfecPayloadType) { 632 // Retransmitted packet, should not count.
633 protected_sequence_numbers_.erase(header.sequenceNumber);
634 auto ts_it = protected_timestamps_.find(header.timestamp);
635 EXPECT_NE(ts_it, protected_timestamps_.end());
636 protected_timestamps_.erase(ts_it);
639 return SEND_PACKET; 637 return SEND_PACKET;
640 } 638 }
641 639
642 // Simulate 5% video packet loss after rampup period. Record the 640 switch (state_) {
643 // corresponding timestamps that were dropped. 641 case kFirstPacket:
644 if (num_packets_sent_++ > 100 && random_.Rand(1, 100) <= 5) { 642 state_ = kDropEveryOtherPacketUntilUlpfec;
645 if (encapsulated_payload_type == kFakeVideoSendPayloadType) { 643 break;
646 dropped_sequence_numbers_.insert(header.sequenceNumber); 644 case kDropEveryOtherPacketUntilUlpfec:
647 dropped_timestamps_.insert(header.timestamp); 645 if (encapsulated_payload_type == kUlpfecPayloadType) {
648 } 646 state_ = kDropNextMediaPacket;
649 647 return SEND_PACKET;
650 return DROP_PACKET; 648 }
649 if (header.sequenceNumber % 2 == 0)
650 return DROP_PACKET;
651 break;
652 case kDropNextMediaPacket:
653 if (encapsulated_payload_type == kFakeVideoSendPayloadType) {
654 protected_sequence_numbers_.insert(header.sequenceNumber);
655 protected_timestamps_.insert(header.timestamp);
656 state_ = kDropEveryOtherPacketUntilUlpfec;
657 return DROP_PACKET;
658 }
659 break;
651 } 660 }
652 661
653 return SEND_PACKET; 662 return SEND_PACKET;
654 } 663 }
655 664
656 void OnFrame(const VideoFrame& video_frame) override { 665 void OnFrame(const VideoFrame& video_frame) override {
657 rtc::CritScope lock(&crit_); 666 rtc::CritScope lock(&crit_);
658 // Rendering frame with timestamp of packet that was dropped -> FEC 667 // Rendering frame with timestamp of packet that was dropped -> FEC
659 // protection worked. 668 // protection worked.
660 auto it = dropped_timestamps_.find(video_frame.timestamp()); 669 if (protected_timestamps_.count(video_frame.timestamp()) != 0)
661 if (it != dropped_timestamps_.end()) {
662 observation_complete_.Set(); 670 observation_complete_.Set();
663 }
664 } 671 }
665 672
673 enum {
674 kFirstPacket,
675 kDropEveryOtherPacketUntilUlpfec,
676 kDropNextMediaPacket,
677 } state_;
678
666 void ModifyVideoConfigs( 679 void ModifyVideoConfigs(
667 VideoSendStream::Config* send_config, 680 VideoSendStream::Config* send_config,
668 std::vector<VideoReceiveStream::Config>* receive_configs, 681 std::vector<VideoReceiveStream::Config>* receive_configs,
669 VideoEncoderConfig* encoder_config) override { 682 VideoEncoderConfig* encoder_config) override {
670 send_config->rtp.extensions.push_back( 683 // TODO(pbos): Run this test with combined NACK/ULPFEC enabled as well.
671 RtpExtension(RtpExtension::kTransportSequenceNumberUri, 684 // int rtp_history_ms = 1000;
672 test::kTransportSequenceNumberExtensionId)); 685 // (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms;
686 // send_config->rtp.nack.rtp_history_ms = rtp_history_ms;
673 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType; 687 send_config->rtp.ulpfec.red_payload_type = kRedPayloadType;
674 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; 688 send_config->rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
675 689
676 (*receive_configs)[0].rtp.transport_cc = true;
677 (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType; 690 (*receive_configs)[0].rtp.ulpfec.red_payload_type = kRedPayloadType;
678 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType; 691 (*receive_configs)[0].rtp.ulpfec.ulpfec_payload_type = kUlpfecPayloadType;
679 (*receive_configs)[0].renderer = this; 692 (*receive_configs)[0].renderer = this;
680 } 693 }
681 694
682 void PerformTest() override { 695 void PerformTest() override {
683 EXPECT_TRUE(Wait()) 696 EXPECT_TRUE(Wait())
684 << "Timed out waiting for dropped frames to be rendered."; 697 << "Timed out waiting for dropped frames to be rendered.";
685 } 698 }
686 699
687 rtc::CriticalSection crit_; 700 rtc::CriticalSection crit_;
688 std::set<uint32_t> dropped_sequence_numbers_ GUARDED_BY(crit_); 701 std::set<uint32_t> protected_sequence_numbers_ GUARDED_BY(crit_);
689 // Several packets can have the same timestamp. 702 // Since several packets can have the same timestamp a multiset is used
690 std::multiset<uint32_t> dropped_timestamps_ GUARDED_BY(crit_); 703 // instead of a set.
691 Random random_; 704 std::multiset<uint32_t> protected_timestamps_ GUARDED_BY(crit_);
692 int num_packets_sent_;
693 } test; 705 } test;
694 706
695 RunBaseTest(&test); 707 RunBaseTest(&test);
696 } 708 }
697 709
698 class FlexfecRenderObserver : public test::EndToEndTest, 710 class FlexfecRenderObserver : public test::EndToEndTest,
699 public rtc::VideoSinkInterface<VideoFrame> { 711 public rtc::VideoSinkInterface<VideoFrame> {
700 public: 712 public:
701 static constexpr uint32_t kVideoLocalSsrc = 123; 713 static constexpr uint32_t kVideoLocalSsrc = 123;
702 static constexpr uint32_t kFlexfecLocalSsrc = 456; 714 static constexpr uint32_t kFlexfecLocalSsrc = 456;
703 715
704 explicit FlexfecRenderObserver(bool enable_nack, bool expect_flexfec_rtcp) 716 explicit FlexfecRenderObserver(bool expect_flexfec_rtcp)
705 : test::EndToEndTest(test::CallTest::kDefaultTimeoutMs), 717 : test::EndToEndTest(test::CallTest::kDefaultTimeoutMs),
706 enable_nack_(enable_nack),
707 expect_flexfec_rtcp_(expect_flexfec_rtcp), 718 expect_flexfec_rtcp_(expect_flexfec_rtcp),
708 received_flexfec_rtcp_(false), 719 received_flexfec_rtcp_(false),
709 random_(0xcafef00d1), 720 random_(0xcafef00d1) {}
710 num_packets_sent_(0) {}
711 721
712 size_t GetNumFlexfecStreams() const override { return 1; } 722 size_t GetNumFlexfecStreams() const override { return 1; }
713 723
714 private: 724 private:
715 Action OnSendRtp(const uint8_t* packet, size_t length) override { 725 Action OnSendRtp(const uint8_t* packet, size_t length) override {
716 rtc::CritScope lock(&crit_); 726 rtc::CritScope lock(&crit_);
717 RTPHeader header; 727 RTPHeader header;
718 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 728 EXPECT_TRUE(parser_->Parse(packet, length, &header));
719 729
720 EXPECT_TRUE(header.payloadType == 730 uint8_t payload_type = header.payloadType;
721 test::CallTest::kFakeVideoSendPayloadType || 731 if (payload_type != test::CallTest::kFakeVideoSendPayloadType) {
722 header.payloadType == test::CallTest::kFlexfecPayloadType || 732 EXPECT_EQ(test::CallTest::kFlexfecPayloadType, payload_type);
723 (enable_nack_ &&
724 header.payloadType == test::CallTest::kSendRtxPayloadType))
725 << "Unknown payload type received.";
726 EXPECT_TRUE(
727 header.ssrc == test::CallTest::kVideoSendSsrcs[0] ||
728 header.ssrc == test::CallTest::kFlexfecSendSsrc ||
729 (enable_nack_ && header.ssrc == test::CallTest::kSendRtxSsrcs[0]))
730 << "Unknown SSRC received.";
731
732 // To reduce test flakiness, always let FlexFEC packets through.
733 if (header.payloadType == test::CallTest::kFlexfecPayloadType) {
734 EXPECT_EQ(test::CallTest::kFlexfecSendSsrc, header.ssrc);
735
736 return SEND_PACKET;
737 } 733 }
738 734
739 // To reduce test flakiness, always let RTX packets through. 735 // Is this a retransmitted media packet? From the perspective of FEC, this
740 if (header.payloadType == test::CallTest::kSendRtxPayloadType) { 736 // packet is then no longer dropped, so remove it from the list of
741 EXPECT_EQ(test::CallTest::kSendRtxSsrcs[0], header.ssrc); 737 // dropped packets.
742 738 if (payload_type == test::CallTest::kFakeVideoSendPayloadType) {
743 // Parse RTX header. 739 auto seq_num_it = dropped_sequence_numbers_.find(header.sequenceNumber);
744 uint16_t original_sequence_number =
745 ByteReader<uint16_t>::ReadBigEndian(&packet[header.headerLength]);
746
747 // From the perspective of FEC, a retransmitted packet is no longer
748 // dropped, so remove it from list of dropped packets.
749 auto seq_num_it =
750 dropped_sequence_numbers_.find(original_sequence_number);
751 if (seq_num_it != dropped_sequence_numbers_.end()) { 740 if (seq_num_it != dropped_sequence_numbers_.end()) {
752 dropped_sequence_numbers_.erase(seq_num_it); 741 dropped_sequence_numbers_.erase(seq_num_it);
753 auto ts_it = dropped_timestamps_.find(header.timestamp); 742 auto ts_it = dropped_timestamps_.find(header.timestamp);
754 EXPECT_NE(ts_it, dropped_timestamps_.end()); 743 EXPECT_NE(ts_it, dropped_timestamps_.end());
755 dropped_timestamps_.erase(ts_it); 744 dropped_timestamps_.erase(ts_it);
745
746 return SEND_PACKET;
756 } 747 }
757
758 return SEND_PACKET;
759 } 748 }
760 749
761 // Simulate 5% video packet loss after rampup period. Record the 750 // Simulate 5% packet loss. Record what media packets, and corresponding
762 // corresponding timestamps that were dropped. 751 // timestamps, that were dropped.
763 if (num_packets_sent_++ > 100 && random_.Rand(1, 100) <= 5) { 752 if (random_.Rand(1, 100) <= 5) {
764 EXPECT_EQ(test::CallTest::kFakeVideoSendPayloadType, header.payloadType); 753 if (payload_type == test::CallTest::kFakeVideoSendPayloadType) {
765 EXPECT_EQ(test::CallTest::kVideoSendSsrcs[0], header.ssrc); 754 dropped_sequence_numbers_.insert(header.sequenceNumber);
766 755 dropped_timestamps_.insert(header.timestamp);
767 dropped_sequence_numbers_.insert(header.sequenceNumber); 756 }
768 dropped_timestamps_.insert(header.timestamp);
769 757
770 return DROP_PACKET; 758 return DROP_PACKET;
771 } 759 }
772 760
773 return SEND_PACKET; 761 return SEND_PACKET;
774 } 762 }
775 763
776 Action OnReceiveRtcp(const uint8_t* data, size_t length) override { 764 Action OnReceiveRtcp(const uint8_t* data, size_t length) override {
777 test::RtcpPacketParser parser; 765 test::RtcpPacketParser parser;
778 766
779 parser.Parse(data, length); 767 parser.Parse(data, length);
780 if (parser.sender_ssrc() == kFlexfecLocalSsrc) { 768 if (parser.sender_ssrc() == kFlexfecLocalSsrc) {
781 EXPECT_EQ(1, parser.receiver_report()->num_packets()); 769 EXPECT_EQ(1, parser.receiver_report()->num_packets());
782 const std::vector<rtcp::ReportBlock>& report_blocks = 770 const std::vector<rtcp::ReportBlock>& report_blocks =
783 parser.receiver_report()->report_blocks(); 771 parser.receiver_report()->report_blocks();
784 if (!report_blocks.empty()) { 772 if (!report_blocks.empty()) {
785 EXPECT_EQ(1U, report_blocks.size()); 773 EXPECT_EQ(1U, report_blocks.size());
786 EXPECT_EQ(test::CallTest::kFlexfecSendSsrc, 774 EXPECT_EQ(test::CallTest::kFlexfecSendSsrc,
787 report_blocks[0].source_ssrc()); 775 report_blocks[0].source_ssrc());
788 rtc::CritScope lock(&crit_); 776 rtc::CritScope lock(&crit_);
789 received_flexfec_rtcp_ = true; 777 received_flexfec_rtcp_ = true;
790 } 778 }
791 } 779 }
792 780
793 return SEND_PACKET; 781 return SEND_PACKET;
794 } 782 }
795 783
796 test::PacketTransport* CreateSendTransport(Call* sender_call) override {
797 // At low RTT (< kLowRttNackMs) -> NACK only, no FEC.
798 const int kNetworkDelayMs = 100;
799 FakeNetworkPipe::Config config;
800 config.queue_delay_ms = kNetworkDelayMs;
801 return new test::PacketTransport(sender_call, this,
802 test::PacketTransport::kSender, config);
803 }
804
805 void OnFrame(const VideoFrame& video_frame) override { 784 void OnFrame(const VideoFrame& video_frame) override {
806 rtc::CritScope lock(&crit_); 785 rtc::CritScope lock(&crit_);
807 // Rendering frame with timestamp of packet that was dropped -> FEC 786 // Rendering frame with timestamp of packet that was dropped -> FEC
808 // protection worked. 787 // protection worked.
809 auto it = dropped_timestamps_.find(video_frame.timestamp()); 788 auto it = dropped_timestamps_.find(video_frame.timestamp());
810 if (it != dropped_timestamps_.end()) { 789 if (it != dropped_timestamps_.end()) {
811 if (!expect_flexfec_rtcp_ || received_flexfec_rtcp_) { 790 if (!expect_flexfec_rtcp_ || received_flexfec_rtcp_) {
812 observation_complete_.Set(); 791 observation_complete_.Set();
813 } 792 }
814 } 793 }
815 } 794 }
816 795
817 void ModifyVideoConfigs( 796 void ModifyVideoConfigs(
818 VideoSendStream::Config* send_config, 797 VideoSendStream::Config* send_config,
819 std::vector<VideoReceiveStream::Config>* receive_configs, 798 std::vector<VideoReceiveStream::Config>* receive_configs,
820 VideoEncoderConfig* encoder_config) override { 799 VideoEncoderConfig* encoder_config) override {
821 send_config->rtp.extensions.push_back(
822 RtpExtension(RtpExtension::kTransportSequenceNumberUri,
823 test::kTransportSequenceNumberExtensionId));
824
825 (*receive_configs)[0].rtp.local_ssrc = kVideoLocalSsrc; 800 (*receive_configs)[0].rtp.local_ssrc = kVideoLocalSsrc;
826 (*receive_configs)[0].rtp.transport_cc = true;
827 (*receive_configs)[0].renderer = this; 801 (*receive_configs)[0].renderer = this;
828
829 if (enable_nack_) {
830 send_config->rtp.nack.rtp_history_ms = test::CallTest::kNackRtpHistoryMs;
831 send_config->rtp.ulpfec.red_rtx_payload_type =
832 test::CallTest::kRtxRedPayloadType;
833 send_config->rtp.rtx.ssrcs.push_back(test::CallTest::kSendRtxSsrcs[0]);
834 send_config->rtp.rtx.payload_type = test::CallTest::kSendRtxPayloadType;
835
836 (*receive_configs)[0].rtp.nack.rtp_history_ms =
837 test::CallTest::kNackRtpHistoryMs;
838 (*receive_configs)[0].rtp.ulpfec.red_rtx_payload_type =
839 test::CallTest::kRtxRedPayloadType;
840
841 (*receive_configs)[0].rtp.rtx_ssrc = test::CallTest::kSendRtxSsrcs[0];
842 (*receive_configs)[0]
843 .rtp.rtx_payload_types[test::CallTest::kVideoSendPayloadType] =
844 test::CallTest::kSendRtxPayloadType;
845 }
846 } 802 }
847 803
848 void ModifyFlexfecConfigs( 804 void ModifyFlexfecConfigs(
849 std::vector<FlexfecReceiveStream::Config>* receive_configs) override { 805 std::vector<FlexfecReceiveStream::Config>* receive_configs) override {
850 (*receive_configs)[0].local_ssrc = kFlexfecLocalSsrc; 806 (*receive_configs)[0].local_ssrc = kFlexfecLocalSsrc;
851 } 807 }
852 808
853 void PerformTest() override { 809 void PerformTest() override {
854 EXPECT_TRUE(Wait()) 810 EXPECT_TRUE(Wait())
855 << "Timed out waiting for dropped frames to be rendered."; 811 << "Timed out waiting for dropped frames to be rendered.";
856 } 812 }
857 813
858 rtc::CriticalSection crit_; 814 rtc::CriticalSection crit_;
859 std::set<uint32_t> dropped_sequence_numbers_ GUARDED_BY(crit_); 815 std::set<uint32_t> dropped_sequence_numbers_ GUARDED_BY(crit_);
860 // Several packets can have the same timestamp. 816 // Since several packets can have the same timestamp a multiset is used
817 // instead of a set.
861 std::multiset<uint32_t> dropped_timestamps_ GUARDED_BY(crit_); 818 std::multiset<uint32_t> dropped_timestamps_ GUARDED_BY(crit_);
862 const bool enable_nack_;
863 const bool expect_flexfec_rtcp_; 819 const bool expect_flexfec_rtcp_;
864 bool received_flexfec_rtcp_ GUARDED_BY(crit_); 820 bool received_flexfec_rtcp_ GUARDED_BY(crit_);
865 Random random_; 821 Random random_;
866 int num_packets_sent_;
867 }; 822 };
868 823
869 TEST_P(EndToEndTest, RecoversWithFlexfec) { 824 // Disable due to failure, see bugs.webrtc.org/7050 for
870 FlexfecRenderObserver test(false, false); 825 // details.
826 TEST_P(EndToEndTest, DISABLED_ReceivesFlexfec) {
827 FlexfecRenderObserver test(false);
871 RunBaseTest(&test); 828 RunBaseTest(&test);
872 } 829 }
873 830
874 TEST_P(EndToEndTest, RecoversWithFlexfecAndNack) { 831 // Disable due to failure, see bugs.webrtc.org/7050 for
875 FlexfecRenderObserver test(true, false); 832 // details.
833 TEST_P(EndToEndTest, DISABLED_ReceivesFlexfecAndSendsCorrespondingRtcp) {
834 FlexfecRenderObserver test(true);
876 RunBaseTest(&test); 835 RunBaseTest(&test);
877 } 836 }
878 837
879 TEST_P(EndToEndTest, RecoversWithFlexfecAndSendsCorrespondingRtcp) {
880 FlexfecRenderObserver test(false, true);
881 RunBaseTest(&test);
882 }
883
884 TEST_P(EndToEndTest, ReceivedUlpfecPacketsNotNacked) { 838 TEST_P(EndToEndTest, ReceivedUlpfecPacketsNotNacked) {
885 class UlpfecNackObserver : public test::EndToEndTest { 839 class UlpfecNackObserver : public test::EndToEndTest {
886 public: 840 public:
887 UlpfecNackObserver() 841 UlpfecNackObserver()
888 : EndToEndTest(kDefaultTimeoutMs), 842 : EndToEndTest(kDefaultTimeoutMs),
889 state_(kFirstPacket), 843 state_(kFirstPacket),
890 ulpfec_sequence_number_(0), 844 ulpfec_sequence_number_(0),
891 has_last_sequence_number_(false), 845 has_last_sequence_number_(false),
892 last_sequence_number_(0), 846 last_sequence_number_(0),
893 encoder_(VP8Encoder::Create()), 847 encoder_(VP8Encoder::Create()),
(...skipping 3285 matching lines...) Expand 10 before | Expand all | Expand 10 after
4179 std::unique_ptr<VideoEncoder> encoder_; 4133 std::unique_ptr<VideoEncoder> encoder_;
4180 std::unique_ptr<VideoDecoder> decoder_; 4134 std::unique_ptr<VideoDecoder> decoder_;
4181 rtc::CriticalSection crit_; 4135 rtc::CriticalSection crit_;
4182 int recorded_frames_ GUARDED_BY(crit_); 4136 int recorded_frames_ GUARDED_BY(crit_);
4183 } test(this); 4137 } test(this);
4184 4138
4185 RunBaseTest(&test); 4139 RunBaseTest(&test);
4186 } 4140 }
4187 4141
4188 } // namespace webrtc 4142 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698