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

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

Issue 2408153002: Remove cricket::VideoCodec with, height and framerate properties (Closed)
Patch Set: Rebased Created 4 years, 2 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 | « webrtc/media/base/mediaconstants.cc ('k') | webrtc/media/engine/webrtcvideoengine2.cc » ('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 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2014 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 EXPECT_TRUE_WAIT((r).num_rendered_frames() >= (c) && \ 43 EXPECT_TRUE_WAIT((r).num_rendered_frames() >= (c) && \
44 (w) == (r).width() && \ 44 (w) == (r).width() && \
45 (h) == (r).height(), (t)); \ 45 (h) == (r).height(), (t)); \
46 EXPECT_EQ(0, (r).errors()); 46 EXPECT_EQ(0, (r).errors());
47 47
48 static const uint32_t kTimeout = 5000U; 48 static const uint32_t kTimeout = 5000U;
49 static const uint32_t kDefaultReceiveSsrc = 0; 49 static const uint32_t kDefaultReceiveSsrc = 0;
50 static const uint32_t kSsrc = 1234u; 50 static const uint32_t kSsrc = 1234u;
51 static const uint32_t kRtxSsrc = 4321u; 51 static const uint32_t kRtxSsrc = 4321u;
52 static const uint32_t kSsrcs4[] = {1, 2, 3, 4}; 52 static const uint32_t kSsrcs4[] = {1, 2, 3, 4};
53 53 static const int kVideoWidth = 640;
54 inline bool IsEqualRes(const cricket::VideoCodec& a, int w, int h, int fps) { 54 static const int kVideoHeight = 360;
55 return a.width == w && a.height == h && a.framerate == fps; 55 static const int kFramerate = 30;
56 }
57 56
58 inline bool IsEqualCodec(const cricket::VideoCodec& a, 57 inline bool IsEqualCodec(const cricket::VideoCodec& a,
59 const cricket::VideoCodec& b) { 58 const cricket::VideoCodec& b) {
60 return a.id == b.id && a.name == b.name && 59 return a.id == b.id && a.name == b.name;
61 IsEqualRes(a, b.width, b.height, b.framerate);
62 } 60 }
63 61
64 namespace std { 62 namespace std {
65 inline std::ostream& operator<<(std::ostream& s, const cricket::VideoCodec& c) { 63 inline std::ostream& operator<<(std::ostream& s, const cricket::VideoCodec& c) {
66 s << "{" << c.name << "(" << c.id << "), " 64 s << "{" << c.name << "(" << c.id << ")"
67 << c.width << "x" << c.height << "x" << c.framerate << "}"; 65 << "}";
68 return s; 66 return s;
69 } 67 }
70 } // namespace std 68 } // namespace std
71 69
72 inline int TimeBetweenSend(const cricket::VideoCodec& codec) {
73 return static_cast<int>(
74 cricket::VideoFormat::FpsToInterval(codec.framerate) /
75 rtc::kNumNanosecsPerMillisec);
76 }
77
78 template<class E, class C> 70 template<class E, class C>
79 class VideoMediaChannelTest : public testing::Test, 71 class VideoMediaChannelTest : public testing::Test,
80 public sigslot::has_slots<> { 72 public sigslot::has_slots<> {
81 protected: 73 protected:
82 VideoMediaChannelTest<E, C>() 74 VideoMediaChannelTest<E, C>()
83 : call_(webrtc::Call::Create(webrtc::Call::Config(&event_log_))) {} 75 : call_(webrtc::Call::Create(webrtc::Call::Config(&event_log_))) {}
84 76
85 virtual cricket::VideoCodec DefaultCodec() = 0; 77 virtual cricket::VideoCodec DefaultCodec() = 0;
86 78
87 virtual cricket::StreamParams DefaultSendStreamParams() { 79 virtual cricket::StreamParams DefaultSendStreamParams() {
88 return cricket::StreamParams::CreateLegacy(kSsrc); 80 return cricket::StreamParams::CreateLegacy(kSsrc);
89 } 81 }
90 82
91 virtual void SetUp() { 83 virtual void SetUp() {
92 engine_.Init(); 84 engine_.Init();
93 channel_.reset(engine_.CreateChannel(call_.get(), cricket::MediaConfig(), 85 channel_.reset(engine_.CreateChannel(call_.get(), cricket::MediaConfig(),
94 cricket::VideoOptions())); 86 cricket::VideoOptions()));
95 EXPECT_TRUE(channel_.get() != NULL); 87 EXPECT_TRUE(channel_.get() != NULL);
96 network_interface_.SetDestination(channel_.get()); 88 network_interface_.SetDestination(channel_.get());
97 channel_->SetInterface(&network_interface_); 89 channel_->SetInterface(&network_interface_);
98 media_error_ = cricket::VideoMediaChannel::ERROR_NONE; 90 media_error_ = cricket::VideoMediaChannel::ERROR_NONE;
99 cricket::VideoRecvParameters parameters; 91 cricket::VideoRecvParameters parameters;
100 parameters.codecs = engine_.codecs(); 92 parameters.codecs = engine_.codecs();
101 channel_->SetRecvParameters(parameters); 93 channel_->SetRecvParameters(parameters);
102 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams())); 94 EXPECT_TRUE(channel_->AddSendStream(DefaultSendStreamParams()));
103 video_capturer_.reset(CreateFakeVideoCapturer()); 95 video_capturer_.reset(CreateFakeVideoCapturer());
104 cricket::VideoFormat format(640, 480, 96 cricket::VideoFormat format(640, 480,
105 cricket::VideoFormat::FpsToInterval(30), 97 cricket::VideoFormat::FpsToInterval(kFramerate),
106 cricket::FOURCC_I420); 98 cricket::FOURCC_I420);
107 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format)); 99 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(format));
108 EXPECT_TRUE( 100 EXPECT_TRUE(
109 channel_->SetVideoSend(kSsrc, true, nullptr, video_capturer_.get())); 101 channel_->SetVideoSend(kSsrc, true, nullptr, video_capturer_.get()));
110 } 102 }
111 103
112 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() { 104 virtual cricket::FakeVideoCapturer* CreateFakeVideoCapturer() {
113 return new cricket::FakeVideoCapturer(); 105 return new cricket::FakeVideoCapturer();
114 } 106 }
115 107
(...skipping 16 matching lines...) Expand all
132 EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_)); 124 EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));
133 EXPECT_FALSE(channel_->AddSendStream( 125 EXPECT_FALSE(channel_->AddSendStream(
134 cricket::StreamParams::CreateLegacy(kSsrc))); 126 cricket::StreamParams::CreateLegacy(kSsrc)));
135 EXPECT_TRUE(channel_->AddSendStream( 127 EXPECT_TRUE(channel_->AddSendStream(
136 cricket::StreamParams::CreateLegacy(kSsrc + 2))); 128 cricket::StreamParams::CreateLegacy(kSsrc + 2)));
137 // We dont add recv for the second stream. 129 // We dont add recv for the second stream.
138 130
139 // Setup the receive and renderer for second stream after send. 131 // Setup the receive and renderer for second stream after send.
140 video_capturer_2_.reset(CreateFakeVideoCapturer()); 132 video_capturer_2_.reset(CreateFakeVideoCapturer());
141 cricket::VideoFormat format(640, 480, 133 cricket::VideoFormat format(640, 480,
142 cricket::VideoFormat::FpsToInterval(30), 134 cricket::VideoFormat::FpsToInterval(kFramerate),
143 cricket::FOURCC_I420); 135 cricket::FOURCC_I420);
144 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(format)); 136 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(format));
145 137
146 EXPECT_TRUE(channel_->SetVideoSend(kSsrc + 2, true, nullptr, 138 EXPECT_TRUE(channel_->SetVideoSend(kSsrc + 2, true, nullptr,
147 video_capturer_2_.get())); 139 video_capturer_2_.get()));
148 } 140 }
149 virtual void TearDown() { 141 virtual void TearDown() {
150 channel_.reset(); 142 channel_.reset();
151 } 143 }
152 bool SetDefaultCodec() { 144 bool SetDefaultCodec() {
153 return SetOneCodec(DefaultCodec()); 145 return SetOneCodec(DefaultCodec());
154 } 146 }
155 147
156 bool SetOneCodec(int pt, const char* name, int w, int h, int fr) { 148 bool SetOneCodec(int pt, const char* name) {
157 return SetOneCodec(cricket::VideoCodec(pt, name, w, h, fr)); 149 return SetOneCodec(cricket::VideoCodec(pt, name));
158 } 150 }
159 bool SetOneCodec(const cricket::VideoCodec& codec) { 151 bool SetOneCodec(const cricket::VideoCodec& codec) {
160 cricket::VideoFormat capture_format(codec.width, codec.height, 152 cricket::VideoFormat capture_format(
161 cricket::VideoFormat::FpsToInterval(codec.framerate), 153 kVideoWidth, kVideoHeight,
162 cricket::FOURCC_I420); 154 cricket::VideoFormat::FpsToInterval(kFramerate), cricket::FOURCC_I420);
163 155
164 if (video_capturer_) { 156 if (video_capturer_) {
165 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(capture_format)); 157 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_->Start(capture_format));
166 } 158 }
167 if (video_capturer_2_) { 159 if (video_capturer_2_) {
168 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(capture_format)); 160 EXPECT_EQ(cricket::CS_RUNNING, video_capturer_2_->Start(capture_format));
169 } 161 }
170 162
171 bool sending = channel_->sending(); 163 bool sending = channel_->sending();
172 bool success = SetSend(false); 164 bool success = SetSend(false);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0)); 381 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0));
390 EXPECT_EQ(codec.id, GetPayloadType(p.get())); 382 EXPECT_EQ(codec.id, GetPayloadType(p.get()));
391 } 383 }
392 // Tests that we can send and receive frames. 384 // Tests that we can send and receive frames.
393 void SendAndReceive(const cricket::VideoCodec& codec) { 385 void SendAndReceive(const cricket::VideoCodec& codec) {
394 EXPECT_TRUE(SetOneCodec(codec)); 386 EXPECT_TRUE(SetOneCodec(codec));
395 EXPECT_TRUE(SetSend(true)); 387 EXPECT_TRUE(SetSend(true));
396 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); 388 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
397 EXPECT_EQ(0, renderer_.num_rendered_frames()); 389 EXPECT_EQ(0, renderer_.num_rendered_frames());
398 EXPECT_TRUE(SendFrame()); 390 EXPECT_TRUE(SendFrame());
399 EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout); 391 EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout);
400 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0)); 392 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0));
401 EXPECT_EQ(codec.id, GetPayloadType(p.get())); 393 EXPECT_EQ(codec.id, GetPayloadType(p.get()));
402 } 394 }
403 void SendReceiveManyAndGetStats(const cricket::VideoCodec& codec, 395 void SendReceiveManyAndGetStats(const cricket::VideoCodec& codec,
404 int duration_sec, int fps) { 396 int duration_sec, int fps) {
405 EXPECT_TRUE(SetOneCodec(codec)); 397 EXPECT_TRUE(SetOneCodec(codec));
406 EXPECT_TRUE(SetSend(true)); 398 EXPECT_TRUE(SetSend(true));
407 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); 399 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
408 EXPECT_EQ(0, renderer_.num_rendered_frames()); 400 EXPECT_EQ(0, renderer_.num_rendered_frames());
409 for (int i = 0; i < duration_sec; ++i) { 401 for (int i = 0; i < duration_sec; ++i) {
410 for (int frame = 1; frame <= fps; ++frame) { 402 for (int frame = 1; frame <= fps; ++frame) {
411 EXPECT_TRUE(WaitAndSendFrame(1000 / fps)); 403 EXPECT_TRUE(WaitAndSendFrame(1000 / fps));
412 EXPECT_FRAME_WAIT(frame + i * fps, codec.width, codec.height, kTimeout); 404 EXPECT_FRAME_WAIT(frame + i * fps, kVideoWidth, kVideoHeight, kTimeout);
413 } 405 }
414 } 406 }
415 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0)); 407 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0));
416 EXPECT_EQ(codec.id, GetPayloadType(p.get())); 408 EXPECT_EQ(codec.id, GetPayloadType(p.get()));
417 } 409 }
418 410
419 // Test that stats work properly for a 1-1 call. 411 // Test that stats work properly for a 1-1 call.
420 void GetStats() { 412 void GetStats() {
421 const int kDurationSec = 3; 413 const int kDurationSec = 3;
422 const int kFps = 10; 414 const int kFps = 10;
423 SendReceiveManyAndGetStats(DefaultCodec(), kDurationSec, kFps); 415 SendReceiveManyAndGetStats(DefaultCodec(), kDurationSec, kFps);
424 416
425 cricket::VideoMediaInfo info; 417 cricket::VideoMediaInfo info;
426 EXPECT_TRUE(channel_->GetStats(&info)); 418 EXPECT_TRUE(channel_->GetStats(&info));
427 419
428 ASSERT_EQ(1U, info.senders.size()); 420 ASSERT_EQ(1U, info.senders.size());
429 // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload? 421 // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload?
430 // For webrtc, bytes_sent does not include the RTP header length. 422 // For webrtc, bytes_sent does not include the RTP header length.
431 EXPECT_GT(info.senders[0].bytes_sent, 0); 423 EXPECT_GT(info.senders[0].bytes_sent, 0);
432 EXPECT_EQ(NumRtpPackets(), info.senders[0].packets_sent); 424 EXPECT_EQ(NumRtpPackets(), info.senders[0].packets_sent);
433 EXPECT_EQ(0.0, info.senders[0].fraction_lost); 425 EXPECT_EQ(0.0, info.senders[0].fraction_lost);
434 EXPECT_EQ(0, info.senders[0].firs_rcvd); 426 EXPECT_EQ(0, info.senders[0].firs_rcvd);
435 EXPECT_EQ(0, info.senders[0].plis_rcvd); 427 EXPECT_EQ(0, info.senders[0].plis_rcvd);
436 EXPECT_EQ(0, info.senders[0].nacks_rcvd); 428 EXPECT_EQ(0, info.senders[0].nacks_rcvd);
437 EXPECT_EQ(DefaultCodec().width, info.senders[0].send_frame_width); 429 EXPECT_EQ(kVideoWidth, info.senders[0].send_frame_width);
438 EXPECT_EQ(DefaultCodec().height, info.senders[0].send_frame_height); 430 EXPECT_EQ(kVideoHeight, info.senders[0].send_frame_height);
439 EXPECT_GT(info.senders[0].framerate_input, 0); 431 EXPECT_GT(info.senders[0].framerate_input, 0);
440 EXPECT_GT(info.senders[0].framerate_sent, 0); 432 EXPECT_GT(info.senders[0].framerate_sent, 0);
441 433
442 ASSERT_EQ(1U, info.receivers.size()); 434 ASSERT_EQ(1U, info.receivers.size());
443 EXPECT_EQ(1U, info.senders[0].ssrcs().size()); 435 EXPECT_EQ(1U, info.senders[0].ssrcs().size());
444 EXPECT_EQ(1U, info.receivers[0].ssrcs().size()); 436 EXPECT_EQ(1U, info.receivers[0].ssrcs().size());
445 EXPECT_EQ(info.senders[0].ssrcs()[0], info.receivers[0].ssrcs()[0]); 437 EXPECT_EQ(info.senders[0].ssrcs()[0], info.receivers[0].ssrcs()[0]);
446 EXPECT_EQ(NumRtpBytes(), info.receivers[0].bytes_rcvd); 438 EXPECT_EQ(NumRtpBytes(), info.receivers[0].bytes_rcvd);
447 EXPECT_EQ(NumRtpPackets(), info.receivers[0].packets_rcvd); 439 EXPECT_EQ(NumRtpPackets(), info.receivers[0].packets_rcvd);
448 EXPECT_EQ(0.0, info.receivers[0].fraction_lost); 440 EXPECT_EQ(0.0, info.receivers[0].fraction_lost);
449 EXPECT_EQ(0, info.receivers[0].packets_lost); 441 EXPECT_EQ(0, info.receivers[0].packets_lost);
450 // TODO(asapersson): Not set for webrtc. Handle missing stats. 442 // TODO(asapersson): Not set for webrtc. Handle missing stats.
451 // EXPECT_EQ(0, info.receivers[0].packets_concealed); 443 // EXPECT_EQ(0, info.receivers[0].packets_concealed);
452 EXPECT_EQ(0, info.receivers[0].firs_sent); 444 EXPECT_EQ(0, info.receivers[0].firs_sent);
453 EXPECT_EQ(0, info.receivers[0].plis_sent); 445 EXPECT_EQ(0, info.receivers[0].plis_sent);
454 EXPECT_EQ(0, info.receivers[0].nacks_sent); 446 EXPECT_EQ(0, info.receivers[0].nacks_sent);
455 EXPECT_EQ(DefaultCodec().width, info.receivers[0].frame_width); 447 EXPECT_EQ(kVideoWidth, info.receivers[0].frame_width);
456 EXPECT_EQ(DefaultCodec().height, info.receivers[0].frame_height); 448 EXPECT_EQ(kVideoHeight, info.receivers[0].frame_height);
457 EXPECT_GT(info.receivers[0].framerate_rcvd, 0); 449 EXPECT_GT(info.receivers[0].framerate_rcvd, 0);
458 EXPECT_GT(info.receivers[0].framerate_decoded, 0); 450 EXPECT_GT(info.receivers[0].framerate_decoded, 0);
459 EXPECT_GT(info.receivers[0].framerate_output, 0); 451 EXPECT_GT(info.receivers[0].framerate_output, 0);
460 } 452 }
461 453
462 cricket::VideoSenderInfo GetSenderStats(size_t i) { 454 cricket::VideoSenderInfo GetSenderStats(size_t i) {
463 cricket::VideoMediaInfo info; 455 cricket::VideoMediaInfo info;
464 EXPECT_TRUE(channel_->GetStats(&info)); 456 EXPECT_TRUE(channel_->GetStats(&info));
465 return info.senders[i]; 457 return info.senders[i];
466 } 458 }
(...skipping 19 matching lines...) Expand all
486 cricket::StreamParams::CreateLegacy(2))); 478 cricket::StreamParams::CreateLegacy(2)));
487 EXPECT_TRUE(channel_->SetSink(1, &renderer1)); 479 EXPECT_TRUE(channel_->SetSink(1, &renderer1));
488 EXPECT_TRUE(channel_->SetSink(2, &renderer2)); 480 EXPECT_TRUE(channel_->SetSink(2, &renderer2));
489 EXPECT_EQ(0, renderer1.num_rendered_frames()); 481 EXPECT_EQ(0, renderer1.num_rendered_frames());
490 EXPECT_EQ(0, renderer2.num_rendered_frames()); 482 EXPECT_EQ(0, renderer2.num_rendered_frames());
491 std::vector<uint32_t> ssrcs; 483 std::vector<uint32_t> ssrcs;
492 ssrcs.push_back(1); 484 ssrcs.push_back(1);
493 ssrcs.push_back(2); 485 ssrcs.push_back(2);
494 network_interface_.SetConferenceMode(true, ssrcs); 486 network_interface_.SetConferenceMode(true, ssrcs);
495 EXPECT_TRUE(SendFrame()); 487 EXPECT_TRUE(SendFrame());
496 EXPECT_FRAME_ON_RENDERER_WAIT( 488 EXPECT_FRAME_ON_RENDERER_WAIT(renderer1, 1, kVideoWidth, kVideoHeight,
497 renderer1, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); 489 kTimeout);
498 EXPECT_FRAME_ON_RENDERER_WAIT( 490 EXPECT_FRAME_ON_RENDERER_WAIT(renderer2, 1, kVideoWidth, kVideoHeight,
499 renderer2, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); 491 kTimeout);
500 492
501 EXPECT_TRUE(channel_->SetSend(false)); 493 EXPECT_TRUE(channel_->SetSend(false));
502 494
503 cricket::VideoMediaInfo info; 495 cricket::VideoMediaInfo info;
504 EXPECT_TRUE(channel_->GetStats(&info)); 496 EXPECT_TRUE(channel_->GetStats(&info));
505 ASSERT_EQ(1U, info.senders.size()); 497 ASSERT_EQ(1U, info.senders.size());
506 // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload? 498 // TODO(whyuan): bytes_sent and bytes_rcvd are different. Are both payload?
507 // For webrtc, bytes_sent does not include the RTP header length. 499 // For webrtc, bytes_sent does not include the RTP header length.
508 EXPECT_GT(GetSenderStats(0).bytes_sent, 0); 500 EXPECT_GT(GetSenderStats(0).bytes_sent, 0);
509 EXPECT_EQ_WAIT(NumRtpPackets(), GetSenderStats(0).packets_sent, kTimeout); 501 EXPECT_EQ_WAIT(NumRtpPackets(), GetSenderStats(0).packets_sent, kTimeout);
510 EXPECT_EQ(DefaultCodec().width, GetSenderStats(0).send_frame_width); 502 EXPECT_EQ(kVideoWidth, GetSenderStats(0).send_frame_width);
511 EXPECT_EQ(DefaultCodec().height, GetSenderStats(0).send_frame_height); 503 EXPECT_EQ(kVideoHeight, GetSenderStats(0).send_frame_height);
512 504
513 ASSERT_EQ(2U, info.receivers.size()); 505 ASSERT_EQ(2U, info.receivers.size());
514 for (size_t i = 0; i < info.receivers.size(); ++i) { 506 for (size_t i = 0; i < info.receivers.size(); ++i) {
515 EXPECT_EQ(1U, GetReceiverStats(i).ssrcs().size()); 507 EXPECT_EQ(1U, GetReceiverStats(i).ssrcs().size());
516 EXPECT_EQ(i + 1, GetReceiverStats(i).ssrcs()[0]); 508 EXPECT_EQ(i + 1, GetReceiverStats(i).ssrcs()[0]);
517 EXPECT_EQ_WAIT(NumRtpBytes(), GetReceiverStats(i).bytes_rcvd, kTimeout); 509 EXPECT_EQ_WAIT(NumRtpBytes(), GetReceiverStats(i).bytes_rcvd, kTimeout);
518 EXPECT_EQ_WAIT(NumRtpPackets(), GetReceiverStats(i).packets_rcvd, 510 EXPECT_EQ_WAIT(NumRtpPackets(), GetReceiverStats(i).packets_rcvd,
519 kTimeout); 511 kTimeout);
520 EXPECT_EQ_WAIT(DefaultCodec().width, GetReceiverStats(i).frame_width, 512 EXPECT_EQ_WAIT(kVideoWidth, GetReceiverStats(i).frame_width, kTimeout);
521 kTimeout); 513 EXPECT_EQ_WAIT(kVideoHeight, GetReceiverStats(i).frame_height, kTimeout);
522 EXPECT_EQ_WAIT(DefaultCodec().height, GetReceiverStats(i).frame_height,
523 kTimeout);
524 } 514 }
525 } 515 }
526 // Test that stats work properly for a conf call with multiple send streams. 516 // Test that stats work properly for a conf call with multiple send streams.
527 void GetStatsMultipleSendStreams() { 517 void GetStatsMultipleSendStreams() {
528 // Normal setup; note that we set the SSRC explicitly to ensure that 518 // Normal setup; note that we set the SSRC explicitly to ensure that
529 // it will come first in the senders map. 519 // it will come first in the senders map.
530 EXPECT_TRUE(SetOneCodec(DefaultCodec())); 520 EXPECT_TRUE(SetOneCodec(DefaultCodec()));
531 cricket::VideoSendParameters parameters; 521 cricket::VideoSendParameters parameters;
532 parameters.codecs.push_back(DefaultCodec()); 522 parameters.codecs.push_back(DefaultCodec());
533 parameters.conference_mode = true; 523 parameters.conference_mode = true;
534 EXPECT_TRUE(channel_->SetSendParameters(parameters)); 524 EXPECT_TRUE(channel_->SetSendParameters(parameters));
535 EXPECT_TRUE(channel_->AddRecvStream( 525 EXPECT_TRUE(channel_->AddRecvStream(
536 cricket::StreamParams::CreateLegacy(kSsrc))); 526 cricket::StreamParams::CreateLegacy(kSsrc)));
537 EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_)); 527 EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));
538 EXPECT_TRUE(SetSend(true)); 528 EXPECT_TRUE(SetSend(true));
539 EXPECT_TRUE(SendFrame()); 529 EXPECT_TRUE(SendFrame());
540 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout); 530 EXPECT_TRUE_WAIT(NumRtpPackets() > 0, kTimeout);
541 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout); 531 EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout);
542 532
543 // Add an additional capturer, and hook up a renderer to receive it. 533 // Add an additional capturer, and hook up a renderer to receive it.
544 cricket::FakeVideoRenderer renderer2; 534 cricket::FakeVideoRenderer renderer2;
545 std::unique_ptr<cricket::FakeVideoCapturer> capturer( 535 std::unique_ptr<cricket::FakeVideoCapturer> capturer(
546 CreateFakeVideoCapturer()); 536 CreateFakeVideoCapturer());
547 const int kTestWidth = 160; 537 const int kTestWidth = 160;
548 const int kTestHeight = 120; 538 const int kTestHeight = 120;
549 cricket::VideoFormat format(kTestWidth, kTestHeight, 539 cricket::VideoFormat format(kTestWidth, kTestHeight,
550 cricket::VideoFormat::FpsToInterval(5), 540 cricket::VideoFormat::FpsToInterval(5),
551 cricket::FOURCC_I420); 541 cricket::FOURCC_I420);
(...skipping 22 matching lines...) Expand all
574 // Stats have been updated for both sent frames, expectations can be 564 // Stats have been updated for both sent frames, expectations can be
575 // checked now. 565 // checked now.
576 break; 566 break;
577 } 567 }
578 } 568 }
579 EXPECT_EQ(NumRtpPackets(), 569 EXPECT_EQ(NumRtpPackets(),
580 info.senders[0].packets_sent + info.senders[1].packets_sent) 570 info.senders[0].packets_sent + info.senders[1].packets_sent)
581 << "Timed out while waiting for packet counts for all sent packets."; 571 << "Timed out while waiting for packet counts for all sent packets.";
582 EXPECT_EQ(1U, info.senders[0].ssrcs().size()); 572 EXPECT_EQ(1U, info.senders[0].ssrcs().size());
583 EXPECT_EQ(1234U, info.senders[0].ssrcs()[0]); 573 EXPECT_EQ(1234U, info.senders[0].ssrcs()[0]);
584 EXPECT_EQ(DefaultCodec().width, info.senders[0].send_frame_width); 574 EXPECT_EQ(kVideoWidth, info.senders[0].send_frame_width);
585 EXPECT_EQ(DefaultCodec().height, info.senders[0].send_frame_height); 575 EXPECT_EQ(kVideoHeight, info.senders[0].send_frame_height);
586 EXPECT_EQ(1U, info.senders[1].ssrcs().size()); 576 EXPECT_EQ(1U, info.senders[1].ssrcs().size());
587 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]); 577 EXPECT_EQ(5678U, info.senders[1].ssrcs()[0]);
588 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width); 578 EXPECT_EQ(kTestWidth, info.senders[1].send_frame_width);
589 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height); 579 EXPECT_EQ(kTestHeight, info.senders[1].send_frame_height);
590 // The capturer must be unregistered here as it runs out of it's scope next. 580 // The capturer must be unregistered here as it runs out of it's scope next.
591 channel_->SetVideoSend(5678, true, nullptr, nullptr); 581 channel_->SetVideoSend(5678, true, nullptr, nullptr);
592 } 582 }
593 583
594 // Test that we can set the bandwidth. 584 // Test that we can set the bandwidth.
595 void SetSendBandwidth() { 585 void SetSendBandwidth() {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 640
651 rtc::CopyOnWriteBuffer packet1(data1, sizeof(data1)); 641 rtc::CopyOnWriteBuffer packet1(data1, sizeof(data1));
652 rtc::SetBE32(packet1.data() + 8, kSsrc); 642 rtc::SetBE32(packet1.data() + 8, kSsrc);
653 channel_->SetSink(kDefaultReceiveSsrc, NULL); 643 channel_->SetSink(kDefaultReceiveSsrc, NULL);
654 EXPECT_TRUE(SetDefaultCodec()); 644 EXPECT_TRUE(SetDefaultCodec());
655 EXPECT_TRUE(SetSend(true)); 645 EXPECT_TRUE(SetSend(true));
656 EXPECT_EQ(0, renderer_.num_rendered_frames()); 646 EXPECT_EQ(0, renderer_.num_rendered_frames());
657 channel_->OnPacketReceived(&packet1, rtc::PacketTime()); 647 channel_->OnPacketReceived(&packet1, rtc::PacketTime());
658 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); 648 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
659 EXPECT_TRUE(SendFrame()); 649 EXPECT_TRUE(SendFrame());
660 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout); 650 EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout);
661 } 651 }
662 652
663 // Tests empty StreamParams is rejected. 653 // Tests empty StreamParams is rejected.
664 void RejectEmptyStreamParams() { 654 void RejectEmptyStreamParams() {
665 // Remove the send stream that was added during Setup. 655 // Remove the send stream that was added during Setup.
666 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); 656 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc));
667 657
668 cricket::StreamParams empty; 658 cricket::StreamParams empty;
669 EXPECT_FALSE(channel_->AddSendStream(empty)); 659 EXPECT_FALSE(channel_->AddSendStream(empty));
670 EXPECT_TRUE(channel_->AddSendStream( 660 EXPECT_TRUE(channel_->AddSendStream(
671 cricket::StreamParams::CreateLegacy(789u))); 661 cricket::StreamParams::CreateLegacy(789u)));
672 } 662 }
673 663
674 // Tests setting up and configuring a send stream. 664 // Tests setting up and configuring a send stream.
675 void AddRemoveSendStreams() { 665 void AddRemoveSendStreams() {
676 EXPECT_TRUE(SetOneCodec(DefaultCodec())); 666 EXPECT_TRUE(SetOneCodec(DefaultCodec()));
677 EXPECT_TRUE(SetSend(true)); 667 EXPECT_TRUE(SetSend(true));
678 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); 668 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
679 EXPECT_TRUE(SendFrame()); 669 EXPECT_TRUE(SendFrame());
680 EXPECT_FRAME_WAIT(1, DefaultCodec().width, DefaultCodec().height, kTimeout); 670 EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout);
681 EXPECT_GT(NumRtpPackets(), 0); 671 EXPECT_GT(NumRtpPackets(), 0);
682 uint32_t ssrc = 0; 672 uint32_t ssrc = 0;
683 size_t last_packet = NumRtpPackets() - 1; 673 size_t last_packet = NumRtpPackets() - 1;
684 std::unique_ptr<const rtc::CopyOnWriteBuffer> 674 std::unique_ptr<const rtc::CopyOnWriteBuffer>
685 p(GetRtpPacket(static_cast<int>(last_packet))); 675 p(GetRtpPacket(static_cast<int>(last_packet)));
686 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL); 676 ParseRtpPacket(p.get(), NULL, NULL, NULL, NULL, &ssrc, NULL);
687 EXPECT_EQ(kSsrc, ssrc); 677 EXPECT_EQ(kSsrc, ssrc);
688 678
689 // Remove the send stream that was added during Setup. 679 // Remove the send stream that was added during Setup.
690 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); 680 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc));
(...skipping 29 matching lines...) Expand all
720 cricket::StreamParams::CreateLegacy(2))); 710 cricket::StreamParams::CreateLegacy(2)));
721 EXPECT_TRUE(channel_->SetSink(1, &renderer1)); 711 EXPECT_TRUE(channel_->SetSink(1, &renderer1));
722 EXPECT_TRUE(channel_->SetSink(2, &renderer2)); 712 EXPECT_TRUE(channel_->SetSink(2, &renderer2));
723 EXPECT_EQ(0, renderer1.num_rendered_frames()); 713 EXPECT_EQ(0, renderer1.num_rendered_frames());
724 EXPECT_EQ(0, renderer2.num_rendered_frames()); 714 EXPECT_EQ(0, renderer2.num_rendered_frames());
725 std::vector<uint32_t> ssrcs; 715 std::vector<uint32_t> ssrcs;
726 ssrcs.push_back(1); 716 ssrcs.push_back(1);
727 ssrcs.push_back(2); 717 ssrcs.push_back(2);
728 network_interface_.SetConferenceMode(true, ssrcs); 718 network_interface_.SetConferenceMode(true, ssrcs);
729 EXPECT_TRUE(SendFrame()); 719 EXPECT_TRUE(SendFrame());
730 EXPECT_FRAME_ON_RENDERER_WAIT( 720 EXPECT_FRAME_ON_RENDERER_WAIT(renderer1, 1, kVideoWidth, kVideoHeight,
731 renderer1, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); 721 kTimeout);
732 EXPECT_FRAME_ON_RENDERER_WAIT( 722 EXPECT_FRAME_ON_RENDERER_WAIT(renderer2, 1, kVideoWidth, kVideoHeight,
733 renderer2, 1, DefaultCodec().width, DefaultCodec().height, kTimeout); 723 kTimeout);
734 724
735 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0)); 725 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0));
736 EXPECT_EQ(DefaultCodec().id, GetPayloadType(p.get())); 726 EXPECT_EQ(DefaultCodec().id, GetPayloadType(p.get()));
737 EXPECT_EQ(DefaultCodec().width, renderer1.width()); 727 EXPECT_EQ(kVideoWidth, renderer1.width());
738 EXPECT_EQ(DefaultCodec().height, renderer1.height()); 728 EXPECT_EQ(kVideoHeight, renderer1.height());
739 EXPECT_EQ(DefaultCodec().width, renderer2.width()); 729 EXPECT_EQ(kVideoWidth, renderer2.width());
740 EXPECT_EQ(DefaultCodec().height, renderer2.height()); 730 EXPECT_EQ(kVideoHeight, renderer2.height());
741 EXPECT_TRUE(channel_->RemoveRecvStream(2)); 731 EXPECT_TRUE(channel_->RemoveRecvStream(2));
742 EXPECT_TRUE(channel_->RemoveRecvStream(1)); 732 EXPECT_TRUE(channel_->RemoveRecvStream(1));
743 } 733 }
744 734
745 // Tests that we can add and remove capturers and frames are sent out properly 735 // Tests that we can add and remove capturers and frames are sent out properly
746 void AddRemoveCapturer() { 736 void AddRemoveCapturer() {
747 cricket::VideoCodec codec = DefaultCodec(); 737 cricket::VideoCodec codec = DefaultCodec();
748 codec.width = 320; 738 const int time_between_send_ms =
749 codec.height = 240; 739 cricket::VideoFormat::FpsToInterval(kFramerate);
750 const int time_between_send = TimeBetweenSend(codec);
751 EXPECT_TRUE(SetOneCodec(codec)); 740 EXPECT_TRUE(SetOneCodec(codec));
752 EXPECT_TRUE(SetSend(true)); 741 EXPECT_TRUE(SetSend(true));
753 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); 742 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
754 EXPECT_EQ(0, renderer_.num_rendered_frames()); 743 EXPECT_EQ(0, renderer_.num_rendered_frames());
755 EXPECT_TRUE(SendFrame()); 744 EXPECT_TRUE(SendFrame());
756 EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout); 745 EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout);
757 std::unique_ptr<cricket::FakeVideoCapturer> capturer( 746 std::unique_ptr<cricket::FakeVideoCapturer> capturer(
758 CreateFakeVideoCapturer()); 747 CreateFakeVideoCapturer());
759 748
760 // TODO(nisse): This testcase fails if we don't configure 749 // TODO(nisse): This testcase fails if we don't configure
761 // screencast. It's unclear why, I see nothing obvious in this 750 // screencast. It's unclear why, I see nothing obvious in this
762 // test which is related to screencast logic. 751 // test which is related to screencast logic.
763 cricket::VideoOptions video_options; 752 cricket::VideoOptions video_options;
764 video_options.is_screencast = rtc::Optional<bool>(true); 753 video_options.is_screencast = rtc::Optional<bool>(true);
765 channel_->SetVideoSend(kSsrc, true, &video_options, nullptr); 754 channel_->SetVideoSend(kSsrc, true, &video_options, nullptr);
766 755
767 cricket::VideoFormat format(480, 360, 756 cricket::VideoFormat format(480, 360,
768 cricket::VideoFormat::FpsToInterval(30), 757 cricket::VideoFormat::FpsToInterval(30),
769 cricket::FOURCC_I420); 758 cricket::FOURCC_I420);
770 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(format)); 759 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(format));
771 // All capturers start generating frames with the same timestamp. ViE does 760 // All capturers start generating frames with the same timestamp. ViE does
772 // not allow the same timestamp to be used. Capture one frame before 761 // not allow the same timestamp to be used. Capture one frame before
773 // associating the capturer with the channel. 762 // associating the capturer with the channel.
774 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, 763 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height,
775 cricket::FOURCC_I420)); 764 cricket::FOURCC_I420));
776 765
777 int captured_frames = 1; 766 int captured_frames = 1;
778 for (int iterations = 0; iterations < 2; ++iterations) { 767 for (int iterations = 0; iterations < 2; ++iterations) {
779 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, capturer.get())); 768 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, capturer.get()));
780 rtc::Thread::Current()->ProcessMessages(time_between_send); 769 rtc::Thread::Current()->ProcessMessages(time_between_send_ms);
781 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height, 770 EXPECT_TRUE(capturer->CaptureCustomFrame(format.width, format.height,
782 cricket::FOURCC_I420)); 771 cricket::FOURCC_I420));
783 ++captured_frames; 772 ++captured_frames;
784 // Wait until frame of right size is captured. 773 // Wait until frame of right size is captured.
785 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= captured_frames && 774 EXPECT_TRUE_WAIT(renderer_.num_rendered_frames() >= captured_frames &&
786 format.width == renderer_.width() && 775 format.width == renderer_.width() &&
787 format.height == renderer_.height() && 776 format.height == renderer_.height() &&
788 !renderer_.black_frame(), kTimeout); 777 !renderer_.black_frame(), kTimeout);
789 EXPECT_GE(renderer_.num_rendered_frames(), captured_frames); 778 EXPECT_GE(renderer_.num_rendered_frames(), captured_frames);
790 EXPECT_EQ(format.width, renderer_.width()); 779 EXPECT_EQ(format.width, renderer_.width());
(...skipping 24 matching lines...) Expand all
815 804
816 // Tests that if SetVideoSend is called with a NULL capturer after the 805 // Tests that if SetVideoSend is called with a NULL capturer after the
817 // capturer was already removed, the application doesn't crash (and no black 806 // capturer was already removed, the application doesn't crash (and no black
818 // frame is sent). 807 // frame is sent).
819 void RemoveCapturerWithoutAdd() { 808 void RemoveCapturerWithoutAdd() {
820 EXPECT_TRUE(SetOneCodec(DefaultCodec())); 809 EXPECT_TRUE(SetOneCodec(DefaultCodec()));
821 EXPECT_TRUE(SetSend(true)); 810 EXPECT_TRUE(SetSend(true));
822 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_)); 811 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
823 EXPECT_EQ(0, renderer_.num_rendered_frames()); 812 EXPECT_EQ(0, renderer_.num_rendered_frames());
824 EXPECT_TRUE(SendFrame()); 813 EXPECT_TRUE(SendFrame());
825 EXPECT_FRAME_WAIT(1, 640, 400, kTimeout); 814 EXPECT_FRAME_WAIT(1, kVideoWidth, kVideoHeight, kTimeout);
826 // Wait for one frame so they don't get dropped because we send frames too 815 // Wait for one frame so they don't get dropped because we send frames too
827 // tightly. 816 // tightly.
828 rtc::Thread::Current()->ProcessMessages(30); 817 rtc::Thread::Current()->ProcessMessages(30);
829 // Remove the capturer. 818 // Remove the capturer.
830 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); 819 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr));
831 // Wait for one black frame for removing the capturer. 820 // Wait for one black frame for removing the capturer.
832 EXPECT_FRAME_WAIT(2, 640, 400, kTimeout); 821 EXPECT_FRAME_WAIT(2, kVideoWidth, kVideoHeight, kTimeout);
833 822
834 // No capturer was added, so this SetVideoSend shouldn't do anything. 823 // No capturer was added, so this SetVideoSend shouldn't do anything.
835 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); 824 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr));
836 rtc::Thread::Current()->ProcessMessages(300); 825 rtc::Thread::Current()->ProcessMessages(300);
837 // Verify no more frames were sent. 826 // Verify no more frames were sent.
838 EXPECT_EQ(2, renderer_.num_rendered_frames()); 827 EXPECT_EQ(2, renderer_.num_rendered_frames());
839 } 828 }
840 829
841 // Tests that we can add and remove capturer as unique sources. 830 // Tests that we can add and remove capturer as unique sources.
842 void AddRemoveCapturerMultipleSources() { 831 void AddRemoveCapturerMultipleSources() {
843 // WebRTC implementation will drop frames if pushed to quickly. Wait the 832 // WebRTC implementation will drop frames if pushed to quickly. Wait the
844 // interval time to avoid that. 833 // interval time to avoid that.
845 // WebRTC implementation will drop frames if pushed to quickly. Wait the 834 // WebRTC implementation will drop frames if pushed to quickly. Wait the
846 // interval time to avoid that. 835 // interval time to avoid that.
847 // Set up the stream associated with the engine. 836 // Set up the stream associated with the engine.
848 EXPECT_TRUE(channel_->AddRecvStream( 837 EXPECT_TRUE(channel_->AddRecvStream(
849 cricket::StreamParams::CreateLegacy(kSsrc))); 838 cricket::StreamParams::CreateLegacy(kSsrc)));
850 EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_)); 839 EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer_));
851 cricket::VideoFormat capture_format; // default format 840 cricket::VideoFormat capture_format; // default format
852 capture_format.interval = cricket::VideoFormat::FpsToInterval(30); 841 capture_format.interval = cricket::VideoFormat::FpsToInterval(kFramerate);
853 // Set up additional stream 1. 842 // Set up additional stream 1.
854 cricket::FakeVideoRenderer renderer1; 843 cricket::FakeVideoRenderer renderer1;
855 EXPECT_FALSE(channel_->SetSink(1, &renderer1)); 844 EXPECT_FALSE(channel_->SetSink(1, &renderer1));
856 EXPECT_TRUE(channel_->AddRecvStream( 845 EXPECT_TRUE(channel_->AddRecvStream(
857 cricket::StreamParams::CreateLegacy(1))); 846 cricket::StreamParams::CreateLegacy(1)));
858 EXPECT_TRUE(channel_->SetSink(1, &renderer1)); 847 EXPECT_TRUE(channel_->SetSink(1, &renderer1));
859 EXPECT_TRUE(channel_->AddSendStream( 848 EXPECT_TRUE(channel_->AddSendStream(
860 cricket::StreamParams::CreateLegacy(1))); 849 cricket::StreamParams::CreateLegacy(1)));
861 std::unique_ptr<cricket::FakeVideoCapturer> capturer1( 850 std::unique_ptr<cricket::FakeVideoCapturer> capturer1(
862 CreateFakeVideoCapturer()); 851 CreateFakeVideoCapturer());
(...skipping 30 matching lines...) Expand all
893 EXPECT_FRAME_ON_RENDERER_WAIT( 882 EXPECT_FRAME_ON_RENDERER_WAIT(
894 renderer2, 1, kTestWidth, kTestHeight, kTimeout); 883 renderer2, 1, kTestWidth, kTestHeight, kTimeout);
895 // Successfully remove the capturer. 884 // Successfully remove the capturer.
896 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr)); 885 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr));
897 // The capturers must be unregistered here as it runs out of it's scope 886 // The capturers must be unregistered here as it runs out of it's scope
898 // next. 887 // next.
899 EXPECT_TRUE(channel_->SetVideoSend(1, true, nullptr, nullptr)); 888 EXPECT_TRUE(channel_->SetVideoSend(1, true, nullptr, nullptr));
900 EXPECT_TRUE(channel_->SetVideoSend(2, true, nullptr, nullptr)); 889 EXPECT_TRUE(channel_->SetVideoSend(2, true, nullptr, nullptr));
901 } 890 }
902 891
903 void HighAspectHighHeightCapturer() {
904 const int kWidth = 80;
905 const int kHeight = 10000;
906 const int kScaledWidth = 20;
907 const int kScaledHeight = 2500;
908
909 cricket::VideoCodec codec(DefaultCodec());
910 EXPECT_TRUE(SetOneCodec(codec));
911 EXPECT_TRUE(SetSend(true));
912
913 cricket::FakeVideoRenderer renderer;
914 EXPECT_TRUE(channel_->AddRecvStream(
915 cricket::StreamParams::CreateLegacy(kSsrc)));
916 EXPECT_TRUE(channel_->SetSink(kSsrc, &renderer));
917 EXPECT_EQ(0, renderer.num_rendered_frames());
918
919 EXPECT_TRUE(SendFrame());
920 EXPECT_GT_FRAME_ON_RENDERER_WAIT(
921 renderer, 1, codec.width, codec.height, kTimeout);
922
923 // Registering an external capturer is currently the same as screen casting
924 // (update the test when this changes).
925 std::unique_ptr<cricket::FakeVideoCapturer> capturer(
926 CreateFakeVideoCapturer());
927 const std::vector<cricket::VideoFormat>* formats =
928 capturer->GetSupportedFormats();
929 cricket::VideoFormat capture_format = (*formats)[0];
930 EXPECT_EQ(cricket::CS_RUNNING, capturer->Start(capture_format));
931 // Capture frame to not get same frame timestamps as previous capturer.
932 capturer->CaptureFrame();
933 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, capturer.get()));
934 EXPECT_TRUE(rtc::Thread::Current()->ProcessMessages(30));
935 EXPECT_TRUE(capturer->CaptureCustomFrame(kWidth, kHeight,
936 cricket::FOURCC_ARGB));
937 EXPECT_GT_FRAME_ON_RENDERER_WAIT(
938 renderer, 2, kScaledWidth, kScaledHeight, kTimeout);
939 EXPECT_TRUE(channel_->SetVideoSend(kSsrc, true, nullptr, nullptr));
940 }
941
942 // Tests that we can adapt video resolution with 16:10 aspect ratio properly.
943 void AdaptResolution16x10() {
944 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
945 cricket::VideoCodec codec(DefaultCodec());
946 codec.width = 640;
947 codec.height = 400;
948 SendAndReceive(codec);
949 codec.width /= 2;
950 codec.height /= 2;
951 // Adapt the resolution.
952 EXPECT_TRUE(SetOneCodec(codec));
953 EXPECT_TRUE(WaitAndSendFrame(30));
954 EXPECT_FRAME_WAIT(2, codec.width, codec.height, kTimeout);
955 }
956 // Tests that we can adapt video resolution with 4:3 aspect ratio properly.
957 void AdaptResolution4x3() {
958 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
959 cricket::VideoCodec codec(DefaultCodec());
960 codec.width = 640;
961 codec.height = 400;
962 SendAndReceive(codec);
963 codec.width /= 2;
964 codec.height /= 2;
965 // Adapt the resolution.
966 EXPECT_TRUE(SetOneCodec(codec));
967 EXPECT_TRUE(WaitAndSendFrame(30));
968 EXPECT_FRAME_WAIT(2, codec.width, codec.height, kTimeout);
969 }
970 // Tests that we can drop all frames properly.
971 void AdaptDropAllFrames() {
972 // Set the channel codec's resolution to 0, which will require the adapter
973 // to drop all frames.
974 cricket::VideoCodec codec(DefaultCodec());
975 codec.width = codec.height = codec.framerate = 0;
976 EXPECT_TRUE(SetOneCodec(codec));
977 EXPECT_TRUE(SetSend(true));
978 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
979 EXPECT_EQ(0, renderer_.num_rendered_frames());
980 EXPECT_TRUE(SendFrame());
981 EXPECT_TRUE(SendFrame());
982 rtc::Thread::Current()->ProcessMessages(500);
983 EXPECT_EQ(0, renderer_.num_rendered_frames());
984 }
985 // Tests that we can reduce the frame rate on demand properly.
986 // TODO(fbarchard): This test is flakey on pulse. Fix and re-enable
987 void AdaptFramerate() {
988 cricket::VideoCodec codec(DefaultCodec());
989 int frame_count = 0;
990 // The capturer runs at 30 fps. The channel requires 30 fps.
991 EXPECT_TRUE(SetOneCodec(codec));
992 EXPECT_TRUE(SetSend(true));
993 EXPECT_EQ(frame_count, renderer_.num_rendered_frames());
994 EXPECT_TRUE(WaitAndSendFrame(0)); // Should be rendered.
995 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be rendered.
996 frame_count += 2;
997 EXPECT_FRAME_WAIT(frame_count, codec.width, codec.height, kTimeout);
998 std::unique_ptr<const rtc::CopyOnWriteBuffer> p(GetRtpPacket(0));
999 EXPECT_EQ(codec.id, GetPayloadType(p.get()));
1000
1001 // The channel requires 15 fps.
1002 codec.framerate = 15;
1003 EXPECT_TRUE(SetOneCodec(codec));
1004 EXPECT_TRUE(WaitAndSendFrame(0)); // Should be rendered.
1005 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be dropped.
1006 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be rendered.
1007 frame_count += 2;
1008 EXPECT_EQ_WAIT(frame_count, renderer_.num_rendered_frames(), kTimeout);
1009
1010 // The channel requires 10 fps.
1011 codec.framerate = 10;
1012 EXPECT_TRUE(SetOneCodec(codec));
1013 EXPECT_TRUE(WaitAndSendFrame(0)); // Should be rendered.
1014 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be dropped.
1015 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be dropped.
1016 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be rendered.
1017 frame_count += 2;
1018 EXPECT_EQ_WAIT(frame_count, renderer_.num_rendered_frames(), kTimeout);
1019
1020 // The channel requires 8 fps. The adapter adapts to 10 fps, which is the
1021 // closest factor of 30.
1022 codec.framerate = 8;
1023 EXPECT_TRUE(SetOneCodec(codec));
1024 EXPECT_TRUE(WaitAndSendFrame(0)); // Should be rendered.
1025 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be dropped.
1026 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be dropped.
1027 EXPECT_TRUE(WaitAndSendFrame(30)); // Should be rendered.
1028 frame_count += 2;
1029 EXPECT_EQ_WAIT(frame_count, renderer_.num_rendered_frames(), kTimeout);
1030 }
1031 // Tests that adapted frames won't be upscaled to a higher resolution.
1032 void SendsLowerResolutionOnSmallerFrames() {
1033 cricket::VideoCodec codec = DefaultCodec();
1034 codec.width = 320;
1035 codec.height = 240;
1036 EXPECT_TRUE(SetOneCodec(codec));
1037 EXPECT_TRUE(SetSend(true));
1038 EXPECT_TRUE(channel_->SetSink(kDefaultReceiveSsrc, &renderer_));
1039 EXPECT_EQ(0, renderer_.num_rendered_frames());
1040 EXPECT_TRUE(SendFrame());
1041 EXPECT_FRAME_WAIT(1, codec.width, codec.height, kTimeout);
1042
1043 // Check that we send smaller frames at the new resolution.
1044 EXPECT_TRUE(rtc::Thread::Current()->ProcessMessages(33));
1045 EXPECT_TRUE(video_capturer_->CaptureCustomFrame(
1046 codec.width / 2, codec.height / 2, cricket::FOURCC_I420));
1047 EXPECT_FRAME_WAIT(2, codec.width / 2, codec.height / 2, kTimeout);
1048 }
1049
1050 // Test that multiple send streams can be created and deleted properly. 892 // Test that multiple send streams can be created and deleted properly.
1051 void MultipleSendStreams() { 893 void MultipleSendStreams() {
1052 // Remove stream added in Setup. I.e. remove stream corresponding to default 894 // Remove stream added in Setup. I.e. remove stream corresponding to default
1053 // channel. 895 // channel.
1054 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc)); 896 EXPECT_TRUE(channel_->RemoveSendStream(kSsrc));
1055 const unsigned int kSsrcsSize = sizeof(kSsrcs4)/sizeof(kSsrcs4[0]); 897 const unsigned int kSsrcsSize = sizeof(kSsrcs4)/sizeof(kSsrcs4[0]);
1056 for (unsigned int i = 0; i < kSsrcsSize; ++i) { 898 for (unsigned int i = 0; i < kSsrcsSize; ++i) {
1057 EXPECT_TRUE(channel_->AddSendStream( 899 EXPECT_TRUE(channel_->AddSendStream(
1058 cricket::StreamParams::CreateLegacy(kSsrcs4[i]))); 900 cricket::StreamParams::CreateLegacy(kSsrcs4[i])));
1059 } 901 }
(...skipping 25 matching lines...) Expand all
1085 std::unique_ptr<C> channel_; 927 std::unique_ptr<C> channel_;
1086 cricket::FakeNetworkInterface network_interface_; 928 cricket::FakeNetworkInterface network_interface_;
1087 cricket::FakeVideoRenderer renderer_; 929 cricket::FakeVideoRenderer renderer_;
1088 cricket::VideoMediaChannel::Error media_error_; 930 cricket::VideoMediaChannel::Error media_error_;
1089 931
1090 // Used by test cases where 2 streams are run on the same channel. 932 // Used by test cases where 2 streams are run on the same channel.
1091 cricket::FakeVideoRenderer renderer2_; 933 cricket::FakeVideoRenderer renderer2_;
1092 }; 934 };
1093 935
1094 #endif // WEBRTC_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT 936 #endif // WEBRTC_MEDIA_BASE_VIDEOENGINE_UNITTEST_H_ NOLINT
OLDNEW
« no previous file with comments | « webrtc/media/base/mediaconstants.cc ('k') | webrtc/media/engine/webrtcvideoengine2.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698