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

Side by Side Diff: media/cast/test/end2end_unittest.cc

Issue 126843003: Revert of Cast:Adding cast_transport_config and cleaning up (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « media/cast/test/encode_decode_test.cc ('k') | media/cast/test/receiver.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 // This test generate synthetic data. For audio it's a sinusoid waveform with 5 // This test generate synthetic data. For audio it's a sinusoid waveform with
6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern 6 // frequency kSoundFrequency and different amplitudes. For video it's a pattern
7 // that is shifting by one pixel per frame, each pixels neighbors right and down 7 // that is shifting by one pixel per frame, each pixels neighbors right and down
8 // is this pixels value +1, since the pixel value is 8 bit it will wrap 8 // is this pixels value +1, since the pixel value is 8 bit it will wrap
9 // frequently within the image. Visually this will create diagonally color bands 9 // frequently within the image. Visually this will create diagonally color bands
10 // that moves across the screen 10 // that moves across the screen
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 class LoopBackTransport : public PacketSender { 66 class LoopBackTransport : public PacketSender {
67 public: 67 public:
68 explicit LoopBackTransport(scoped_refptr<CastEnvironment> cast_environment) 68 explicit LoopBackTransport(scoped_refptr<CastEnvironment> cast_environment)
69 : packet_receiver_(NULL), 69 : packet_receiver_(NULL),
70 send_packets_(true), 70 send_packets_(true),
71 drop_packets_belonging_to_odd_frames_(false), 71 drop_packets_belonging_to_odd_frames_(false),
72 reset_reference_frame_id_(false), 72 reset_reference_frame_id_(false),
73 cast_environment_(cast_environment) { 73 cast_environment_(cast_environment) {
74 } 74 }
75 75
76 void RegisterPacketReceiver(transport::PacketReceiver* packet_receiver) { 76 void RegisterPacketReceiver(PacketReceiver* packet_receiver) {
77 DCHECK(packet_receiver); 77 DCHECK(packet_receiver);
78 packet_receiver_ = packet_receiver; 78 packet_receiver_ = packet_receiver;
79 } 79 }
80 80
81 virtual bool SendPacket(const Packet& packet) OVERRIDE { 81 virtual bool SendPacket(const Packet& packet) OVERRIDE {
82 DCHECK(packet_receiver_); 82 DCHECK(packet_receiver_);
83 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 83 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
84 if (!send_packets_) return false; 84 if (!send_packets_) return false;
85 85
86 uint8* packet_copy = new uint8[packet.size()]; 86 uint8* packet_copy = new uint8[packet.size()];
87 memcpy(packet_copy, packet.data(), packet.size()); 87 memcpy(packet_copy, packet.data(), packet.size());
88 packet_receiver_->ReceivedPacket(packet_copy, packet.size(), 88 packet_receiver_->ReceivedPacket(packet_copy, packet.size(),
89 base::Bind(transport::PacketReceiver::DeletePacket, packet_copy)); 89 base::Bind(PacketReceiver::DeletePacket, packet_copy));
90 return true; 90 return true;
91 } 91 }
92 92
93 virtual bool SendPackets(const PacketList& packets) OVERRIDE { 93 virtual bool SendPackets(const PacketList& packets) OVERRIDE {
94 DCHECK(packet_receiver_); 94 DCHECK(packet_receiver_);
95 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 95 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
96 if (!send_packets_) return false; 96 if (!send_packets_) return false;
97 97
98 for (size_t i = 0; i < packets.size(); ++i) { 98 for (size_t i = 0; i < packets.size(); ++i) {
99 const Packet& packet = packets[i]; 99 const Packet& packet = packets[i];
100 if (drop_packets_belonging_to_odd_frames_) { 100 if (drop_packets_belonging_to_odd_frames_) {
101 uint32 frame_id = packet[13]; 101 uint32 frame_id = packet[13];
102 if (frame_id % 2 == 1) continue; 102 if (frame_id % 2 == 1) continue;
103 } 103 }
104 uint8* packet_copy = new uint8[packet.size()]; 104 uint8* packet_copy = new uint8[packet.size()];
105 memcpy(packet_copy, packet.data(), packet.size()); 105 memcpy(packet_copy, packet.data(), packet.size());
106 if (reset_reference_frame_id_) { 106 if (reset_reference_frame_id_) {
107 // Reset the is_reference bit in the cast header. 107 // Reset the is_reference bit in the cast header.
108 packet_copy[kCommonRtpHeaderLength] &= kCastReferenceFrameIdBitReset; 108 packet_copy[kCommonRtpHeaderLength] &= kCastReferenceFrameIdBitReset;
109 } 109 }
110 packet_receiver_->ReceivedPacket(packet_copy, packet.size(), 110 packet_receiver_->ReceivedPacket(packet_copy, packet.size(),
111 base::Bind(transport::PacketReceiver::DeletePacket, packet_copy)); 111 base::Bind(PacketReceiver::DeletePacket, packet_copy));
112 } 112 }
113 return true; 113 return true;
114 } 114 }
115 115
116 void SetSendPackets(bool send_packets) { 116 void SetSendPackets(bool send_packets) {
117 send_packets_ = send_packets; 117 send_packets_ = send_packets;
118 } 118 }
119 119
120 void DropAllPacketsBelongingToOddFrames() { 120 void DropAllPacketsBelongingToOddFrames() {
121 drop_packets_belonging_to_odd_frames_ = true; 121 drop_packets_belonging_to_odd_frames_ = true;
122 } 122 }
123 123
124 void AlwaysResetReferenceFrameId() { 124 void AlwaysResetReferenceFrameId() {
125 reset_reference_frame_id_ = true; 125 reset_reference_frame_id_ = true;
126 } 126 }
127 127
128 private: 128 private:
129 transport::PacketReceiver* packet_receiver_; 129 PacketReceiver* packet_receiver_;
130 bool send_packets_; 130 bool send_packets_;
131 bool drop_packets_belonging_to_odd_frames_; 131 bool drop_packets_belonging_to_odd_frames_;
132 bool reset_reference_frame_id_; 132 bool reset_reference_frame_id_;
133 scoped_refptr<CastEnvironment> cast_environment_; 133 scoped_refptr<CastEnvironment> cast_environment_;
134 }; 134 };
135 135
136 // Class that verifies the audio frames coming out of the receiver. 136 // Class that verifies the audio frames coming out of the receiver.
137 class TestReceiverAudioCallback : 137 class TestReceiverAudioCallback :
138 public base::RefCountedThreadSafe<TestReceiverAudioCallback> { 138 public base::RefCountedThreadSafe<TestReceiverAudioCallback> {
139 public: 139 public:
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 CheckBasicAudioFrame(audio_frame, playout_time); 196 CheckBasicAudioFrame(audio_frame, playout_time);
197 ExpectedAudioFrame expected_audio_frame = expected_frame_.front(); 197 ExpectedAudioFrame expected_audio_frame = expected_frame_.front();
198 expected_frame_.pop_front(); 198 expected_frame_.pop_front();
199 if (audio_frame->samples.size() == 0) return; // No more checks needed. 199 if (audio_frame->samples.size() == 0) return; // No more checks needed.
200 200
201 EXPECT_NEAR(CountZeroCrossings(expected_audio_frame.audio_frame.samples), 201 EXPECT_NEAR(CountZeroCrossings(expected_audio_frame.audio_frame.samples),
202 CountZeroCrossings(audio_frame->samples), 202 CountZeroCrossings(audio_frame->samples),
203 1); 203 1);
204 } 204 }
205 205
206 void CheckCodedPcmAudioFrame( 206 void CheckCodedPcmAudioFrame(scoped_ptr<EncodedAudioFrame> audio_frame,
207 scoped_ptr<transport::EncodedAudioFrame> audio_frame, 207 const base::TimeTicks& playout_time) {
208 const base::TimeTicks& playout_time) {
209 ++num_called_; 208 ++num_called_;
210 209
211 EXPECT_FALSE(expected_frame_.empty()); // Test for bug in test code. 210 EXPECT_FALSE(expected_frame_.empty()); // Test for bug in test code.
212 ExpectedAudioFrame expected_audio_frame = expected_frame_.front(); 211 ExpectedAudioFrame expected_audio_frame = expected_frame_.front();
213 expected_frame_.pop_front(); 212 expected_frame_.pop_front();
214 213
215 EXPECT_EQ(static_cast<int>(audio_frame->data.size()), 214 EXPECT_EQ(static_cast<int>(audio_frame->data.size()),
216 2 * kAudioChannels * expected_sampling_frequency_ / 100); 215 2 * kAudioChannels * expected_sampling_frequency_ / 100);
217 216
218 base::TimeDelta time_since_recording = 217 base::TimeDelta time_since_recording =
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 return config; 327 return config;
329 } 328 }
330 // The actual test class, generate synthetic data for both audio and video and 329 // The actual test class, generate synthetic data for both audio and video and
331 // send those through the sender and receiver and analyzes the result. 330 // send those through the sender and receiver and analyzes the result.
332 class End2EndTest : public ::testing::Test { 331 class End2EndTest : public ::testing::Test {
333 protected: 332 protected:
334 End2EndTest() 333 End2EndTest()
335 : task_runner_(new test::FakeTaskRunner(&testing_clock_)), 334 : task_runner_(new test::FakeTaskRunner(&testing_clock_)),
336 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, 335 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_,
337 task_runner_, task_runner_, task_runner_, task_runner_, 336 task_runner_, task_runner_, task_runner_, task_runner_,
338 task_runner_, EnableCastLoggingConfig())), 337 EnableCastLoggingConfig())),
339 start_time_(), 338 start_time_(),
340 sender_to_receiver_(cast_environment_), 339 sender_to_receiver_(cast_environment_),
341 receiver_to_sender_(cast_environment_), 340 receiver_to_sender_(cast_environment_),
342 test_receiver_audio_callback_(new TestReceiverAudioCallback()), 341 test_receiver_audio_callback_(new TestReceiverAudioCallback()),
343 test_receiver_video_callback_(new TestReceiverVideoCallback()) { 342 test_receiver_video_callback_(new TestReceiverVideoCallback()) {
344 testing_clock_.Advance( 343 testing_clock_.Advance(
345 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 344 base::TimeDelta::FromMilliseconds(kStartMillisecond));
346 } 345 }
347 346
348 void SetupConfig(transport::AudioCodec audio_codec, 347 void SetupConfig(AudioCodec audio_codec,
349 int audio_sampling_frequency, 348 int audio_sampling_frequency,
350 // TODO(miu): 3rd arg is meaningless?!? 349 // TODO(miu): 3rd arg is meaningless?!?
351 bool external_audio_decoder, 350 bool external_audio_decoder,
352 int max_number_of_video_buffers_used) { 351 int max_number_of_video_buffers_used) {
353 audio_sender_config_.sender_ssrc = 1; 352 audio_sender_config_.sender_ssrc = 1;
354 audio_sender_config_.incoming_feedback_ssrc = 2; 353 audio_sender_config_.incoming_feedback_ssrc = 2;
355 audio_sender_config_.rtp_payload_type = 96; 354 audio_sender_config_.rtp_payload_type = 96;
356 audio_sender_config_.use_external_encoder = false; 355 audio_sender_config_.use_external_encoder = false;
357 audio_sender_config_.frequency = audio_sampling_frequency; 356 audio_sender_config_.frequency = audio_sampling_frequency;
358 audio_sender_config_.channels = kAudioChannels; 357 audio_sender_config_.channels = kAudioChannels;
(...skipping 21 matching lines...) Expand all
380 video_sender_config_.width = kVideoWidth; 379 video_sender_config_.width = kVideoWidth;
381 video_sender_config_.height = kVideoHeight; 380 video_sender_config_.height = kVideoHeight;
382 video_sender_config_.max_bitrate = 5000000; 381 video_sender_config_.max_bitrate = 5000000;
383 video_sender_config_.min_bitrate = 1000000; 382 video_sender_config_.min_bitrate = 1000000;
384 video_sender_config_.start_bitrate = 5000000; 383 video_sender_config_.start_bitrate = 5000000;
385 video_sender_config_.max_qp = 30; 384 video_sender_config_.max_qp = 30;
386 video_sender_config_.min_qp = 4; 385 video_sender_config_.min_qp = 4;
387 video_sender_config_.max_frame_rate = 30; 386 video_sender_config_.max_frame_rate = 30;
388 video_sender_config_.max_number_of_video_buffers_used = 387 video_sender_config_.max_number_of_video_buffers_used =
389 max_number_of_video_buffers_used; 388 max_number_of_video_buffers_used;
390 video_sender_config_.codec = transport::kVp8; 389 video_sender_config_.codec = kVp8;
391 video_sender_config_.number_of_cores = 1; 390 video_sender_config_.number_of_cores = 1;
392 391
393 video_receiver_config_.feedback_ssrc = 392 video_receiver_config_.feedback_ssrc =
394 video_sender_config_.incoming_feedback_ssrc; 393 video_sender_config_.incoming_feedback_ssrc;
395 video_receiver_config_.incoming_ssrc = 394 video_receiver_config_.incoming_ssrc =
396 video_sender_config_.sender_ssrc; 395 video_sender_config_.sender_ssrc;
397 video_receiver_config_.rtp_payload_type = 396 video_receiver_config_.rtp_payload_type =
398 video_sender_config_.rtp_payload_type; 397 video_sender_config_.rtp_payload_type;
399 video_receiver_config_.use_external_decoder = false; 398 video_receiver_config_.use_external_decoder = false;
400 video_receiver_config_.codec = video_sender_config_.codec; 399 video_receiver_config_.codec = video_sender_config_.codec;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 466
468 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; 467 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_;
469 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; 468 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_;
470 469
471 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; 470 scoped_ptr<TestAudioBusFactory> audio_bus_factory_;
472 }; 471 };
473 472
474 // Audio and video test without packet loss using raw PCM 16 audio "codec"; 473 // Audio and video test without packet loss using raw PCM 16 audio "codec";
475 // This test is too slow. Disabled for now: crbug.com/329333. 474 // This test is too slow. Disabled for now: crbug.com/329333.
476 TEST_F(End2EndTest, DISABLED_LoopNoLossPcm16) { 475 TEST_F(End2EndTest, DISABLED_LoopNoLossPcm16) {
477 SetupConfig(transport::kPcm16, 32000, false, 1); 476 SetupConfig(kPcm16, 32000, false, 1);
478 Create(); 477 Create();
479 478
480 int video_start = 1; 479 int video_start = 1;
481 int audio_diff = kFrameTimerMs; 480 int audio_diff = kFrameTimerMs;
482 int i = 0; 481 int i = 0;
483 482
484 std::cout << "Progress "; 483 std::cout << "Progress ";
485 for (; i < 10; ++i) { 484 for (; i < 10; ++i) {
486 int num_10ms_blocks = audio_diff / 10; 485 int num_10ms_blocks = audio_diff / 10;
487 audio_diff -= num_10ms_blocks * 10; 486 audio_diff -= num_10ms_blocks * 10;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 // TODO(mikhal): Crashes on the Win7 x64 bots. Re-enable. 539 // TODO(mikhal): Crashes on the Win7 x64 bots. Re-enable.
541 // http://crbug.com/329563 540 // http://crbug.com/329563
542 #if defined(OS_WIN) 541 #if defined(OS_WIN)
543 #define MAYBE_LoopNoLossPcm16ExternalDecoder DISABLED_LoopNoLossPcm16ExternalDec oder 542 #define MAYBE_LoopNoLossPcm16ExternalDecoder DISABLED_LoopNoLossPcm16ExternalDec oder
544 #else 543 #else
545 #define MAYBE_LoopNoLossPcm16ExternalDecoder LoopNoLossPcm16ExternalDecoder 544 #define MAYBE_LoopNoLossPcm16ExternalDecoder LoopNoLossPcm16ExternalDecoder
546 #endif 545 #endif
547 // This tests our external decoder interface for Audio. 546 // This tests our external decoder interface for Audio.
548 // Audio test without packet loss using raw PCM 16 audio "codec"; 547 // Audio test without packet loss using raw PCM 16 audio "codec";
549 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16ExternalDecoder) { 548 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16ExternalDecoder) {
550 SetupConfig(transport::kPcm16, 32000, true, 1); 549 SetupConfig(kPcm16, 32000, true, 1);
551 Create(); 550 Create();
552 551
553 int i = 0; 552 int i = 0;
554 for (; i < 10; ++i) { 553 for (; i < 10; ++i) {
555 base::TimeTicks send_time = testing_clock_.NowTicks(); 554 base::TimeTicks send_time = testing_clock_.NowTicks();
556 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 555 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
557 base::TimeDelta::FromMilliseconds(10))); 556 base::TimeDelta::FromMilliseconds(10)));
558 test_receiver_audio_callback_->AddExpectedResult( 557 test_receiver_audio_callback_->AddExpectedResult(
559 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), 558 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency),
560 1, send_time); 559 1, send_time);
(...skipping 12 matching lines...) Expand all
573 } 572 }
574 573
575 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 574 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563
576 #if defined(OS_WIN) 575 #if defined(OS_WIN)
577 #define MAYBE_LoopNoLossOpus DISABLED_LoopNoLossOpus 576 #define MAYBE_LoopNoLossOpus DISABLED_LoopNoLossOpus
578 #else 577 #else
579 #define MAYBE_LoopNoLossOpus LoopNoLossOpus 578 #define MAYBE_LoopNoLossOpus LoopNoLossOpus
580 #endif 579 #endif
581 // This tests our Opus audio codec without video. 580 // This tests our Opus audio codec without video.
582 TEST_F(End2EndTest, MAYBE_LoopNoLossOpus) { 581 TEST_F(End2EndTest, MAYBE_LoopNoLossOpus) {
583 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 1); 582 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 1);
584 Create(); 583 Create();
585 584
586 int i = 0; 585 int i = 0;
587 for (; i < 10; ++i) { 586 for (; i < 10; ++i) {
588 int num_10ms_blocks = 3; 587 int num_10ms_blocks = 3;
589 base::TimeTicks send_time = testing_clock_.NowTicks(); 588 base::TimeTicks send_time = testing_clock_.NowTicks();
590 589
591 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( 590 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus(
592 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); 591 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks));
593 592
(...skipping 23 matching lines...) Expand all
617 } 616 }
618 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 617 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
619 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called()); 618 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called());
620 } 619 }
621 620
622 // This tests start sending audio and video before the receiver is ready. 621 // This tests start sending audio and video before the receiver is ready.
623 // 622 //
624 // TODO(miu): Test disabled because of non-determinism. 623 // TODO(miu): Test disabled because of non-determinism.
625 // http://crbug.com/314233 624 // http://crbug.com/314233
626 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) { 625 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
627 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 1); 626 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 1);
628 Create(); 627 Create();
629 628
630 int video_start = 1; 629 int video_start = 1;
631 int audio_diff = kFrameTimerMs; 630 int audio_diff = kFrameTimerMs;
632 631
633 sender_to_receiver_.SetSendPackets(false); 632 sender_to_receiver_.SetSendPackets(false);
634 633
635 for (int i = 0; i < 3; ++i) { 634 for (int i = 0; i < 3; ++i) {
636 int num_10ms_blocks = audio_diff / 10; 635 int num_10ms_blocks = audio_diff / 10;
637 audio_diff -= num_10ms_blocks * 10; 636 audio_diff -= num_10ms_blocks * 10;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 video_start++; 695 video_start++;
697 } 696 }
698 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 697 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
699 EXPECT_EQ(j - number_of_audio_frames_to_ignore, 698 EXPECT_EQ(j - number_of_audio_frames_to_ignore,
700 test_receiver_audio_callback_->number_times_called()); 699 test_receiver_audio_callback_->number_times_called());
701 EXPECT_EQ(j, test_receiver_video_callback_->number_times_called()); 700 EXPECT_EQ(j, test_receiver_video_callback_->number_times_called());
702 } 701 }
703 702
704 // This tests a network glitch lasting for 10 video frames. 703 // This tests a network glitch lasting for 10 video frames.
705 TEST_F(End2EndTest, GlitchWith3Buffers) { 704 TEST_F(End2EndTest, GlitchWith3Buffers) {
706 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); 705 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 3);
707 video_sender_config_.rtp_max_delay_ms = 67; 706 video_sender_config_.rtp_max_delay_ms = 67;
708 video_receiver_config_.rtp_max_delay_ms = 67; 707 video_receiver_config_.rtp_max_delay_ms = 67;
709 Create(); 708 Create();
710 709
711 int video_start = 50; 710 int video_start = 50;
712 base::TimeTicks send_time = testing_clock_.NowTicks(); 711 base::TimeTicks send_time = testing_clock_.NowTicks();
713 SendVideoFrame(video_start, send_time); 712 SendVideoFrame(video_start, send_time);
714 RunTasks(kFrameTimerMs); 713 RunTasks(kFrameTimerMs);
715 714
716 test_receiver_video_callback_->AddExpectedResult(video_start, 715 test_receiver_video_callback_->AddExpectedResult(video_start,
(...skipping 28 matching lines...) Expand all
745 744
746 frame_receiver_->GetRawVideoFrame( 745 frame_receiver_->GetRawVideoFrame(
747 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 746 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
748 test_receiver_video_callback_)); 747 test_receiver_video_callback_));
749 748
750 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 749 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
751 EXPECT_EQ(2, test_receiver_video_callback_->number_times_called()); 750 EXPECT_EQ(2, test_receiver_video_callback_->number_times_called());
752 } 751 }
753 752
754 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) { 753 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) {
755 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); 754 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 3);
756 video_sender_config_.rtp_max_delay_ms = 67; 755 video_sender_config_.rtp_max_delay_ms = 67;
757 video_receiver_config_.rtp_max_delay_ms = 67; 756 video_receiver_config_.rtp_max_delay_ms = 67;
758 Create(); 757 Create();
759 sender_to_receiver_.DropAllPacketsBelongingToOddFrames(); 758 sender_to_receiver_.DropAllPacketsBelongingToOddFrames();
760 759
761 int video_start = 50; 760 int video_start = 50;
762 base::TimeTicks send_time; 761 base::TimeTicks send_time;
763 762
764 std::cout << "Progress "; 763 std::cout << "Progress ";
765 int i = 0; 764 int i = 0;
(...skipping 14 matching lines...) Expand all
780 RunTasks(kFrameTimerMs); 779 RunTasks(kFrameTimerMs);
781 std::cout << " " << i << std::flush; 780 std::cout << " " << i << std::flush;
782 video_start++; 781 video_start++;
783 } 782 }
784 std::cout << std::endl; 783 std::cout << std::endl;
785 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 784 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
786 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called()); 785 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called());
787 } 786 }
788 787
789 TEST_F(End2EndTest, ResetReferenceFrameId) { 788 TEST_F(End2EndTest, ResetReferenceFrameId) {
790 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); 789 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 3);
791 video_sender_config_.rtp_max_delay_ms = 67; 790 video_sender_config_.rtp_max_delay_ms = 67;
792 video_receiver_config_.rtp_max_delay_ms = 67; 791 video_receiver_config_.rtp_max_delay_ms = 67;
793 Create(); 792 Create();
794 sender_to_receiver_.AlwaysResetReferenceFrameId(); 793 sender_to_receiver_.AlwaysResetReferenceFrameId();
795 794
796 int frames_counter = 0; 795 int frames_counter = 0;
797 for (; frames_counter < 20; ++frames_counter) { 796 for (; frames_counter < 20; ++frames_counter) {
798 const base::TimeTicks send_time = testing_clock_.NowTicks(); 797 const base::TimeTicks send_time = testing_clock_.NowTicks();
799 SendVideoFrame(frames_counter, send_time); 798 SendVideoFrame(frames_counter, send_time);
800 799
801 test_receiver_video_callback_->AddExpectedResult(frames_counter, 800 test_receiver_video_callback_->AddExpectedResult(frames_counter,
802 video_sender_config_.width, video_sender_config_.height, send_time); 801 video_sender_config_.width, video_sender_config_.height, send_time);
803 802
804 // GetRawVideoFrame will not return the frame until we are close to the 803 // GetRawVideoFrame will not return the frame until we are close to the
805 // time in which we should render the frame. 804 // time in which we should render the frame.
806 frame_receiver_->GetRawVideoFrame( 805 frame_receiver_->GetRawVideoFrame(
807 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 806 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
808 test_receiver_video_callback_)); 807 test_receiver_video_callback_));
809 RunTasks(kFrameTimerMs); 808 RunTasks(kFrameTimerMs);
810 } 809 }
811 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 810 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
812 EXPECT_EQ(frames_counter, 811 EXPECT_EQ(frames_counter,
813 test_receiver_video_callback_->number_times_called()); 812 test_receiver_video_callback_->number_times_called());
814 } 813 }
815 814
816 TEST_F(End2EndTest, CryptoVideo) { 815 TEST_F(End2EndTest, CryptoVideo) {
817 SetupConfig(transport::kPcm16, 32000, false, 1); 816 SetupConfig(kPcm16, 32000, false, 1);
818 817
819 video_sender_config_.aes_iv_mask = 818 video_sender_config_.aes_iv_mask =
820 ConvertFromBase16String("1234567890abcdeffedcba0987654321"); 819 ConvertFromBase16String("1234567890abcdeffedcba0987654321");
821 video_sender_config_.aes_key = 820 video_sender_config_.aes_key =
822 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef"); 821 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef");
823 822
824 video_receiver_config_.aes_iv_mask = video_sender_config_.aes_iv_mask; 823 video_receiver_config_.aes_iv_mask = video_sender_config_.aes_iv_mask;
825 video_receiver_config_.aes_key = video_sender_config_.aes_key; 824 video_receiver_config_.aes_key = video_sender_config_.aes_key;
826 825
827 Create(); 826 Create();
(...skipping 19 matching lines...) Expand all
847 test_receiver_video_callback_->number_times_called()); 846 test_receiver_video_callback_->number_times_called());
848 } 847 }
849 848
850 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 849 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563
851 #if defined(OS_WIN) 850 #if defined(OS_WIN)
852 #define MAYBE_CryptoAudio DISABLED_CryptoAudio 851 #define MAYBE_CryptoAudio DISABLED_CryptoAudio
853 #else 852 #else
854 #define MAYBE_CryptoAudio CryptoAudio 853 #define MAYBE_CryptoAudio CryptoAudio
855 #endif 854 #endif
856 TEST_F(End2EndTest, MAYBE_CryptoAudio) { 855 TEST_F(End2EndTest, MAYBE_CryptoAudio) {
857 SetupConfig(transport::kPcm16, 32000, false, 1); 856 SetupConfig(kPcm16, 32000, false, 1);
858 857
859 audio_sender_config_.aes_iv_mask = 858 audio_sender_config_.aes_iv_mask =
860 ConvertFromBase16String("abcdeffedcba12345678900987654321"); 859 ConvertFromBase16String("abcdeffedcba12345678900987654321");
861 audio_sender_config_.aes_key = 860 audio_sender_config_.aes_key =
862 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0"); 861 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0");
863 862
864 audio_receiver_config_.aes_iv_mask = audio_sender_config_.aes_iv_mask; 863 audio_receiver_config_.aes_iv_mask = audio_sender_config_.aes_iv_mask;
865 audio_receiver_config_.aes_key = audio_sender_config_.aes_key; 864 audio_receiver_config_.aes_key = audio_sender_config_.aes_key;
866 865
867 Create(); 866 Create();
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 } 901 }
903 } 902 }
904 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 903 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
905 EXPECT_EQ(frames_counter - 1, 904 EXPECT_EQ(frames_counter - 1,
906 test_receiver_audio_callback_->number_times_called()); 905 test_receiver_audio_callback_->number_times_called());
907 } 906 }
908 907
909 // Video test without packet loss; This test is targeted at testing the logging 908 // Video test without packet loss; This test is targeted at testing the logging
910 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. 909 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16.
911 TEST_F(End2EndTest, VideoLogging) { 910 TEST_F(End2EndTest, VideoLogging) {
912 SetupConfig(transport::kPcm16, 32000, false, 1); 911 SetupConfig(kPcm16, 32000, false, 1);
913 Create(); 912 Create();
914 913
915 int video_start = 1; 914 int video_start = 1;
916 int i = 0; 915 int i = 0;
917 for (; i < 1; ++i) { 916 for (; i < 1; ++i) {
918 base::TimeTicks send_time = testing_clock_.NowTicks(); 917 base::TimeTicks send_time = testing_clock_.NowTicks();
919 test_receiver_video_callback_->AddExpectedResult(video_start, 918 test_receiver_video_callback_->AddExpectedResult(video_start,
920 video_sender_config_.width, video_sender_config_.height, send_time); 919 video_sender_config_.width, video_sender_config_.height, send_time);
921 920
922 SendVideoFrame(video_start, send_time); 921 SendVideoFrame(video_start, send_time);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 959
961 // Packet logging. 960 // Packet logging.
962 // Verify that all packet related events were logged. 961 // Verify that all packet related events were logged.
963 PacketRawMap packet_raw_log = logging->GetPacketRawData(); 962 PacketRawMap packet_raw_log = logging->GetPacketRawData();
964 // Every rtp_timestamp should have only one entry. 963 // Every rtp_timestamp should have only one entry.
965 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size()); 964 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size());
966 PacketRawMap::const_iterator packet_it = packet_raw_log.begin(); 965 PacketRawMap::const_iterator packet_it = packet_raw_log.begin();
967 // Choose a packet, and verify that all events were logged. 966 // Choose a packet, and verify that all events were logged.
968 event_log = (++(packet_it->second.packet_map.begin()))->second.type; 967 event_log = (++(packet_it->second.packet_map.begin()))->second.type;
969 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), 968 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
969 kPacketSentToPacer)) != event_log.end());
970 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
971 kPacketSentToNetwork)) != event_log.end());
972 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(),
970 kPacketReceived)) != event_log.end()); 973 kPacketReceived)) != event_log.end());
971 // Verify that there were no other events logged with respect to this frame. 974 // Verify that there were no other events logged with respect to this frame.
972 EXPECT_EQ(1u, event_log.size()); 975 EXPECT_EQ(3u, event_log.size());
973 } 976 }
974 977
975 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 978 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563
976 #if defined(OS_WIN) 979 #if defined(OS_WIN)
977 #define MAYBE_AudioLogging DISABLED_AudioLogging 980 #define MAYBE_AudioLogging DISABLED_AudioLogging
978 #else 981 #else
979 #define MAYBE_AudioLogging AudioLogging 982 #define MAYBE_AudioLogging AudioLogging
980 #endif 983 #endif
981 // Audio test without packet loss; This test is targeted at testing the logging 984 // Audio test without packet loss; This test is targeted at testing the logging
982 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. 985 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16.
983 TEST_F(End2EndTest, MAYBE_AudioLogging) { 986 TEST_F(End2EndTest, MAYBE_AudioLogging) {
984 SetupConfig(transport::kPcm16, 32000, false, 1); 987 SetupConfig(kPcm16, 32000, false, 1);
985 Create(); 988 Create();
986 989
987 int audio_diff = kFrameTimerMs; 990 int audio_diff = kFrameTimerMs;
988 int i = 0; 991 int i = 0;
989 992
990 for (; i < 10; ++i) { 993 for (; i < 10; ++i) {
991 int num_10ms_blocks = audio_diff / 10; 994 int num_10ms_blocks = audio_diff / 10;
992 audio_diff -= num_10ms_blocks * 10; 995 audio_diff -= num_10ms_blocks * 10;
993 base::TimeTicks send_time = testing_clock_.NowTicks(); 996 base::TimeTicks send_time = testing_clock_.NowTicks();
994 997
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1054 } 1057 }
1055 1058
1056 1059
1057 // TODO(pwestin): Add repeatable packet loss test. 1060 // TODO(pwestin): Add repeatable packet loss test.
1058 // TODO(pwestin): Add test for misaligned send get calls. 1061 // TODO(pwestin): Add test for misaligned send get calls.
1059 // TODO(pwestin): Add more tests that does not resample. 1062 // TODO(pwestin): Add more tests that does not resample.
1060 // TODO(pwestin): Add test when we have starvation for our RunTask. 1063 // TODO(pwestin): Add test when we have starvation for our RunTask.
1061 1064
1062 } // namespace cast 1065 } // namespace cast
1063 } // namespace media 1066 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/test/encode_decode_test.cc ('k') | media/cast/test/receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698