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

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. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « talk/media/base/rtpdataengine_unittest.cc ('k') | talk/media/sctp/sctpdataengine.h » ('j') | 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 * 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 451 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 virtual void SetUp() { 462 virtual void SetUp() {
463 cricket::Device device("test", "device"); 463 cricket::Device device("test", "device");
464 engine_.Init(); 464 engine_.Init();
465 channel_.reset( 465 channel_.reset(
466 engine_.CreateChannel(call_.get(), cricket::VideoOptions())); 466 engine_.CreateChannel(call_.get(), cricket::VideoOptions()));
467 EXPECT_TRUE(channel_.get() != NULL); 467 EXPECT_TRUE(channel_.get() != NULL);
468 ConnectVideoChannelError(); 468 ConnectVideoChannelError();
469 network_interface_.SetDestination(channel_.get()); 469 network_interface_.SetDestination(channel_.get());
470 channel_->SetInterface(&network_interface_); 470 channel_->SetInterface(&network_interface_);
471 media_error_ = cricket::VideoMediaChannel::ERROR_NONE; 471 media_error_ = cricket::VideoMediaChannel::ERROR_NONE;
472 channel_->SetRecvCodecs(engine_.codecs()); 472 cricket::VideoRecvParameters parameters;
473 parameters.codecs = engine_.codecs();
474 channel_->SetRecvParameters(parameters);
473 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams())); 475 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams()));
474 video_capturer_.reset(CreateFakeVideoCapturer()); 476 video_capturer_.reset(CreateFakeVideoCapturer());
475 cricket::VideoFormat format(640, 480, 477 cricket::VideoFormat format(640, 480,
476 cricket::VideoFormat::FpsToInterval(30), 478 cricket::VideoFormat::FpsToInterval(30),
477 cricket::FOURCC_I420); 479 cricket::FOURCC_I420);
478 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format)); 480 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format));
479 EXPECT_TRUE(channel_->SetCapturer(kSsrc, video_capturer_.get())); 481 EXPECT_TRUE(channel_->SetCapturer(kSsrc, video_capturer_.get()));
480 } 482 }
481 483
482 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() { 484 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 &VideoMediaChannelTest<E, C>::OnVideoChannelError); 525 &VideoMediaChannelTest<E, C>::OnVideoChannelError);
524 } 526 }
525 bool SetDefaultCodec() { 527 bool SetDefaultCodec() {
526 return SetOneCodec(DefaultCodec()); 528 return SetOneCodec(DefaultCodec());
527 } 529 }
528 530
529 bool SetOneCodec(int pt, const char* name, int w, int h, int fr) { 531 bool SetOneCodec(int pt, const char* name, int w, int h, int fr) {
530 return SetOneCodec(cricket::VideoCodec(pt, name, w, h, fr, 0)); 532 return SetOneCodec(cricket::VideoCodec(pt, name, w, h, fr, 0));
531 } 533 }
532 bool SetOneCodec(const cricket::VideoCodec& codec) { 534 bool SetOneCodec(const cricket::VideoCodec& codec) {
533 std::vector<cricket::VideoCodec> codecs;
534 codecs.push_back(codec);
535
536 cricket::VideoFormat capture_format(codec.width, codec.height, 535 cricket::VideoFormat capture_format(codec.width, codec.height,
537 cricket::VideoFormat::FpsToInterval(codec.framerate), 536 cricket::VideoFormat::FpsToInterval(codec.framerate),
538 cricket::FOURCC_I420); 537 cricket::FOURCC_I420);
539 538
540 if (video_capturer_) { 539 if (video_capturer_) {
541 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(capture_format)); 540 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(capture_format));
542 } 541 }
543 if (video_capturer_2_) { 542 if (video_capturer_2_) {
544 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(capture_format)); 543 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(capture_format));
545 } 544 }
546 545
547 bool sending = channel_->sending(); 546 bool sending = channel_->sending();
548 bool success = SetSend(false); 547 bool success = SetSend(false);
549 if (success) 548 if (success) {
550 success = channel_->SetSendCodecs(codecs); 549 cricket::VideoSendParameters parameters;
551 if (success) 550 parameters.codecs.push_back(codec);
551 success = channel_->SetSendParameters(parameters);
552 }
553 if (success) {
552 success = SetSend(sending); 554 success = SetSend(sending);
555 }
553 return success; 556 return success;
554 } 557 }
555 bool SetSend(bool send) { 558 bool SetSend(bool send) {
556 return channel_->SetSend(send); 559 return channel_->SetSend(send);
557 } 560 }
558 bool SetSendStreamFormat(uint32 ssrc, const cricket::VideoCodec& codec) { 561 bool SetSendStreamFormat(uint32 ssrc, const cricket::VideoCodec& codec) {
559 return channel_->SetSendStreamFormat(ssrc, cricket::VideoFormat( 562 return channel_->SetSendStreamFormat(ssrc, cricket::VideoFormat(
560 codec.width, codec.height, 563 codec.width, codec.height,
561 cricket::VideoFormat::FpsToInterval(codec.framerate), 564 cricket::VideoFormat::FpsToInterval(codec.framerate),
562 cricket::FOURCC_ANY)); 565 cricket::FOURCC_ANY));
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 EXPECT_EQ(DefaultCodec().width, info.receivers[0].frame_width); 856 EXPECT_EQ(DefaultCodec().width, info.receivers[0].frame_width);
854 EXPECT_EQ(DefaultCodec().height, info.receivers[0].frame_height); 857 EXPECT_EQ(DefaultCodec().height, info.receivers[0].frame_height);
855 EXPECT_GT(info.receivers[0].framerate_rcvd, 0); 858 EXPECT_GT(info.receivers[0].framerate_rcvd, 0);
856 EXPECT_GT(info.receivers[0].framerate_decoded, 0); 859 EXPECT_GT(info.receivers[0].framerate_decoded, 0);
857 EXPECT_GT(info.receivers[0].framerate_output, 0); 860 EXPECT_GT(info.receivers[0].framerate_output, 0);
858 } 861 }
859 // Test that stats work properly for a conf call with multiple recv streams. 862 // Test that stats work properly for a conf call with multiple recv streams.
860 void GetStatsMultipleRecvStreams() { 863 void GetStatsMultipleRecvStreams() {
861 cricket::FakeVideoRenderer renderer1, renderer2; 864 cricket::FakeVideoRenderer renderer1, renderer2;
862 EXPECT_TRUE(SetOneCodec(DefaultCodec())); 865 EXPECT_TRUE(SetOneCodec(DefaultCodec()));
863 cricket::VideoOptions vmo; 866 cricket::VideoSendParameters parameters;
864 vmo.conference_mode.Set(true); 867 parameters.codecs.push_back(DefaultCodec());
865 EXPECT_TRUE(channel_->SetOptions(vmo)); 868 parameters.options.conference_mode.Set(true);
869 EXPECT_TRUE(channel_->SetSendParameters(parameters));
866 EXPECT_TRUE(SetSend(true)); 870 EXPECT_TRUE(SetSend(true));
867 EXPECT_TRUE(channel_->AddRecvStream( 871 EXPECT_TRUE(channel_->AddRecvStream(
868 cricket::StreamParams::CreateLegacy(1))); 872 cricket::StreamParams::CreateLegacy(1)));
869 EXPECT_TRUE(channel_->AddRecvStream( 873 EXPECT_TRUE(channel_->AddRecvStream(
870 cricket::StreamParams::CreateLegacy(2))); 874 cricket::StreamParams::CreateLegacy(2)));
871 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1)); 875 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1));
872 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2)); 876 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2));
873 EXPECT_TRUE(channel_->SetRender(true)); 877 EXPECT_TRUE(channel_->SetRender(true));
874 EXPECT_EQ(0, renderer1.num_rendered_frames()); 878 EXPECT_EQ(0, renderer1.num_rendered_frames());
875 EXPECT_EQ(0, renderer2.num_rendered_frames()); 879 EXPECT_EQ(0, renderer2.num_rendered_frames());
(...skipping 25 matching lines...) Expand all
901 EXPECT_EQ(NumRtpPackets(), info.receivers[i].packets_rcvd); 905 EXPECT_EQ(NumRtpPackets(), info.receivers[i].packets_rcvd);
902 EXPECT_EQ(DefaultCodec().width, info.receivers[i].frame_width); 906 EXPECT_EQ(DefaultCodec().width, info.receivers[i].frame_width);
903 EXPECT_EQ(DefaultCodec().height, info.receivers[i].frame_height); 907 EXPECT_EQ(DefaultCodec().height, info.receivers[i].frame_height);
904 } 908 }
905 } 909 }
906 // Test that stats work properly for a conf call with multiple send streams. 910 // Test that stats work properly for a conf call with multiple send streams.
907 void GetStatsMultipleSendStreams() { 911 void GetStatsMultipleSendStreams() {
908 // Normal setup; note that we set the SSRC explicitly to ensure that 912 // Normal setup; note that we set the SSRC explicitly to ensure that
909 // it will come first in the senders map. 913 // it will come first in the senders map.
910 EXPECT_TRUE(SetOneCodec(DefaultCodec())); 914 EXPECT_TRUE(SetOneCodec(DefaultCodec()));
911 cricket::VideoOptions vmo; 915 cricket::VideoSendParameters parameters;
912 vmo.conference_mode.Set(true); 916 parameters.codecs.push_back(DefaultCodec());
913 EXPECT_TRUE(channel_->SetOptions(vmo)); 917 parameters.options.conference_mode.Set(true);
918 EXPECT_TRUE(channel_->SetSendParameters(parameters));
914 EXPECT_TRUE(channel_->AddRecvStream( 919 EXPECT_TRUE(channel_->AddRecvStream(
915 cricket::StreamParams::CreateLegacy(kSsrc))); 920 cricket::StreamParams::CreateLegacy(kSsrc)));
916 EXPECT_TRUE(channel_->SetRenderer(kSsrc, &renderer_)); 921 EXPECT_TRUE(channel_->SetRenderer(kSsrc, &renderer_));
917 channel_->UpdateAspectRatio(640, 400); 922 channel_->UpdateAspectRatio(640, 400);
918 EXPECT_TRUE(SetSend(true)); 923 EXPECT_TRUE(SetSend(true));
919 EXPECT_TRUE(channel_->SetRender(true)); 924 EXPECT_TRUE(channel_->SetRender(true));
920 EXPECT_TRUE(SendFrame()); 925 EXPECT_TRUE(SendFrame());
921 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); 926 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout);
922 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout); 927 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout);
923 928
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 EXPECT_EQ(1U, info.senders[1].ssrcs().size()); 973 EXPECT_EQ(1U, info.senders[1].ssrcs().size());
969 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]); 974 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]);
970 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width); 975 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width);
971 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height); 976 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height);
972 // The capturer must be unregistered here as it runs out of it's scope next. 977 // The capturer must be unregistered here as it runs out of it's scope next.
973 EXPECT_TRUE(channel_->SetCapturer(5678, NULL)); 978 EXPECT_TRUE(channel_->SetCapturer(5678, NULL));
974 } 979 }
975 980
976 // Test that we can set the bandwidth. 981 // Test that we can set the bandwidth.
977 void SetSendBandwidth() { 982 void SetSendBandwidth() {
978 EXPECT_TRUE(channel_->SetMaxSendBandwidth(-1)); // <= 0 means unlimited. 983 cricket::VideoSendParameters parameters;
979 EXPECT_TRUE(channel_->SetMaxSendBandwidth(128 * 1024)); 984 parameters.codecs.push_back(DefaultCodec());
985 parameters.max_bandwidth_bps = -1; // <= 0 means unlimited.
986 EXPECT_TRUE(channel_->SetSendParameters(parameters));
987 parameters.max_bandwidth_bps = 128 * 1024;
988 EXPECT_TRUE(channel_->SetSendParameters(parameters));
980 } 989 }
981 // Test that we can set the SSRC for the default send source. 990 // Test that we can set the SSRC for the default send source.
982 void SetSendSsrc() { 991 void SetSendSsrc() {
983 EXPECT_TRUE(SetDefaultCodec()); 992 EXPECT_TRUE(SetDefaultCodec());
984 EXPECT_TRUE(SetSendStreamFormat(kSsrc, DefaultCodec())); 993 EXPECT_TRUE(SetSendStreamFormat(kSsrc, DefaultCodec()));
985 EXPECT_TRUE(SetSend(true)); 994 EXPECT_TRUE(SetSend(true));
986 EXPECT_TRUE(SendFrame()); 995 EXPECT_TRUE(SendFrame());
987 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); 996 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout);
988 uint32 ssrc = 0; 997 uint32 ssrc = 0;
989 rtc::scoped_ptr<const rtc::Buffer> p(GetRtpPacket(0)); 998 rtc::scoped_ptr<const rtc::Buffer> p(GetRtpPacket(0));
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 // Wait 30ms to guarantee the engine does not drop the frame. 1084 // Wait 30ms to guarantee the engine does not drop the frame.
1076 EXPECT_TRUE(WaitAndSendFrame(30)); 1085 EXPECT_TRUE(WaitAndSendFrame(30));
1077 EXPECT_TRUE_WAIT(NumRtpPackets() > rtp_packets, kTimeout); 1086 EXPECT_TRUE_WAIT(NumRtpPackets() > rtp_packets, kTimeout);
1078 1087
1079 last_packet = NumRtpPackets() - 1; 1088 last_packet = NumRtpPackets() - 1;
1080 p.reset(GetRtpPacket(static_cast<int>(last_packet))); 1089 p.reset(GetRtpPacket(static_cast<int>(last_packet)));
1081 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); 1090 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL);
1082 EXPECT_EQ(789u, ssrc); 1091 EXPECT_EQ(789u, ssrc);
1083 } 1092 }
1084 1093
1085 // Tests adding streams already exists returns false.
1086 void AddRecvStreamsAlreadyExist() {
1087 cricket::VideoOptions vmo;
1088 vmo.conference_mode.Set(true);
1089 EXPECT_TRUE(channel_->SetOptions(vmo));
1090
1091 EXPECT_FALSE(channel_->AddRecvStream(
1092 cricket::StreamParams::CreateLegacy(0)));
1093
1094 EXPECT_TRUE(channel_->AddRecvStream(
1095 cricket::StreamParams::CreateLegacy(1)));
1096 EXPECT_FALSE(channel_->AddRecvStream(
1097 cricket::StreamParams::CreateLegacy(1)));
1098
1099 EXPECT_TRUE(channel_->RemoveRecvStream(1));
1100 EXPECT_FALSE(channel_->AddRecvStream(
1101 cricket::StreamParams::CreateLegacy(0)));
1102 EXPECT_TRUE(channel_->AddRecvStream(
1103 cricket::StreamParams::CreateLegacy(1)));
1104 }
1105
1106 // Tests setting up and configuring multiple incoming streams. 1094 // Tests setting up and configuring multiple incoming streams.
1107 void AddRemoveRecvStreams() { 1095 void AddRemoveRecvStreams() {
1108 cricket::FakeVideoRenderer renderer1, renderer2; 1096 cricket::FakeVideoRenderer renderer1, renderer2;
1109 cricket::VideoOptions vmo; 1097 cricket::VideoSendParameters parameters;
1110 vmo.conference_mode.Set(true); 1098 parameters.codecs.push_back(DefaultCodec());
1111 EXPECT_TRUE(channel_->SetOptions(vmo)); 1099 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1100
1112 // Ensure we can't set the renderer on a non-existent stream. 1101 // Ensure we can't set the renderer on a non-existent stream.
1113 EXPECT_FALSE(channel_->SetRenderer(1, &renderer1)); 1102 EXPECT_FALSE(channel_->SetRenderer(1, &renderer1));
1114 EXPECT_FALSE(channel_->SetRenderer(2, &renderer2)); 1103 EXPECT_FALSE(channel_->SetRenderer(2, &renderer2));
1115 cricket::VideoRenderer* renderer; 1104 cricket::VideoRenderer* renderer;
1116 EXPECT_FALSE(channel_->GetRenderer(1, &renderer)); 1105 EXPECT_FALSE(channel_->GetRenderer(1, &renderer));
1117 EXPECT_FALSE(channel_->GetRenderer(2, &renderer)); 1106 EXPECT_FALSE(channel_->GetRenderer(2, &renderer));
1118 1107
1119 // Ensure we can add streams. 1108 // Ensure we can add streams.
1120 EXPECT_TRUE(channel_->AddRecvStream( 1109 EXPECT_TRUE(channel_->AddRecvStream(
1121 cricket::StreamParams::CreateLegacy(1))); 1110 cricket::StreamParams::CreateLegacy(1)));
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1231 EXPECT_GT_FRAME_ON_RENDERER_WAIT( 1220 EXPECT_GT_FRAME_ON_RENDERER_WAIT(
1232 renderer1, 2, DefaultCodec().width, DefaultCodec().height, kTimeout); 1221 renderer1, 2, DefaultCodec().width, DefaultCodec().height, kTimeout);
1233 // Detach |renderer1| before exit as there might be frames come late. 1222 // Detach |renderer1| before exit as there might be frames come late.
1234 EXPECT_TRUE(channel_->SetRenderer(kSsrc, NULL)); 1223 EXPECT_TRUE(channel_->SetRenderer(kSsrc, NULL));
1235 } 1224 }
1236 1225
1237 // Tests the behavior of incoming streams in a conference scenario. 1226 // Tests the behavior of incoming streams in a conference scenario.
1238 void SimulateConference() { 1227 void SimulateConference() {
1239 cricket::FakeVideoRenderer renderer1, renderer2; 1228 cricket::FakeVideoRenderer renderer1, renderer2;
1240 EXPECT_TRUE(SetDefaultCodec()); 1229 EXPECT_TRUE(SetDefaultCodec());
1241 cricket::VideoOptions vmo; 1230 cricket::VideoSendParameters parameters;
1242 vmo.conference_mode.Set(true); 1231 parameters.codecs.push_back(DefaultCodec());
1243 EXPECT_TRUE(channel_->SetOptions(vmo)); 1232 parameters.options.conference_mode.Set(true);
1233 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1244 EXPECT_TRUE(SetSend(true)); 1234 EXPECT_TRUE(SetSend(true));
1245 EXPECT_TRUE(channel_->SetRender(true)); 1235 EXPECT_TRUE(channel_->SetRender(true));
1246 EXPECT_TRUE(channel_->AddRecvStream( 1236 EXPECT_TRUE(channel_->AddRecvStream(
1247 cricket::StreamParams::CreateLegacy(1))); 1237 cricket::StreamParams::CreateLegacy(1)));
1248 EXPECT_TRUE(channel_->AddRecvStream( 1238 EXPECT_TRUE(channel_->AddRecvStream(
1249 cricket::StreamParams::CreateLegacy(2))); 1239 cricket::StreamParams::CreateLegacy(2)));
1250 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1)); 1240 EXPECT_TRUE(channel_->SetRenderer(1, &renderer1));
1251 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2)); 1241 EXPECT_TRUE(channel_->SetRenderer(2, &renderer2));
1252 EXPECT_EQ(0, renderer1.num_rendered_frames()); 1242 EXPECT_EQ(0, renderer1.num_rendered_frames());
1253 EXPECT_EQ(0, renderer2.num_rendered_frames()); 1243 EXPECT_EQ(0, renderer2.num_rendered_frames());
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
1751 1741
1752 EXPECT_TRUE(channel_->SetCapturer(new_ssrc, video_capturer_.get())); 1742 EXPECT_TRUE(channel_->SetCapturer(new_ssrc, video_capturer_.get()));
1753 1743
1754 SendAndReceive(codec); 1744 SendAndReceive(codec);
1755 EXPECT_TRUE(channel_->RemoveSendStream(new_ssrc)); 1745 EXPECT_TRUE(channel_->RemoveSendStream(new_ssrc));
1756 EXPECT_EQ(0u, channel_->GetDefaultSendChannelSsrc()); 1746 EXPECT_EQ(0u, channel_->GetDefaultSendChannelSsrc());
1757 } 1747 }
1758 1748
1759 // Tests that we can send and receive frames with early receive. 1749 // Tests that we can send and receive frames with early receive.
1760 void TwoStreamsSendAndUnsignalledRecv(const cricket::VideoCodec& codec) { 1750 void TwoStreamsSendAndUnsignalledRecv(const cricket::VideoCodec& codec) {
1761 cricket::VideoOptions vmo; 1751 cricket::VideoSendParameters parameters;
1762 vmo.conference_mode.Set(true); 1752 parameters.options.conference_mode.Set(true);
1763 vmo.unsignalled_recv_stream_limit.Set(1); 1753 parameters.options.unsignalled_recv_stream_limit.Set(1);
1764 EXPECT_TRUE(channel_->SetOptions(vmo)); 1754 EXPECT_TRUE(channel_->SetSendParameters(parameters));
1765 SetUpSecondStreamWithNoRecv(); 1755 SetUpSecondStreamWithNoRecv();
1766 // Test sending and receiving on first stream. 1756 // Test sending and receiving on first stream.
1767 EXPECT_TRUE(channel_->SetRender(true)); 1757 EXPECT_TRUE(channel_->SetRender(true));
1768 Send(codec); 1758 Send(codec);
1769 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout); 1759 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout);
1770 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout); 1760 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout);
1771 // The first send is not expected to yield frames, because the ssrc 1761 // The first send is not expected to yield frames, because the ssrc
1772 // is not signalled yet. With unsignalled recv enabled, we will drop frames 1762 // is not signalled yet. With unsignalled recv enabled, we will drop frames
1773 // instead of packets. 1763 // instead of packets.
1774 EXPECT_EQ(0, renderer2_.num_rendered_frames()); 1764 EXPECT_EQ(0, renderer2_.num_rendered_frames());
1775 // Give a chance for the decoder to process before adding the receiver. 1765 // Give a chance for the decoder to process before adding the receiver.
1776 rtc::Thread::Current()->ProcessMessages(100); 1766 rtc::Thread::Current()->ProcessMessages(100);
1777 // Test sending and receiving on second stream. 1767 // Test sending and receiving on second stream.
1778 EXPECT_TRUE(channel_->AddRecvStream( 1768 EXPECT_TRUE(channel_->AddRecvStream(
1779 cricket::StreamParams::CreateLegacy(kSsrc + 2))); 1769 cricket::StreamParams::CreateLegacy(kSsrc + 2)));
1780 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_)); 1770 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_));
1781 SendFrame(); 1771 SendFrame();
1782 EXPECT_EQ_WAIT(2, renderer_.num_rendered_frames(), kTimeout); 1772 EXPECT_EQ_WAIT(2, renderer_.num_rendered_frames(), kTimeout);
1783 EXPECT_EQ(4, NumRtpPackets()); 1773 EXPECT_EQ(4, NumRtpPackets());
1784 // The second send is expected to yield frame as the ssrc is signalled now. 1774 // The second send is expected to yield frame as the ssrc is signalled now.
1785 // Decode should succeed here, though we received the key frame earlier. 1775 // Decode should succeed here, though we received the key frame earlier.
1786 // Without early recv, we would have dropped it and decoding would have 1776 // Without early recv, we would have dropped it and decoding would have
1787 // failed. 1777 // failed.
1788 EXPECT_EQ_WAIT(1, renderer2_.num_rendered_frames(), kTimeout); 1778 EXPECT_EQ_WAIT(1, renderer2_.num_rendered_frames(), kTimeout);
1789 } 1779 }
1790 1780
1791 // Tests that we cannot receive key frames with unsignalled recv disabled.
1792 void TwoStreamsSendAndFailUnsignalledRecv(const cricket::VideoCodec& codec) {
1793 cricket::VideoOptions vmo;
1794 vmo.conference_mode.Set(true);
1795 vmo.unsignalled_recv_stream_limit.Set(0);
1796 EXPECT_TRUE(channel_->SetOptions(vmo));
1797 SetUpSecondStreamWithNoRecv();
1798 // Test sending and receiving on first stream.
1799 EXPECT_TRUE(channel_->SetRender(true));
1800 Send(codec);
1801 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout);
1802 rtc::Thread::Current()->ProcessMessages(100);
1803 EXPECT_EQ_WAIT(1, renderer_.num_rendered_frames(), kTimeout);
1804 EXPECT_EQ_WAIT(0, renderer2_.num_rendered_frames(), kTimeout);
1805 // Give a chance for the decoder to process before adding the receiver.
1806 rtc::Thread::Current()->ProcessMessages(10);
1807 // Test sending and receiving on second stream.
1808 EXPECT_TRUE(channel_->AddRecvStream(
1809 cricket::StreamParams::CreateLegacy(kSsrc + 2)));
1810 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_));
1811 SendFrame();
1812 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= 1, kTimeout);
1813 EXPECT_EQ_WAIT(4, NumRtpPackets(), kTimeout);
1814 // We dont expect any frames here, because the key frame would have been
1815 // lost in the earlier packet. This is the case we want to solve with early
1816 // receive.
1817 EXPECT_EQ(0, renderer2_.num_rendered_frames());
1818 }
1819
1820 // Tests that we drop key frames when conference mode is disabled and we
1821 // receive rtp packets on unsignalled streams.
1822 void TwoStreamsSendAndFailUnsignalledRecvInOneToOne(
1823 const cricket::VideoCodec& codec) {
1824 cricket::VideoOptions vmo;
1825 vmo.conference_mode.Set(false);
1826 vmo.unsignalled_recv_stream_limit.Set(1);
1827 EXPECT_TRUE(channel_->SetOptions(vmo));
1828 SetUpSecondStreamWithNoRecv();
1829 // Test sending and receiving on first stream.
1830 EXPECT_TRUE(channel_->SetRender(true));
1831 Send(codec);
1832 EXPECT_EQ_WAIT(2, NumRtpPackets(), kTimeout);
1833 // In one-to-one mode, we deliver frames to the default channel if there
1834 // is no registered recv channel for the ssrc.
1835 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= 1, kTimeout);
1836 // Give a chance for the decoder to process before adding the receiver.
1837 rtc::Thread::Current()->ProcessMessages(100);
1838 // Test sending and receiving on second stream.
1839 EXPECT_TRUE(channel_->AddRecvStream(
1840 cricket::StreamParams::CreateLegacy(kSsrc + 2)));
1841 EXPECT_TRUE(channel_->SetRenderer(kSsrc + 2, &renderer2_));
1842 SendFrame();
1843 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= 1, kTimeout);
1844 EXPECT_EQ_WAIT(4, NumRtpPackets(), kTimeout);
1845 // We dont expect any frames here, because the key frame would have been
1846 // delivered to default channel.
1847 EXPECT_EQ(0, renderer2_.num_rendered_frames());
1848 }
1849
1850 // Tests that we drop key frames when conference mode is enabled and we 1781 // Tests that we drop key frames when conference mode is enabled and we
1851 // receive rtp packets on unsignalled streams. Removal of a unsignalled recv 1782 // receive rtp packets on unsignalled streams. Removal of a unsignalled recv
1852 // stream is successful. 1783 // stream is successful.
1853 void TwoStreamsAddAndRemoveUnsignalledRecv( 1784 void TwoStreamsAddAndRemoveUnsignalledRecv(
1854 const cricket::VideoCodec& codec) { 1785 const cricket::VideoCodec& codec) {
1855 cricket::VideoOptions vmo; 1786 cricket::VideoOptions vmo;
1856 vmo.conference_mode.Set(true); 1787 vmo.conference_mode.Set(true);
1857 vmo.unsignalled_recv_stream_limit.Set(1); 1788 vmo.unsignalled_recv_stream_limit.Set(1);
1858 EXPECT_TRUE(channel_->SetOptions(vmo)); 1789 EXPECT_TRUE(channel_->SetOptions(vmo));
1859 SetUpSecondStreamWithNoRecv(); 1790 SetUpSecondStreamWithNoRecv();
(...skipping 20 matching lines...) Expand all
1880 rtc::scoped_ptr<C> channel_; 1811 rtc::scoped_ptr<C> channel_;
1881 cricket::FakeNetworkInterface network_interface_; 1812 cricket::FakeNetworkInterface network_interface_;
1882 cricket::FakeVideoRenderer renderer_; 1813 cricket::FakeVideoRenderer renderer_;
1883 cricket::VideoMediaChannel::Error media_error_; 1814 cricket::VideoMediaChannel::Error media_error_;
1884 1815
1885 // Used by test cases where 2 streams are run on the same channel. 1816 // Used by test cases where 2 streams are run on the same channel.
1886 cricket::FakeVideoRenderer renderer2_; 1817 cricket::FakeVideoRenderer renderer2_;
1887 }; 1818 };
1888 1819
1889 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT 1820 #endif // TALK_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT
OLDNEW
« no previous file with comments | « talk/media/base/rtpdataengine_unittest.cc ('k') | talk/media/sctp/sctpdataengine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698