OLD | NEW |
1 /* | 1 /* |
2 * libjingle | 2 * libjingle |
3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are met: | 6 * modification, are permitted provided that the following conditions are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright notice, | 8 * 1. Redistributions of source code must retain the above copyright notice, |
9 * this list of conditions and the following disclaimer. | 9 * this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright notice, | 10 * 2. Redistributions in binary form must reproduce the above copyright notice, |
(...skipping 838 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 // EXPECT_EQ(0, info.receivers[0].packets_concealed); | 849 // EXPECT_EQ(0, info.receivers[0].packets_concealed); |
850 EXPECT_EQ(0, info.receivers[0].firs_sent); | 850 EXPECT_EQ(0, info.receivers[0].firs_sent); |
851 EXPECT_EQ(0, info.receivers[0].plis_sent); | 851 EXPECT_EQ(0, info.receivers[0].plis_sent); |
852 EXPECT_EQ(0, info.receivers[0].nacks_sent); | 852 EXPECT_EQ(0, info.receivers[0].nacks_sent); |
853 EXPECT_EQ(DefaultCodec().width, info.receivers[0].frame_width); | 853 EXPECT_EQ(DefaultCodec().width, info.receivers[0].frame_width); |
854 EXPECT_EQ(DefaultCodec().height, info.receivers[0].frame_height); | 854 EXPECT_EQ(DefaultCodec().height, info.receivers[0].frame_height); |
855 EXPECT_GT(info.receivers[0].framerate_rcvd, 0); | 855 EXPECT_GT(info.receivers[0].framerate_rcvd, 0); |
856 EXPECT_GT(info.receivers[0].framerate_decoded, 0); | 856 EXPECT_GT(info.receivers[0].framerate_decoded, 0); |
857 EXPECT_GT(info.receivers[0].framerate_output, 0); | 857 EXPECT_GT(info.receivers[0].framerate_output, 0); |
858 } | 858 } |
| 859 |
| 860 cricket::VideoSenderInfo GetSenderStats(size_t i) { |
| 861 cricket::VideoMediaInfo info; |
| 862 EXPECT_TRUE(channel_->GetStats(&info)); |
| 863 return info.senders[i]; |
| 864 } |
| 865 |
| 866 cricket::VideoReceiverInfo GetReceiverStats(size_t i) { |
| 867 cricket::VideoMediaInfo info; |
| 868 EXPECT_TRUE(channel_->GetStats(&info)); |
| 869 return info.receivers[i]; |
| 870 } |
| 871 |
859 // Test that stats work properly for a conf call with multiple recv streams. | 872 // Test that stats work properly for a conf call with multiple recv streams. |
860 void GetStatsMultipleRecvStreams() { | 873 void GetStatsMultipleRecvStreams() { |
861 cricket::FakeVideoRenderer renderer1, renderer2; | 874 cricket::FakeVideoRenderer renderer1, renderer2; |
862 EXPECT_TRUE(SetOneCodec(DefaultCodec())); | 875 EXPECT_TRUE(SetOneCodec(DefaultCodec())); |
863 cricket::VideoOptions vmo; | 876 cricket::VideoOptions vmo; |
864 vmo.conference_mode.Set(true); | 877 vmo.conference_mode.Set(true); |
865 EXPECT_TRUE(channel_->SetOptions(vmo)); | 878 EXPECT_TRUE(channel_->SetOptions(vmo)); |
866 EXPECT_TRUE(SetSend(true)); | 879 EXPECT_TRUE(SetSend(true)); |
867 EXPECT_TRUE(channel_->AddRecvStream( | 880 EXPECT_TRUE(channel_->AddRecvStream( |
868 cricket::StreamParams::CreateLegacy(1))); | 881 cricket::StreamParams::CreateLegacy(1))); |
869 EXPECT_TRUE(channel_->AddRecvStream( | 882 EXPECT_TRUE(channel_->AddRecvStream( |
870 cricket::StreamParams::CreateLegacy(2))); | 883 cricket::StreamParams::CreateLegacy(2))); |
871 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1)); | 884 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1)); |
872 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2)); | 885 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2)); |
873 EXPECT_TRUE(channel_->SetRender(true)); | 886 EXPECT_TRUE(channel_->SetRender(true)); |
874 EXPECT_EQ(0, renderer1.num_rendered_frames()); | 887 EXPECT_EQ(0, renderer1.num_rendered_frames()); |
875 EXPECT_EQ(0, renderer2.num_rendered_frames()); | 888 EXPECT_EQ(0, renderer2.num_rendered_frames()); |
876 std::vector<uint32> ssrcs; | 889 std::vector<uint32> ssrcs; |
877 ssrcs.push_back(1); | 890 ssrcs.push_back(1); |
878 ssrcs.push_back(2); | 891 ssrcs.push_back(2); |
879 network_interface_.SetConferenceMode(true, ssrcs); | 892 network_interface_.SetConferenceMode(true, ssrcs); |
880 EXPECT_TRUE(SendFrame()); | 893 EXPECT_TRUE(SendFrame()); |
881 EXPECT_FRAME_ON_RENDERER_WAIT( | 894 EXPECT_FRAME_ON_RENDERER_WAIT( |
882 renderer1, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); | 895 renderer1, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); |
883 EXPECT_FRAME_ON_RENDERER_WAIT( | 896 EXPECT_FRAME_ON_RENDERER_WAIT( |
884 renderer2, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); | 897 renderer2, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); |
| 898 |
| 899 EXPECT_TRUE(channel_->SetSend(false)); |
| 900 |
885 cricket::VideoMediaInfo info; | 901 cricket::VideoMediaInfo info; |
886 EXPECT_TRUE(channel_->GetStats(&info)); | 902 EXPECT_TRUE(channel_->GetStats(&info)); |
887 | |
888 ASSERT_EQ(1U, info.senders.size()); | 903 ASSERT_EQ(1U, info.senders.size()); |
889 // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload? | 904 // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload? |
890 // For webrtc, bytes_sent does not include the RTP header length. | 905 // For webrtc, bytes_sent does not include the RTP header length. |
891 EXPECT_GT(info.senders[0].bytes_sent, 0); | 906 EXPECT_GT(GetSenderStats(0).bytes_sent, 0); |
892 EXPECT_EQ(NumRtpPackets(), info.senders[0].packets_sent); | 907 EXPECT_EQ_WAIT(NumRtpPackets(), GetSenderStats(0).packets_sent, kTimeout); |
893 EXPECT_EQ(DefaultCodec().width, info.senders[0].send_frame_width); | 908 EXPECT_EQ(DefaultCodec().width, GetSenderStats(0).send_frame_width); |
894 EXPECT_EQ(DefaultCodec().height, info.senders[0].send_frame_height); | 909 EXPECT_EQ(DefaultCodec().height, GetSenderStats(0).send_frame_height); |
895 | 910 |
896 ASSERT_EQ(2U, info.receivers.size()); | 911 ASSERT_EQ(2U, info.receivers.size()); |
897 for (size_t i = 0; i < info.receivers.size(); ++i) { | 912 for (size_t i = 0; i < info.receivers.size(); ++i) { |
898 EXPECT_EQ(1U, info.receivers[i].ssrcs().size()); | 913 EXPECT_EQ(1U, GetReceiverStats(i).ssrcs().size()); |
899 EXPECT_EQ(i + 1, info.receivers[i].ssrcs()[0]); | 914 EXPECT_EQ(i + 1, GetReceiverStats(i).ssrcs()[0]); |
900 EXPECT_EQ(NumRtpBytes(), info.receivers[i].bytes_rcvd); | 915 EXPECT_EQ_WAIT(NumRtpBytes(), GetReceiverStats(i).bytes_rcvd, kTimeout); |
901 EXPECT_EQ(NumRtpPackets(), info.receivers[i].packets_rcvd); | 916 EXPECT_EQ_WAIT(NumRtpPackets(), GetReceiverStats(i).packets_rcvd, |
902 EXPECT_EQ(DefaultCodec().width, info.receivers[i].frame_width); | 917 kTimeout); |
903 EXPECT_EQ(DefaultCodec().height, info.receivers[i].frame_height); | 918 EXPECT_EQ(DefaultCodec().width, GetReceiverStats(i).frame_width); |
| 919 EXPECT_EQ(DefaultCodec().height, GetReceiverStats(i).frame_height); |
904 } | 920 } |
905 } | 921 } |
906 // Test that stats work properly for a conf call with multiple send streams. | 922 // Test that stats work properly for a conf call with multiple send streams. |
907 void GetStatsMultipleSendStreams() { | 923 void GetStatsMultipleSendStreams() { |
908 // Normal setup; note that we set the SSRC explicitly to ensure that | 924 // Normal setup; note that we set the SSRC explicitly to ensure that |
909 // it will come first in the senders map. | 925 // it will come first in the senders map. |
910 EXPECT_TRUE(SetOneCodec(DefaultCodec())); | 926 EXPECT_TRUE(SetOneCodec(DefaultCodec())); |
911 cricket::VideoOptions vmo; | 927 cricket::VideoOptions vmo; |
912 vmo.conference_mode.Set(true); | 928 vmo.conference_mode.Set(true); |
913 EXPECT_TRUE(channel_->SetOptions(vmo)); | 929 EXPECT_TRUE(channel_->SetOptions(vmo)); |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1049 } | 1065 } |
1050 | 1066 |
1051 // Tests setting up and configuring a send stream. | 1067 // Tests setting up and configuring a send stream. |
1052 void AddRemoveSendStreams() { | 1068 void AddRemoveSendStreams() { |
1053 EXPECT_TRUE(SetOneCodec(DefaultCodec())); | 1069 EXPECT_TRUE(SetOneCodec(DefaultCodec())); |
1054 EXPECT_TRUE(SetSend(true)); | 1070 EXPECT_TRUE(SetSend(true)); |
1055 EXPECT_TRUE(channel_->SetRender(true)); | 1071 EXPECT_TRUE(channel_->SetRender(true)); |
1056 EXPECT_TRUE(channel_->SetRenderer(kDefaultReceiveSsrc, &renderer_)); | 1072 EXPECT_TRUE(channel_->SetRenderer(kDefaultReceiveSsrc, &renderer_)); |
1057 EXPECT_TRUE(SendFrame()); | 1073 EXPECT_TRUE(SendFrame()); |
1058 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout); | 1074 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout); |
1059 EXPECT_GE(2, NumRtpPackets()); | 1075 EXPECT_GT(NumRtpPackets(), 0); |
1060 uint32 ssrc = 0; | 1076 uint32 ssrc = 0; |
1061 size_t last_packet = NumRtpPackets() - 1; | 1077 size_t last_packet = NumRtpPackets() - 1; |
1062 rtc::scoped_ptr<const rtc::Buffer> | 1078 rtc::scoped_ptr<const rtc::Buffer> |
1063 p(GetRtpPacket(static_cast<int>(last_packet))); | 1079 p(GetRtpPacket(static_cast<int>(last_packet))); |
1064 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); | 1080 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); |
1065 EXPECT_EQ(kSsrc, ssrc); | 1081 EXPECT_EQ(kSsrc, ssrc); |
1066 | 1082 |
1067 // Remove the send stream that was added during Setup. | 1083 // Remove the send stream that was added during Setup. |
1068 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); | 1084 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); |
1069 int rtp_packets = NumRtpPackets(); | 1085 int rtp_packets = NumRtpPackets(); |
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1710 | 1726 |
1711 // Two streams one channel tests. | 1727 // Two streams one channel tests. |
1712 | 1728 |
1713 // Tests that we can send and receive frames. | 1729 // Tests that we can send and receive frames. |
1714 void TwoStreamsSendAndReceive(const cricket::VideoCodec& codec) { | 1730 void TwoStreamsSendAndReceive(const cricket::VideoCodec& codec) { |
1715 SetUpSecondStream(); | 1731 SetUpSecondStream(); |
1716 // Test sending and receiving on first stream. | 1732 // Test sending and receiving on first stream. |
1717 SendAndReceive(codec); | 1733 SendAndReceive(codec); |
1718 // Test sending and receiving on second stream. | 1734 // Test sending and receiving on second stream. |
1719 EXPECT_EQ_WAIT(1, renderer2_.num_rendered_frames(), kTimeout); | 1735 EXPECT_EQ_WAIT(1, renderer2_.num_rendered_frames(), kTimeout); |
1720 EXPECT_EQ(2, NumRtpPackets()); | 1736 EXPECT_GT(NumRtpPackets(), 0); |
1721 EXPECT_EQ(1, renderer2_.num_rendered_frames()); | 1737 EXPECT_EQ(1, renderer2_.num_rendered_frames()); |
1722 } | 1738 } |
1723 | 1739 |
1724 // Set up 2 streams where the first stream uses the default channel. | 1740 // Set up 2 streams where the first stream uses the default channel. |
1725 // Then disconnect the first stream and verify default channel becomes | 1741 // Then disconnect the first stream and verify default channel becomes |
1726 // available. | 1742 // available. |
1727 // Then add a new stream with |new_ssrc|. The new stream should re-use the | 1743 // Then add a new stream with |new_ssrc|. The new stream should re-use the |
1728 // default channel. | 1744 // default channel. |
1729 void TwoStreamsReUseFirstStream(const cricket::VideoCodec& codec) { | 1745 void TwoStreamsReUseFirstStream(const cricket::VideoCodec& codec) { |
1730 SetUpSecondStream(); | 1746 SetUpSecondStream(); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1880 rtc::scoped_ptr<C> channel_; | 1896 rtc::scoped_ptr<C> channel_; |
1881 cricket::FakeNetworkInterface network_interface_; | 1897 cricket::FakeNetworkInterface network_interface_; |
1882 cricket::FakeVideoRenderer renderer_; | 1898 cricket::FakeVideoRenderer renderer_; |
1883 cricket::VideoMediaChannel::Error media_error_; | 1899 cricket::VideoMediaChannel::Error media_error_; |
1884 | 1900 |
1885 // Used by test cases where 2 streams are run on the same channel. | 1901 // Used by test cases where 2 streams are run on the same channel. |
1886 cricket::FakeVideoRenderer renderer2_; | 1902 cricket::FakeVideoRenderer renderer2_; |
1887 }; | 1903 }; |
1888 | 1904 |
1889 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT | 1905 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT |
OLD | NEW |