Chromium Code Reviews

Side by Side Diff: talk/media/base/videoengine_unittest.h

Issue 1327933002: Full impl of NnChannel::SetSendParameters and NnChannel::SetRecvParameters (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
OLDNEW
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 445 matching lines...)
456 456
457 virtual void SetUp() { 457 virtual void SetUp() {
458 cricket::Device device("test", "device"); 458 cricket::Device device("test", "device");
459 engine_.Init(); 459 engine_.Init();
460 channel_.reset(engine_.CreateChannel(cricket::VideoOptions(), NULL)); 460 channel_.reset(engine_.CreateChannel(cricket::VideoOptions(), NULL));
461 EXPECT_TRUE(channel_.get() != NULL); 461 EXPECT_TRUE(channel_.get() != NULL);
462 ConnectVideoChannelError(); 462 ConnectVideoChannelError();
463 network_interface_.SetDestination(channel_.get()); 463 network_interface_.SetDestination(channel_.get());
464 channel_->SetInterface(&network_interface_); 464 channel_->SetInterface(&network_interface_);
465 media_error_ = cricket::VideoMediaChannel::ERROR_NONE; 465 media_error_ = cricket::VideoMediaChannel::ERROR_NONE;
466 channel_->SetRecvCodecs(engine_.codecs()); 466 cricket::VideoRecvParameters parameters;
467 parameters.codecs = engine_.codecs();
468 channel_->SetRecvParameters(parameters);
467 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams())); 469 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams()));
468 video_capturer_.reset(CreateFakeVideoCapturer()); 470 video_capturer_.reset(CreateFakeVideoCapturer());
469 cricket::VideoFormat format(640, 480, 471 cricket::VideoFormat format(640, 480,
470 cricket::VideoFormat::FpsToInterval(30), 472 cricket::VideoFormat::FpsToInterval(30),
471 cricket::FOURCC_I420); 473 cricket::FOURCC_I420);
472 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format)); 474 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format));
473 EXPECT_TRUE(channel_->SetCapturer(kSsrc, video_capturer_.get())); 475 EXPECT_TRUE(channel_->SetCapturer(kSsrc, video_capturer_.get()));
474 } 476 }
475 477
476 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() { 478 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() {
(...skipping 40 matching lines...)
517 &VideoMediaChannelTest<E, C>::OnVideoChannelError); 519 &VideoMediaChannelTest<E, C>::OnVideoChannelError);
518 } 520 }
519 bool SetDefaultCodec() { 521 bool SetDefaultCodec() {
520 return SetOneCodec(DefaultCodec()); 522 return SetOneCodec(DefaultCodec());
521 } 523 }
522 524
523 bool SetOneCodec(int pt, const char* name, int w, int h, int fr) { 525 bool SetOneCodec(int pt, const char* name, int w, int h, int fr) {
524 return SetOneCodec(cricket::VideoCodec(pt, name, w, h, fr, 0)); 526 return SetOneCodec(cricket::VideoCodec(pt, name, w, h, fr, 0));
525 } 527 }
526 bool SetOneCodec(const cricket::VideoCodec& codec) { 528 bool SetOneCodec(const cricket::VideoCodec& codec) {
527 std::vector<cricket::VideoCodec> codecs;
528 codecs.push_back(codec);
529
530 cricket::VideoFormat capture_format(codec.width, codec.height, 529 cricket::VideoFormat capture_format(codec.width, codec.height,
531 cricket::VideoFormat::FpsToInterval(codec.framerate), 530 cricket::VideoFormat::FpsToInterval(codec.framerate),
532 cricket::FOURCC_I420); 531 cricket::FOURCC_I420);
533 532
534 if (video_capturer_) { 533 if (video_capturer_) {
535 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(capture_format)); 534 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(capture_format));
536 } 535 }
537 if (video_capturer_2_) { 536 if (video_capturer_2_) {
538 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(capture_format)); 537 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(capture_format));
539 } 538 }
540 539
541 bool sending = channel_->sending(); 540 bool sending = channel_->sending();
542 bool success = SetSend(false); 541 bool success = SetSend(false);
543 if (success) 542 if (success) {
544 success = channel_->SetSendCodecs(codecs); 543 cricket::VideoSendParameters parameters;
545 if (success) 544 parameters.codecs.push_back(codec);
545 success = channel_->SetSendParameters(parameters);
546 }
547 if (success) {
546 success = SetSend(sending); 548 success = SetSend(sending);
549 }
547 return success; 550 return success;
548 } 551 }
549 bool SetSend(bool send) { 552 bool SetSend(bool send) {
550 return channel_->SetSend(send); 553 return channel_->SetSend(send);
551 } 554 }
552 bool SetSendStreamFormat(uint32 ssrc, const cricket::VideoCodec& codec) { 555 bool SetSendStreamFormat(uint32 ssrc, const cricket::VideoCodec& codec) {
553 return channel_->SetSendStreamFormat(ssrc, cricket::VideoFormat( 556 return channel_->SetSendStreamFormat(ssrc, cricket::VideoFormat(
554 codec.width, codec.height, 557 codec.width, codec.height,
555 cricket::VideoFormat::FpsToInterval(codec.framerate), 558 cricket::VideoFormat::FpsToInterval(codec.framerate),
556 cricket::FOURCC_ANY)); 559 cricket::FOURCC_ANY));
(...skipping 290 matching lines...)
847 EXPECT_EQ(DefaultCodec().width, info.receivers[0].frame_width); 850 EXPECT_EQ(DefaultCodec().width, info.receivers[0].frame_width);
848 EXPECT_EQ(DefaultCodec().height, info.receivers[0].frame_height); 851 EXPECT_EQ(DefaultCodec().height, info.receivers[0].frame_height);
849 EXPECT_GT(info.receivers[0].framerate_rcvd, 0); 852 EXPECT_GT(info.receivers[0].framerate_rcvd, 0);
850 EXPECT_GT(info.receivers[0].framerate_decoded, 0); 853 EXPECT_GT(info.receivers[0].framerate_decoded, 0);
851 EXPECT_GT(info.receivers[0].framerate_output, 0); 854 EXPECT_GT(info.receivers[0].framerate_output, 0);
852 } 855 }
853 // Test that stats work properly for a conf call with multiple recv streams. 856 // Test that stats work properly for a conf call with multiple recv streams.
854 void GetStatsMultipleRecvStreams() { 857 void GetStatsMultipleRecvStreams() {
855 cricket::FakeVideoRenderer renderer1, renderer2; 858 cricket::FakeVideoRenderer renderer1, renderer2;
856 EXPECT_TRUE(SetOneCodec(DefaultCodec())); 859 EXPECT_TRUE(SetOneCodec(DefaultCodec()));
857 cricket::VideoOptions vmo; 860 cricket::VideoSendParameters parameters;
858 vmo.conference_mode.Set(true); 861 parameters.options.conference_mode.Set(true);
859 EXPECT_TRUE(channel_->SetOptions(vmo)); 862 EXPECT_TRUE(channel_->SetSendParameters(parameters));
860 EXPECT_TRUE(SetSend(true)); 863 EXPECT_TRUE(SetSend(true));
861 EXPECT_TRUE(channel_->AddRecvStream( 864 EXPECT_TRUE(channel_->AddRecvStream(
862 cricket::StreamParams::CreateLegacy(1))); 865 cricket::StreamParams::CreateLegacy(1)));
863 EXPECT_TRUE(channel_->AddRecvStream( 866 EXPECT_TRUE(channel_->AddRecvStream(
864 cricket::StreamParams::CreateLegacy(2))); 867 cricket::StreamParams::CreateLegacy(2)));
865 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1)); 868 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1));
866 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2)); 869 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2));
867 EXPECT_TRUE(channel_->SetRender(true)); 870 EXPECT_TRUE(channel_->SetRender(true));
868 EXPECT_EQ(0, renderer1.num_rendered_frames()); 871 EXPECT_EQ(0, renderer1.num_rendered_frames());
869 EXPECT_EQ(0, renderer2.num_rendered_frames()); 872 EXPECT_EQ(0, renderer2.num_rendered_frames());
(...skipping 25 matching lines...)
895 EXPECT_EQ(NumRtpPackets(), info.receivers[i].packets_rcvd); 898 EXPECT_EQ(NumRtpPackets(), info.receivers[i].packets_rcvd);
896 EXPECT_EQ(DefaultCodec().width, info.receivers[i].frame_width); 899 EXPECT_EQ(DefaultCodec().width, info.receivers[i].frame_width);
897 EXPECT_EQ(DefaultCodec().height, info.receivers[i].frame_height); 900 EXPECT_EQ(DefaultCodec().height, info.receivers[i].frame_height);
898 } 901 }
899 } 902 }
900 // Test that stats work properly for a conf call with multiple send streams. 903 // Test that stats work properly for a conf call with multiple send streams.
901 void GetStatsMultipleSendStreams() { 904 void GetStatsMultipleSendStreams() {
902 // Normal setup; note that we set the SSRC explicitly to ensure that 905 // Normal setup; note that we set the SSRC explicitly to ensure that
903 // it will come first in the senders map. 906 // it will come first in the senders map.
904 EXPECT_TRUE(SetOneCodec(DefaultCodec())); 907 EXPECT_TRUE(SetOneCodec(DefaultCodec()));
905 cricket::VideoOptions vmo; 908 cricket::VideoSendParameters parameters;
906 vmo.conference_mode.Set(true); 909 parameters.options.conference_mode.Set(true);
907 EXPECT_TRUE(channel_->SetOptions(vmo)); 910 EXPECT_TRUE(channel_->SetSendParameters(parameters));
908 EXPECT_TRUE(channel_->AddRecvStream( 911 EXPECT_TRUE(channel_->AddRecvStream(
909 cricket::StreamParams::CreateLegacy(kSsrc))); 912 cricket::StreamParams::CreateLegacy(kSsrc)));
910 EXPECT_TRUE(channel_->SetRenderer(kSsrc, &renderer_)); 913 EXPECT_TRUE(channel_->SetRenderer(kSsrc, &renderer_));
911 channel_->UpdateAspectRatio(640, 400); 914 channel_->UpdateAspectRatio(640, 400);
912 EXPECT_TRUE(SetSend(true)); 915 EXPECT_TRUE(SetSend(true));
913 EXPECT_TRUE(channel_->SetRender(true)); 916 EXPECT_TRUE(channel_->SetRender(true));
914 EXPECT_TRUE(SendFrame()); 917 EXPECT_TRUE(SendFrame());
915 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); 918 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout);
916 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout); 919 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout);
917 920
(...skipping 44 matching lines...)
962 EXPECT_EQ(1U, info.senders[1].ssrcs().size()); 965 EXPECT_EQ(1U, info.senders[1].ssrcs().size());
963 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]); 966 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]);
964 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width); 967 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width);
965 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height); 968 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height);
966 // The capturer must be unregistered here as it runs out of it's scope next. 969 // The capturer must be unregistered here as it runs out of it's scope next.
967 EXPECT_TRUE(channel_->SetCapturer(5678, NULL)); 970 EXPECT_TRUE(channel_->SetCapturer(5678, NULL));
968 } 971 }
969 972
970 // Test that we can set the bandwidth. 973 // Test that we can set the bandwidth.
971 void SetSendBandwidth() { 974 void SetSendBandwidth() {
972 EXPECT_TRUE(channel_->SetMaxSendBandwidth(-1)); // <= 0 means unlimited. 975 cricket::VideoSendParameters parameters;
973 EXPECT_TRUE(channel_->SetMaxSendBandwidth(128 * 1024)); 976 parameters.max_bandwidth_bps = -1; // <= 0 means unlimited.
977 EXPECT_TRUE(channel_->SetSendParameters(parameters));
978 parameters.max_bandwidth_bps = 128 * 1024;
979 EXPECT_TRUE(channel_->SetSendParameters(parameters));
974 } 980 }
975 // Test that we can set the SSRC for the default send source. 981 // Test that we can set the SSRC for the default send source.
976 void SetSendSsrc() { 982 void SetSendSsrc() {
977 EXPECT_TRUE(SetDefaultCodec()); 983 EXPECT_TRUE(SetDefaultCodec());
978 EXPECT_TRUE(SetSendStreamFormat(kSsrc, DefaultCodec())); 984 EXPECT_TRUE(SetSendStreamFormat(kSsrc, DefaultCodec()));
979 EXPECT_TRUE(SetSend(true)); 985 EXPECT_TRUE(SetSend(true));
980 EXPECT_TRUE(SendFrame()); 986 EXPECT_TRUE(SendFrame());
981 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); 987 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout);
982 uint32 ssrc = 0; 988 uint32 ssrc = 0;
983 rtc::scoped_ptr<const rtc::Buffer> p(GetRtpPacket(0)); 989 rtc::scoped_ptr<const rtc::Buffer> p(GetRtpPacket(0));
(...skipping 85 matching lines...)
1069 // Wait 30ms to guarantee the engine does not drop the frame. 1075 // Wait 30ms to guarantee the engine does not drop the frame.
1070 EXPECT_TRUE(WaitAndSendFrame(30)); 1076 EXPECT_TRUE(WaitAndSendFrame(30));
1071 EXPECT_TRUE_WAIT(NumRtpPackets() > rtp_packets, kTimeout); 1077 EXPECT_TRUE_WAIT(NumRtpPackets() > rtp_packets, kTimeout);
1072 1078
1073 last_packet = NumRtpPackets() - 1; 1079 last_packet = NumRtpPackets() - 1;
1074 p.reset(GetRtpPacket(static_cast<int>(last_packet))); 1080 p.reset(GetRtpPacket(static_cast<int>(last_packet)));
1075 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); 1081 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL);
1076 EXPECT_EQ(789u, ssrc); 1082 EXPECT_EQ(789u, ssrc);
1077 } 1083 }
1078 1084
1079 // Tests adding streams already exists returns false.
1080 void AddRecvStreamsAlreadyExist() {
1081 cricket::VideoOptions vmo;
1082 vmo.conference_mode.Set(true);
1083 EXPECT_TRUE(channel_->SetOptions(vmo));
1084
1085 EXPECT_FALSE(channel_->AddRecvStream(
1086 cricket::StreamParams::CreateLegacy(0)));
1087
1088 EXPECT_TRUE(channel_->AddRecvStream(
1089 cricket::StreamParams::CreateLegacy(1)));
1090 EXPECT_FALSE(channel_->AddRecvStream(
1091 cricket::StreamParams::CreateLegacy(1)));
1092
1093 EXPECT_TRUE(channel_->RemoveRecvStream(1));
1094 EXPECT_FALSE(channel_->AddRecvStream(
1095 cricket::StreamParams::CreateLegacy(0)));
1096 EXPECT_TRUE(channel_->AddRecvStream(
1097 cricket::StreamParams::CreateLegacy(1)));
1098 }
1099
1100 // Tests setting up and configuring multiple incoming streams. 1085 // Tests setting up and configuring multiple incoming streams.
1101 void AddRemoveRecvStreams() { 1086 void AddRemoveRecvStreams() {
1102 cricket::FakeVideoRenderer renderer1, renderer2; 1087 cricket::FakeVideoRenderer renderer1, renderer2;
1103 cricket::VideoOptions vmo; 1088 cricket::VideoSendParameters parameters;
1104 vmo.conference_mode.Set(true); 1089 parameters.options.conference_mode.Set(true);
1105 EXPECT_TRUE(channel_->SetOptions(vmo)); 1090 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1091
1106 // Ensure we can't set the renderer on a non-existent stream. 1092 // Ensure we can't set the renderer on a non-existent stream.
1107 EXPECT_FALSE(channel_->SetRenderer(1, &renderer1)); 1093 EXPECT_FALSE(channel_->SetRenderer(1, &renderer1));
1108 EXPECT_FALSE(channel_->SetRenderer(2, &renderer2)); 1094 EXPECT_FALSE(channel_->SetRenderer(2, &renderer2));
1109 cricket::VideoRenderer* renderer; 1095 cricket::VideoRenderer* renderer;
1110 EXPECT_FALSE(channel_->GetRenderer(1, &renderer)); 1096 EXPECT_FALSE(channel_->GetRenderer(1, &renderer));
1111 EXPECT_FALSE(channel_->GetRenderer(2, &renderer)); 1097 EXPECT_FALSE(channel_->GetRenderer(2, &renderer));
1112 1098
1113 // Ensure we can add streams. 1099 // Ensure we can add streams.
1114 EXPECT_TRUE(channel_->AddRecvStream( 1100 EXPECT_TRUE(channel_->AddRecvStream(
1115 cricket::StreamParams::CreateLegacy(1))); 1101 cricket::StreamParams::CreateLegacy(1)));
(...skipping 109 matching lines...)
1225 EXPECT_GT_FRAME_ON_RENDERER_WAIT( 1211 EXPECT_GT_FRAME_ON_RENDERER_WAIT(
1226 renderer1, 2, DefaultCodec().width, DefaultCodec().height, kTimeout); 1212 renderer1, 2, DefaultCodec().width, DefaultCodec().height, kTimeout);
1227 // Detach |renderer1| before exit as there might be frames come late. 1213 // Detach |renderer1| before exit as there might be frames come late.
1228 EXPECT_TRUE(channel_->SetRenderer(kSsrc, NULL)); 1214 EXPECT_TRUE(channel_->SetRenderer(kSsrc, NULL));
1229 } 1215 }
1230 1216
1231 // Tests the behavior of incoming streams in a conference scenario. 1217 // Tests the behavior of incoming streams in a conference scenario.
1232 void SimulateConference() { 1218 void SimulateConference() {
1233 cricket::FakeVideoRenderer renderer1, renderer2; 1219 cricket::FakeVideoRenderer renderer1, renderer2;
1234 EXPECT_TRUE(SetDefaultCodec()); 1220 EXPECT_TRUE(SetDefaultCodec());
1235 cricket::VideoOptions vmo; 1221 cricket::VideoSendParameters parameters;
1236 vmo.conference_mode.Set(true); 1222 parameters.options.conference_mode.Set(true);
1237 EXPECT_TRUE(channel_->SetOptions(vmo)); 1223 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1238 EXPECT_TRUE(SetSend(true)); 1224 EXPECT_TRUE(SetSend(true));
1239 EXPECT_TRUE(channel_->SetRender(true)); 1225 EXPECT_TRUE(channel_->SetRender(true));
1240 EXPECT_TRUE(channel_->AddRecvStream( 1226 EXPECT_TRUE(channel_->AddRecvStream(
1241 cricket::StreamParams::CreateLegacy(1))); 1227 cricket::StreamParams::CreateLegacy(1)));
1242 EXPECT_TRUE(channel_->AddRecvStream( 1228 EXPECT_TRUE(channel_->AddRecvStream(
1243 cricket::StreamParams::CreateLegacy(2))); 1229 cricket::StreamParams::CreateLegacy(2)));
1244 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1)); 1230 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1));
1245 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2)); 1231 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2));
1246 EXPECT_EQ(0, renderer1.num_rendered_frames()); 1232 EXPECT_EQ(0, renderer1.num_rendered_frames());
1247 EXPECT_EQ(0, renderer2.num_rendered_frames()); 1233 EXPECT_EQ(0, renderer2.num_rendered_frames());
(...skipping 497 matching lines...)
1745 1731
1746 EXPECT_TRUE(channel_->SetCapturer(new_ssrc, video_capturer_.get())); 1732 EXPECT_TRUE(channel_->SetCapturer(new_ssrc, video_capturer_.get()));
1747 1733
1748 SendAndReceive(codec); 1734 SendAndReceive(codec);
1749 EXPECT_TRUE(channel_->RemoveSendStream(new_ssrc)); 1735 EXPECT_TRUE(channel_->RemoveSendStream(new_ssrc));
1750 EXPECT_EQ(0u, channel_->GetDefaultSendChannelSsrc()); 1736 EXPECT_EQ(0u, channel_->GetDefaultSendChannelSsrc());
1751 } 1737 }
1752 1738
1753 // Tests that we can send and receive frames with early receive. 1739 // Tests that we can send and receive frames with early receive.
1754 void TwoStreamsSendAndUnsignalledRecv(const cricket::VideoCodec& codec) { 1740 void TwoStreamsSendAndUnsignalledRecv(const cricket::VideoCodec& codec) {
1755 cricket::VideoOptions vmo; 1741 cricket::VideoSendParameters parameters;
1756 vmo.conference_mode.Set(true); 1742 parameters.options.conference_mode.Set(true);
1757 vmo.unsignalled_recv_stream_limit.Set(1); 1743 parameters.options.unsignalled_recv_stream_limit.Set(1);
1758 EXPECT_TRUE(channel_->SetOptions(vmo)); 1744 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1759 SetUpSecondStreamWithNoRecv(); 1745 SetUpSecondStreamWithNoRecv();
1760 // Test sending and receiving on first stream. 1746 // Test sending and receiving on first stream.
1761 EXPECT_TRUE(channel_->SetRender(true)); 1747 EXPECT_TRUE(channel_->SetRender(true));
1762 Send(codec); 1748 Send(codec);
1763 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout); 1749 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout);
1764 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout); 1750 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout);
1765 // The first send is not expected to yield frames, because the ssrc 1751 // The first send is not expected to yield frames, because the ssrc
1766 // is not signalled yet. With unsignalled recv enabled, we will drop frames 1752 // is not signalled yet. With unsignalled recv enabled, we will drop frames
1767 // instead of packets. 1753 // instead of packets.
1768 EXPECT_EQ(0, renderer2_.num_rendered_frames()); 1754 EXPECT_EQ(0, renderer2_.num_rendered_frames());
1769 // Give a chance for the decoder to process before adding the receiver. 1755 // Give a chance for the decoder to process before adding the receiver.
1770 rtc::Thread::Current()->ProcessMessages(100); 1756 rtc::Thread::Current()->ProcessMessages(100);
1771 // Test sending and receiving on second stream. 1757 // Test sending and receiving on second stream.
1772 EXPECT_TRUE(channel_->AddRecvStream( 1758 EXPECT_TRUE(channel_->AddRecvStream(
1773 cricket::StreamParams::CreateLegacy(kSsrc + 2))); 1759 cricket::StreamParams::CreateLegacy(kSsrc + 2)));
1774 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_)); 1760 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_));
1775 SendFrame(); 1761 SendFrame();
1776 EXPECT_EQ_WAIT(2, renderer_.num_rendered_frames(), kTimeout); 1762 EXPECT_EQ_WAIT(2, renderer_.num_rendered_frames(), kTimeout);
1777 EXPECT_EQ(4, NumRtpPackets()); 1763 EXPECT_EQ(4, NumRtpPackets());
1778 // The second send is expected to yield frame as the ssrc is signalled now. 1764 // The second send is expected to yield frame as the ssrc is signalled now.
1779 // Decode should succeed here, though we received the key frame earlier. 1765 // Decode should succeed here, though we received the key frame earlier.
1780 // Without early recv, we would have dropped it and decoding would have 1766 // Without early recv, we would have dropped it and decoding would have
1781 // failed. 1767 // failed.
1782 EXPECT_EQ_WAIT(1, renderer2_.num_rendered_frames(), kTimeout); 1768 EXPECT_EQ_WAIT(1, renderer2_.num_rendered_frames(), kTimeout);
1783 } 1769 }
1784 1770
1785 // Tests that we cannot receive key frames with unsignalled recv disabled.
pthatcher1 2015/09/14 19:42:02 We are you removing the tests for unsignalled_recv
the sun 2015/09/14 19:58:00 These are helper functions which turned out to be
1786 void TwoStreamsSendAndFailUnsignalledRecv(const cricket::VideoCodec& codec) {
1787 cricket::VideoOptions vmo;
1788 vmo.conference_mode.Set(true);
1789 vmo.unsignalled_recv_stream_limit.Set(0);
1790 EXPECT_TRUE(channel_->SetOptions(vmo));
1791 SetUpSecondStreamWithNoRecv();
1792 // Test sending and receiving on first stream.
1793 EXPECT_TRUE(channel_->SetRender(true));
1794 Send(codec);
1795 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout);
1796 rtc::Thread::Current()->ProcessMessages(100);
1797 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout);
1798 EXPECT_EQ_WAIT(0, renderer2_.num_rendered_frames(), kTimeout);
1799 // Give a chance for the decoder to process before adding the receiver.
1800 rtc::Thread::Current()->ProcessMessages(10);
1801 // Test sending and receiving on second stream.
1802 EXPECT_TRUE(channel_->AddRecvStream(
1803 cricket::StreamParams::CreateLegacy(kSsrc + 2)));
1804 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_));
1805 SendFrame();
1806 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= 1, kTimeout);
1807 EXPECT_EQ_WAIT(4, NumRtpPackets(), kTimeout);
1808 // We dont expect any frames here, because the key frame would have been
1809 // lost in the earlier packet. This is the case we want to solve with early
1810 // receive.
1811 EXPECT_EQ(0, renderer2_.num_rendered_frames());
1812 }
1813
1814 // Tests that we drop key frames when conference mode is disabled and we
1815 // receive rtp packets on unsignalled streams.
1816 void TwoStreamsSendAndFailUnsignalledRecvInOneToOne(
1817 const cricket::VideoCodec& codec) {
1818 cricket::VideoOptions vmo;
1819 vmo.conference_mode.Set(false);
1820 vmo.unsignalled_recv_stream_limit.Set(1);
1821 EXPECT_TRUE(channel_->SetOptions(vmo));
1822 SetUpSecondStreamWithNoRecv();
1823 // Test sending and receiving on first stream.
1824 EXPECT_TRUE(channel_->SetRender(true));
1825 Send(codec);
1826 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout);
1827 // In one-to-one mode, we deliver frames to the default channel if there
1828 // is no registered recv channel for the ssrc.
1829 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= 1, kTimeout);
1830 // Give a chance for the decoder to process before adding the receiver.
1831 rtc::Thread::Current()->ProcessMessages(100);
1832 // Test sending and receiving on second stream.
1833 EXPECT_TRUE(channel_->AddRecvStream(
1834 cricket::StreamParams::CreateLegacy(kSsrc + 2)));
1835 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_));
1836 SendFrame();
1837 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= 1, kTimeout);
1838 EXPECT_EQ_WAIT(4, NumRtpPackets(), kTimeout);
1839 // We dont expect any frames here, because the key frame would have been
1840 // delivered to default channel.
1841 EXPECT_EQ(0, renderer2_.num_rendered_frames());
1842 }
1843
1844 // Tests that we drop key frames when conference mode is enabled and we 1771 // Tests that we drop key frames when conference mode is enabled and we
1845 // receive rtp packets on unsignalled streams. Removal of a unsignalled recv 1772 // receive rtp packets on unsignalled streams. Removal of a unsignalled recv
1846 // stream is successful. 1773 // stream is successful.
1847 void TwoStreamsAddAndRemoveUnsignalledRecv( 1774 void TwoStreamsAddAndRemoveUnsignalledRecv(
1848 const cricket::VideoCodec& codec) { 1775 const cricket::VideoCodec& codec) {
1849 cricket::VideoOptions vmo; 1776 cricket::VideoOptions vmo;
1850 vmo.conference_mode.Set(true); 1777 vmo.conference_mode.Set(true);
1851 vmo.unsignalled_recv_stream_limit.Set(1); 1778 vmo.unsignalled_recv_stream_limit.Set(1);
1852 EXPECT_TRUE(channel_->SetOptions(vmo)); 1779 EXPECT_TRUE(channel_->SetOptions(vmo));
1853 SetUpSecondStreamWithNoRecv(); 1780 SetUpSecondStreamWithNoRecv();
(...skipping 19 matching lines...)
1873 rtc::scoped_ptr<C> channel_; 1800 rtc::scoped_ptr<C> channel_;
1874 cricket::FakeNetworkInterface network_interface_; 1801 cricket::FakeNetworkInterface network_interface_;
1875 cricket::FakeVideoRenderer renderer_; 1802 cricket::FakeVideoRenderer renderer_;
1876 cricket::VideoMediaChannel::Error media_error_; 1803 cricket::VideoMediaChannel::Error media_error_;
1877 1804
1878 // Used by test cases where 2 streams are run on the same channel. 1805 // Used by test cases where 2 streams are run on the same channel.
1879 cricket::FakeVideoRenderer renderer2_; 1806 cricket::FakeVideoRenderer renderer2_;
1880 }; 1807 };
1881 1808
1882 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT 1809 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT
OLDNEW

Powered by Google App Engine