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

Side by Side Diff: media/cast/sender/video_sender_unittest.cc

Issue 1515023002: Simplify interface for media/cast: CastTransportSenderImpl (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/cast/sender/audio_sender_unittest.cc ('k') | media/cast/test/cast_benchmarks.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 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 // frame. 70 // frame.
71 if (number_of_rtp_packets_ == 0) 71 if (number_of_rtp_packets_ == 0)
72 EXPECT_LE(1, number_of_rtcp_packets_); 72 EXPECT_LE(1, number_of_rtcp_packets_);
73 ++number_of_rtp_packets_; 73 ++number_of_rtp_packets_;
74 } 74 }
75 return true; 75 return true;
76 } 76 }
77 77
78 int64_t GetBytesSent() final { return 0; } 78 int64_t GetBytesSent() final { return 0; }
79 79
80 void StartReceiving(
81 const PacketReceiverCallbackWithStatus& packet_receiver) final {}
82
83 void StopReceiving() final {}
84
80 int number_of_rtp_packets() const { return number_of_rtp_packets_; } 85 int number_of_rtp_packets() const { return number_of_rtp_packets_; }
81 86
82 int number_of_rtcp_packets() const { return number_of_rtcp_packets_; } 87 int number_of_rtcp_packets() const { return number_of_rtcp_packets_; }
83 88
84 void SetPause(bool paused) { 89 void SetPause(bool paused) {
85 paused_ = paused; 90 paused_ = paused;
86 if (!paused && stored_packet_.get()) { 91 if (!paused && stored_packet_.get()) {
87 SendPacket(stored_packet_, callback_); 92 SendPacket(stored_packet_, callback_);
88 callback_.Run(); 93 callback_.Run();
89 } 94 }
(...skipping 24 matching lines...) Expand all
114 : VideoSender(cast_environment, 119 : VideoSender(cast_environment,
115 video_config, 120 video_config,
116 status_change_cb, 121 status_change_cb,
117 create_vea_cb, 122 create_vea_cb,
118 create_video_encode_mem_cb, 123 create_video_encode_mem_cb,
119 transport_sender, 124 transport_sender,
120 base::Bind(&IgnorePlayoutDelayChanges)) {} 125 base::Bind(&IgnorePlayoutDelayChanges)) {}
121 using VideoSender::OnReceivedCastFeedback; 126 using VideoSender::OnReceivedCastFeedback;
122 }; 127 };
123 128
129 class TransportClient : public CastTransportSender::Client {
130 public:
131 TransportClient() {}
132
133 void OnStatusChanged(CastTransportStatus status) final {
134 EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status);
135 };
136 void OnLoggingEventsReceived(
137 scoped_ptr<std::vector<FrameEvent>> frame_events,
138 scoped_ptr<std::vector<PacketEvent>> packet_events) final{};
139 void ProcessRtpPacket(scoped_ptr<Packet> packet) final{};
140
141 DISALLOW_COPY_AND_ASSIGN(TransportClient);
142 };
143
124 } // namespace 144 } // namespace
125 145
126 class VideoSenderTest : public ::testing::Test { 146 class VideoSenderTest : public ::testing::Test {
127 protected: 147 protected:
128 VideoSenderTest() 148 VideoSenderTest()
129 : testing_clock_(new base::SimpleTestTickClock()), 149 : testing_clock_(new base::SimpleTestTickClock()),
130 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)), 150 task_runner_(new test::FakeSingleThreadTaskRunner(testing_clock_)),
131 cast_environment_( 151 cast_environment_(
132 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_), 152 new CastEnvironment(scoped_ptr<base::TickClock>(testing_clock_),
133 task_runner_, 153 task_runner_,
134 task_runner_, 154 task_runner_,
135 task_runner_)), 155 task_runner_)),
136 operational_status_(STATUS_UNINITIALIZED), 156 operational_status_(STATUS_UNINITIALIZED),
137 vea_factory_(task_runner_) { 157 vea_factory_(task_runner_) {
138 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks()); 158 testing_clock_->Advance(base::TimeTicks::Now() - base::TimeTicks());
139 vea_factory_.SetAutoRespond(true); 159 vea_factory_.SetAutoRespond(true);
140 last_pixel_value_ = kPixelValue; 160 last_pixel_value_ = kPixelValue;
141 net::IPEndPoint dummy_endpoint; 161 transport_ = new TestPacketSender();
142 transport_sender_.reset(new CastTransportSenderImpl( 162 transport_sender_.reset(
143 NULL, 163 new CastTransportSenderImpl(testing_clock_, base::TimeDelta(),
144 testing_clock_, 164 make_scoped_ptr(new TransportClient()),
145 dummy_endpoint, 165 make_scoped_ptr(transport_), task_runner_));
146 dummy_endpoint,
147 make_scoped_ptr(new base::DictionaryValue),
148 base::Bind(&UpdateCastTransportStatus),
149 BulkRawEventsCallback(),
150 base::TimeDelta(),
151 task_runner_,
152 PacketReceiverCallback(),
153 &transport_));
154 } 166 }
155 167
156 ~VideoSenderTest() override {} 168 ~VideoSenderTest() override {}
157 169
158 void TearDown() final { 170 void TearDown() final {
159 video_sender_.reset(); 171 video_sender_.reset();
160 task_runner_->RunTasks(); 172 task_runner_->RunTasks();
161 } 173 }
162 174
163 static void UpdateCastTransportStatus(CastTransportStatus status) {
164 EXPECT_EQ(TRANSPORT_VIDEO_INITIALIZED, status);
165 }
166
167 // If |external| is true then external video encoder (VEA) is used. 175 // If |external| is true then external video encoder (VEA) is used.
168 // |expect_init_success| is true if initialization is expected to succeed. 176 // |expect_init_success| is true if initialization is expected to succeed.
169 void InitEncoder(bool external, bool expect_init_success) { 177 void InitEncoder(bool external, bool expect_init_success) {
170 VideoSenderConfig video_config = GetDefaultVideoSenderConfig(); 178 VideoSenderConfig video_config = GetDefaultVideoSenderConfig();
171 video_config.use_external_encoder = external; 179 video_config.use_external_encoder = external;
172 180
173 ASSERT_EQ(operational_status_, STATUS_UNINITIALIZED); 181 ASSERT_EQ(operational_status_, STATUS_UNINITIALIZED);
174 182
175 if (external) { 183 if (external) {
176 vea_factory_.SetInitializationWillSucceed(expect_init_success); 184 vea_factory_.SetInitializationWillSucceed(expect_init_success);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 230
223 void RunTasks(int during_ms) { 231 void RunTasks(int during_ms) {
224 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(during_ms)); 232 task_runner_->Sleep(base::TimeDelta::FromMilliseconds(during_ms));
225 } 233 }
226 234
227 base::SimpleTestTickClock* const testing_clock_; // Owned by CastEnvironment. 235 base::SimpleTestTickClock* const testing_clock_; // Owned by CastEnvironment.
228 const scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 236 const scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
229 const scoped_refptr<CastEnvironment> cast_environment_; 237 const scoped_refptr<CastEnvironment> cast_environment_;
230 OperationalStatus operational_status_; 238 OperationalStatus operational_status_;
231 FakeVideoEncodeAcceleratorFactory vea_factory_; 239 FakeVideoEncodeAcceleratorFactory vea_factory_;
232 TestPacketSender transport_; 240 TestPacketSender* transport_; // Owned by CastTransportSender.
233 scoped_ptr<CastTransportSenderImpl> transport_sender_; 241 scoped_ptr<CastTransportSenderImpl> transport_sender_;
234 scoped_ptr<PeerVideoSender> video_sender_; 242 scoped_ptr<PeerVideoSender> video_sender_;
235 int last_pixel_value_; 243 int last_pixel_value_;
236 base::TimeTicks first_frame_timestamp_; 244 base::TimeTicks first_frame_timestamp_;
237 245
238 private: 246 private:
239 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest); 247 DISALLOW_COPY_AND_ASSIGN(VideoSenderTest);
240 }; 248 };
241 249
242 TEST_F(VideoSenderTest, BuiltInEncoder) { 250 TEST_F(VideoSenderTest, BuiltInEncoder) {
243 InitEncoder(false, true); 251 InitEncoder(false, true);
244 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 252 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
245 253
246 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 254 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
247 255
248 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 256 const base::TimeTicks reference_time = testing_clock_->NowTicks();
249 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 257 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
250 258
251 task_runner_->RunTasks(); 259 task_runner_->RunTasks();
252 EXPECT_LE(1, transport_.number_of_rtp_packets()); 260 EXPECT_LE(1, transport_->number_of_rtp_packets());
253 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 261 EXPECT_LE(1, transport_->number_of_rtcp_packets());
254 } 262 }
255 263
256 TEST_F(VideoSenderTest, ExternalEncoder) { 264 TEST_F(VideoSenderTest, ExternalEncoder) {
257 InitEncoder(true, true); 265 InitEncoder(true, true);
258 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 266 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
259 267
260 // The SizeAdaptableExternalVideoEncoder initally reports STATUS_INITIALIZED 268 // The SizeAdaptableExternalVideoEncoder initally reports STATUS_INITIALIZED
261 // so that frames will be sent to it. Therefore, no encoder activity should 269 // so that frames will be sent to it. Therefore, no encoder activity should
262 // have occurred at this point. Send a frame to spurn creation of the 270 // have occurred at this point. Send a frame to spurn creation of the
263 // underlying ExternalVideoEncoder instance. 271 // underlying ExternalVideoEncoder instance.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 325 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
318 326
319 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 327 const base::TimeTicks reference_time = testing_clock_->NowTicks();
320 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 328 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
321 329
322 // Make sure that we send at least one RTCP packet. 330 // Make sure that we send at least one RTCP packet.
323 base::TimeDelta max_rtcp_timeout = 331 base::TimeDelta max_rtcp_timeout =
324 base::TimeDelta::FromMilliseconds(1 + kRtcpReportIntervalMs * 3 / 2); 332 base::TimeDelta::FromMilliseconds(1 + kRtcpReportIntervalMs * 3 / 2);
325 333
326 RunTasks(max_rtcp_timeout.InMilliseconds()); 334 RunTasks(max_rtcp_timeout.InMilliseconds());
327 EXPECT_LE(1, transport_.number_of_rtp_packets()); 335 EXPECT_LE(1, transport_->number_of_rtp_packets());
328 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 336 EXPECT_LE(1, transport_->number_of_rtcp_packets());
329 // Build Cast msg and expect RTCP packet. 337 // Build Cast msg and expect RTCP packet.
330 RtcpCastMessage cast_feedback(1); 338 RtcpCastMessage cast_feedback(1);
331 cast_feedback.media_ssrc = 2; 339 cast_feedback.media_ssrc = 2;
332 cast_feedback.ack_frame_id = 0; 340 cast_feedback.ack_frame_id = 0;
333 video_sender_->OnReceivedCastFeedback(cast_feedback); 341 video_sender_->OnReceivedCastFeedback(cast_feedback);
334 RunTasks(max_rtcp_timeout.InMilliseconds()); 342 RunTasks(max_rtcp_timeout.InMilliseconds());
335 EXPECT_LE(1, transport_.number_of_rtcp_packets()); 343 EXPECT_LE(1, transport_->number_of_rtcp_packets());
336 } 344 }
337 345
338 TEST_F(VideoSenderTest, ResendTimer) { 346 TEST_F(VideoSenderTest, ResendTimer) {
339 InitEncoder(false, true); 347 InitEncoder(false, true);
340 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 348 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
341 349
342 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 350 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
343 351
344 const base::TimeTicks reference_time = testing_clock_->NowTicks(); 352 const base::TimeTicks reference_time = testing_clock_->NowTicks();
345 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 353 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
346 354
347 // ACK the key frame. 355 // ACK the key frame.
348 RtcpCastMessage cast_feedback(1); 356 RtcpCastMessage cast_feedback(1);
349 cast_feedback.media_ssrc = 2; 357 cast_feedback.media_ssrc = 2;
350 cast_feedback.ack_frame_id = 0; 358 cast_feedback.ack_frame_id = 0;
351 video_sender_->OnReceivedCastFeedback(cast_feedback); 359 video_sender_->OnReceivedCastFeedback(cast_feedback);
352 360
353 video_frame = GetNewVideoFrame(); 361 video_frame = GetNewVideoFrame();
354 video_sender_->InsertRawVideoFrame(video_frame, reference_time); 362 video_sender_->InsertRawVideoFrame(video_frame, reference_time);
355 363
356 base::TimeDelta max_resend_timeout = 364 base::TimeDelta max_resend_timeout =
357 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs); 365 base::TimeDelta::FromMilliseconds(1 + kDefaultRtpMaxDelayMs);
358 366
359 // Make sure that we do a re-send. 367 // Make sure that we do a re-send.
360 RunTasks(max_resend_timeout.InMilliseconds()); 368 RunTasks(max_resend_timeout.InMilliseconds());
361 // Should have sent at least 3 packets. 369 // Should have sent at least 3 packets.
362 EXPECT_LE( 370 EXPECT_LE(3, transport_->number_of_rtp_packets() +
363 3, 371 transport_->number_of_rtcp_packets());
364 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
365 } 372 }
366 373
367 TEST_F(VideoSenderTest, LogAckReceivedEvent) { 374 TEST_F(VideoSenderTest, LogAckReceivedEvent) {
368 InitEncoder(false, true); 375 InitEncoder(false, true);
369 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 376 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
370 377
371 SimpleEventSubscriber event_subscriber; 378 SimpleEventSubscriber event_subscriber;
372 cast_environment_->logger()->Subscribe(&event_subscriber); 379 cast_environment_->logger()->Subscribe(&event_subscriber);
373 380
374 int num_frames = 10; 381 int num_frames = 10;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 414 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
408 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 415 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
409 RunTasks(33); 416 RunTasks(33);
410 417
411 // Send 3 more frames and record the number of packets sent. 418 // Send 3 more frames and record the number of packets sent.
412 for (int i = 0; i < 3; ++i) { 419 for (int i = 0; i < 3; ++i) {
413 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 420 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
414 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 421 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
415 RunTasks(33); 422 RunTasks(33);
416 } 423 }
417 const int number_of_packets_sent = transport_.number_of_rtp_packets(); 424 const int number_of_packets_sent = transport_->number_of_rtp_packets();
418 425
419 // Send 3 more frames - they should not be encoded, as we have not received 426 // Send 3 more frames - they should not be encoded, as we have not received
420 // any acks. 427 // any acks.
421 for (int i = 0; i < 3; ++i) { 428 for (int i = 0; i < 3; ++i) {
422 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 429 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
423 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 430 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
424 RunTasks(33); 431 RunTasks(33);
425 } 432 }
426 433
427 // We expect a frame to be retransmitted because of duplicated ACKs. 434 // We expect a frame to be retransmitted because of duplicated ACKs.
428 // Only one packet of the frame is re-transmitted. 435 // Only one packet of the frame is re-transmitted.
429 EXPECT_EQ(number_of_packets_sent + 1, 436 EXPECT_EQ(number_of_packets_sent + 1, transport_->number_of_rtp_packets());
430 transport_.number_of_rtp_packets());
431 437
432 // Start acking and make sure we're back to steady-state. 438 // Start acking and make sure we're back to steady-state.
433 RtcpCastMessage cast_feedback(1); 439 RtcpCastMessage cast_feedback(1);
434 cast_feedback.media_ssrc = 2; 440 cast_feedback.media_ssrc = 2;
435 cast_feedback.ack_frame_id = 0; 441 cast_feedback.ack_frame_id = 0;
436 video_sender_->OnReceivedCastFeedback(cast_feedback); 442 video_sender_->OnReceivedCastFeedback(cast_feedback);
437 EXPECT_LE( 443 EXPECT_LE(4, transport_->number_of_rtp_packets() +
438 4, 444 transport_->number_of_rtcp_packets());
439 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
440 445
441 // Empty the pipeline. 446 // Empty the pipeline.
442 RunTasks(100); 447 RunTasks(100);
443 // Should have sent at least 7 packets. 448 // Should have sent at least 7 packets.
444 EXPECT_LE( 449 EXPECT_LE(7, transport_->number_of_rtp_packets() +
445 7, 450 transport_->number_of_rtcp_packets());
446 transport_.number_of_rtp_packets() + transport_.number_of_rtcp_packets());
447 } 451 }
448 452
449 TEST_F(VideoSenderTest, DuplicateAckRetransmit) { 453 TEST_F(VideoSenderTest, DuplicateAckRetransmit) {
450 InitEncoder(false, true); 454 InitEncoder(false, true);
451 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 455 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
452 456
453 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 457 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
454 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 458 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
455 RunTasks(33); 459 RunTasks(33);
456 RtcpCastMessage cast_feedback(1); 460 RtcpCastMessage cast_feedback(1);
457 cast_feedback.media_ssrc = 2; 461 cast_feedback.media_ssrc = 2;
458 cast_feedback.ack_frame_id = 0; 462 cast_feedback.ack_frame_id = 0;
459 463
460 // Send 3 more frames but don't ACK. 464 // Send 3 more frames but don't ACK.
461 for (int i = 0; i < 3; ++i) { 465 for (int i = 0; i < 3; ++i) {
462 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 466 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
463 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 467 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
464 RunTasks(33); 468 RunTasks(33);
465 } 469 }
466 const int number_of_packets_sent = transport_.number_of_rtp_packets(); 470 const int number_of_packets_sent = transport_->number_of_rtp_packets();
467 471
468 // Send duplicated ACKs and mix some invalid NACKs. 472 // Send duplicated ACKs and mix some invalid NACKs.
469 for (int i = 0; i < 10; ++i) { 473 for (int i = 0; i < 10; ++i) {
470 RtcpCastMessage ack_feedback(1); 474 RtcpCastMessage ack_feedback(1);
471 ack_feedback.media_ssrc = 2; 475 ack_feedback.media_ssrc = 2;
472 ack_feedback.ack_frame_id = 0; 476 ack_feedback.ack_frame_id = 0;
473 RtcpCastMessage nack_feedback(1); 477 RtcpCastMessage nack_feedback(1);
474 nack_feedback.media_ssrc = 2; 478 nack_feedback.media_ssrc = 2;
475 nack_feedback.missing_frames_and_packets[255] = PacketIdSet(); 479 nack_feedback.missing_frames_and_packets[255] = PacketIdSet();
476 video_sender_->OnReceivedCastFeedback(ack_feedback); 480 video_sender_->OnReceivedCastFeedback(ack_feedback);
477 video_sender_->OnReceivedCastFeedback(nack_feedback); 481 video_sender_->OnReceivedCastFeedback(nack_feedback);
478 } 482 }
479 EXPECT_EQ(number_of_packets_sent, transport_.number_of_rtp_packets()); 483 EXPECT_EQ(number_of_packets_sent, transport_->number_of_rtp_packets());
480 484
481 // Re-transmit one packet because of duplicated ACKs. 485 // Re-transmit one packet because of duplicated ACKs.
482 for (int i = 0; i < 3; ++i) { 486 for (int i = 0; i < 3; ++i) {
483 RtcpCastMessage ack_feedback(1); 487 RtcpCastMessage ack_feedback(1);
484 ack_feedback.media_ssrc = 2; 488 ack_feedback.media_ssrc = 2;
485 ack_feedback.ack_frame_id = 0; 489 ack_feedback.ack_frame_id = 0;
486 video_sender_->OnReceivedCastFeedback(ack_feedback); 490 video_sender_->OnReceivedCastFeedback(ack_feedback);
487 } 491 }
488 EXPECT_EQ(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 492 EXPECT_EQ(number_of_packets_sent + 1, transport_->number_of_rtp_packets());
489 } 493 }
490 494
491 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) { 495 TEST_F(VideoSenderTest, DuplicateAckRetransmitDoesNotCancelRetransmits) {
492 InitEncoder(false, true); 496 InitEncoder(false, true);
493 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 497 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
494 498
495 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 499 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
496 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 500 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
497 RunTasks(33); 501 RunTasks(33);
498 RtcpCastMessage cast_feedback(1); 502 RtcpCastMessage cast_feedback(1);
499 cast_feedback.media_ssrc = 2; 503 cast_feedback.media_ssrc = 2;
500 cast_feedback.ack_frame_id = 0; 504 cast_feedback.ack_frame_id = 0;
501 505
502 // Send 2 more frames but don't ACK. 506 // Send 2 more frames but don't ACK.
503 for (int i = 0; i < 2; ++i) { 507 for (int i = 0; i < 2; ++i) {
504 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame(); 508 scoped_refptr<media::VideoFrame> video_frame = GetNewVideoFrame();
505 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 509 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
506 RunTasks(33); 510 RunTasks(33);
507 } 511 }
508 // Pause the transport 512 // Pause the transport
509 transport_.SetPause(true); 513 transport_->SetPause(true);
510 514
511 // Insert one more video frame. 515 // Insert one more video frame.
512 video_frame = GetLargeNewVideoFrame(); 516 video_frame = GetLargeNewVideoFrame();
513 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 517 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
514 RunTasks(33); 518 RunTasks(33);
515 519
516 const int number_of_packets_sent = transport_.number_of_rtp_packets(); 520 const int number_of_packets_sent = transport_->number_of_rtp_packets();
517 521
518 // Send duplicated ACKs and mix some invalid NACKs. 522 // Send duplicated ACKs and mix some invalid NACKs.
519 for (int i = 0; i < 10; ++i) { 523 for (int i = 0; i < 10; ++i) {
520 RtcpCastMessage ack_feedback(1); 524 RtcpCastMessage ack_feedback(1);
521 ack_feedback.media_ssrc = 2; 525 ack_feedback.media_ssrc = 2;
522 ack_feedback.ack_frame_id = 0; 526 ack_feedback.ack_frame_id = 0;
523 RtcpCastMessage nack_feedback(1); 527 RtcpCastMessage nack_feedback(1);
524 nack_feedback.media_ssrc = 2; 528 nack_feedback.media_ssrc = 2;
525 nack_feedback.missing_frames_and_packets[255] = PacketIdSet(); 529 nack_feedback.missing_frames_and_packets[255] = PacketIdSet();
526 video_sender_->OnReceivedCastFeedback(ack_feedback); 530 video_sender_->OnReceivedCastFeedback(ack_feedback);
527 video_sender_->OnReceivedCastFeedback(nack_feedback); 531 video_sender_->OnReceivedCastFeedback(nack_feedback);
528 } 532 }
529 EXPECT_EQ(number_of_packets_sent, transport_.number_of_rtp_packets()); 533 EXPECT_EQ(number_of_packets_sent, transport_->number_of_rtp_packets());
530 534
531 // Re-transmit one packet because of duplicated ACKs. 535 // Re-transmit one packet because of duplicated ACKs.
532 for (int i = 0; i < 3; ++i) { 536 for (int i = 0; i < 3; ++i) {
533 RtcpCastMessage ack_feedback(1); 537 RtcpCastMessage ack_feedback(1);
534 ack_feedback.media_ssrc = 2; 538 ack_feedback.media_ssrc = 2;
535 ack_feedback.ack_frame_id = 0; 539 ack_feedback.ack_frame_id = 0;
536 video_sender_->OnReceivedCastFeedback(ack_feedback); 540 video_sender_->OnReceivedCastFeedback(ack_feedback);
537 } 541 }
538 542
539 transport_.SetPause(false); 543 transport_->SetPause(false);
540 RunTasks(100); 544 RunTasks(100);
541 EXPECT_LT(number_of_packets_sent + 1, transport_.number_of_rtp_packets()); 545 EXPECT_LT(number_of_packets_sent + 1, transport_->number_of_rtp_packets());
542 } 546 }
543 547
544 TEST_F(VideoSenderTest, AcksCancelRetransmits) { 548 TEST_F(VideoSenderTest, AcksCancelRetransmits) {
545 InitEncoder(false, true); 549 InitEncoder(false, true);
546 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 550 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
547 551
548 transport_.SetPause(true); 552 transport_->SetPause(true);
549 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame(); 553 scoped_refptr<media::VideoFrame> video_frame = GetLargeNewVideoFrame();
550 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks()); 554 video_sender_->InsertRawVideoFrame(video_frame, testing_clock_->NowTicks());
551 RunTasks(33); 555 RunTasks(33);
552 556
553 // Frame should be in buffer, waiting. Now let's ack it. 557 // Frame should be in buffer, waiting. Now let's ack it.
554 RtcpCastMessage cast_feedback(1); 558 RtcpCastMessage cast_feedback(1);
555 cast_feedback.media_ssrc = 2; 559 cast_feedback.media_ssrc = 2;
556 cast_feedback.ack_frame_id = 0; 560 cast_feedback.ack_frame_id = 0;
557 video_sender_->OnReceivedCastFeedback(cast_feedback); 561 video_sender_->OnReceivedCastFeedback(cast_feedback);
558 562
559 transport_.SetPause(false); 563 transport_->SetPause(false);
560 RunTasks(33); 564 RunTasks(33);
561 EXPECT_EQ(0, transport_.number_of_rtp_packets()); 565 EXPECT_EQ(0, transport_->number_of_rtp_packets());
562 } 566 }
563 567
564 TEST_F(VideoSenderTest, CheckVideoFrameFactoryIsNull) { 568 TEST_F(VideoSenderTest, CheckVideoFrameFactoryIsNull) {
565 InitEncoder(false, true); 569 InitEncoder(false, true);
566 ASSERT_EQ(STATUS_INITIALIZED, operational_status_); 570 ASSERT_EQ(STATUS_INITIALIZED, operational_status_);
567 571
568 EXPECT_EQ(nullptr, video_sender_->CreateVideoFrameFactory().get()); 572 EXPECT_EQ(nullptr, video_sender_->CreateVideoFrameFactory().get());
569 } 573 }
570 574
571 TEST_F(VideoSenderTest, PopulatesResourceUtilizationInFrameMetadata) { 575 TEST_F(VideoSenderTest, PopulatesResourceUtilizationInFrameMetadata) {
(...skipping 21 matching lines...) Expand all
593 media::VideoFrameMetadata::RESOURCE_UTILIZATION, &utilization)); 597 media::VideoFrameMetadata::RESOURCE_UTILIZATION, &utilization));
594 EXPECT_LE(0.0, utilization); 598 EXPECT_LE(0.0, utilization);
595 if (i == 0) 599 if (i == 0)
596 EXPECT_GE(1.0, utilization); // Key frames never exceed 1.0. 600 EXPECT_GE(1.0, utilization); // Key frames never exceed 1.0.
597 DVLOG(1) << "Utilization computed by VideoSender is: " << utilization; 601 DVLOG(1) << "Utilization computed by VideoSender is: " << utilization;
598 } 602 }
599 } 603 }
600 604
601 } // namespace cast 605 } // namespace cast
602 } // namespace media 606 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/sender/audio_sender_unittest.cc ('k') | media/cast/test/cast_benchmarks.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698