OLD | NEW |
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 Loading... |
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(PacketReceiver* packet_receiver) { | 76 void RegisterPacketReceiver(transport::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(PacketReceiver::DeletePacket, packet_copy)); | 89 base::Bind(transport::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(PacketReceiver::DeletePacket, packet_copy)); | 111 base::Bind(transport::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 PacketReceiver* packet_receiver_; | 129 transport::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 Loading... |
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(scoped_ptr<EncodedAudioFrame> audio_frame, | 206 void CheckCodedPcmAudioFrame( |
207 const base::TimeTicks& playout_time) { | 207 scoped_ptr<transport::EncodedAudioFrame> audio_frame, |
| 208 const base::TimeTicks& playout_time) { |
208 ++num_called_; | 209 ++num_called_; |
209 | 210 |
210 EXPECT_FALSE(expected_frame_.empty()); // Test for bug in test code. | 211 EXPECT_FALSE(expected_frame_.empty()); // Test for bug in test code. |
211 ExpectedAudioFrame expected_audio_frame = expected_frame_.front(); | 212 ExpectedAudioFrame expected_audio_frame = expected_frame_.front(); |
212 expected_frame_.pop_front(); | 213 expected_frame_.pop_front(); |
213 | 214 |
214 EXPECT_EQ(static_cast<int>(audio_frame->data.size()), | 215 EXPECT_EQ(static_cast<int>(audio_frame->data.size()), |
215 2 * kAudioChannels * expected_sampling_frequency_ / 100); | 216 2 * kAudioChannels * expected_sampling_frequency_ / 100); |
216 | 217 |
217 base::TimeDelta time_since_recording = | 218 base::TimeDelta time_since_recording = |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 return config; | 328 return config; |
328 } | 329 } |
329 // The actual test class, generate synthetic data for both audio and video and | 330 // The actual test class, generate synthetic data for both audio and video and |
330 // send those through the sender and receiver and analyzes the result. | 331 // send those through the sender and receiver and analyzes the result. |
331 class End2EndTest : public ::testing::Test { | 332 class End2EndTest : public ::testing::Test { |
332 protected: | 333 protected: |
333 End2EndTest() | 334 End2EndTest() |
334 : task_runner_(new test::FakeTaskRunner(&testing_clock_)), | 335 : task_runner_(new test::FakeTaskRunner(&testing_clock_)), |
335 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, | 336 cast_environment_(new CastEnvironment(&testing_clock_, task_runner_, |
336 task_runner_, task_runner_, task_runner_, task_runner_, | 337 task_runner_, task_runner_, task_runner_, task_runner_, |
337 EnableCastLoggingConfig())), | 338 task_runner_, EnableCastLoggingConfig())), |
338 start_time_(), | 339 start_time_(), |
339 sender_to_receiver_(cast_environment_), | 340 sender_to_receiver_(cast_environment_), |
340 receiver_to_sender_(cast_environment_), | 341 receiver_to_sender_(cast_environment_), |
341 test_receiver_audio_callback_(new TestReceiverAudioCallback()), | 342 test_receiver_audio_callback_(new TestReceiverAudioCallback()), |
342 test_receiver_video_callback_(new TestReceiverVideoCallback()) { | 343 test_receiver_video_callback_(new TestReceiverVideoCallback()) { |
343 testing_clock_.Advance( | 344 testing_clock_.Advance( |
344 base::TimeDelta::FromMilliseconds(kStartMillisecond)); | 345 base::TimeDelta::FromMilliseconds(kStartMillisecond)); |
345 } | 346 } |
346 | 347 |
347 void SetupConfig(AudioCodec audio_codec, | 348 void SetupConfig(transport::AudioCodec audio_codec, |
348 int audio_sampling_frequency, | 349 int audio_sampling_frequency, |
349 // TODO(miu): 3rd arg is meaningless?!? | 350 // TODO(miu): 3rd arg is meaningless?!? |
350 bool external_audio_decoder, | 351 bool external_audio_decoder, |
351 int max_number_of_video_buffers_used) { | 352 int max_number_of_video_buffers_used) { |
352 audio_sender_config_.sender_ssrc = 1; | 353 audio_sender_config_.sender_ssrc = 1; |
353 audio_sender_config_.incoming_feedback_ssrc = 2; | 354 audio_sender_config_.incoming_feedback_ssrc = 2; |
354 audio_sender_config_.rtp_payload_type = 96; | 355 audio_sender_config_.rtp_payload_type = 96; |
355 audio_sender_config_.use_external_encoder = false; | 356 audio_sender_config_.use_external_encoder = false; |
356 audio_sender_config_.frequency = audio_sampling_frequency; | 357 audio_sender_config_.frequency = audio_sampling_frequency; |
357 audio_sender_config_.channels = kAudioChannels; | 358 audio_sender_config_.channels = kAudioChannels; |
(...skipping 21 matching lines...) Expand all Loading... |
379 video_sender_config_.width = kVideoWidth; | 380 video_sender_config_.width = kVideoWidth; |
380 video_sender_config_.height = kVideoHeight; | 381 video_sender_config_.height = kVideoHeight; |
381 video_sender_config_.max_bitrate = 5000000; | 382 video_sender_config_.max_bitrate = 5000000; |
382 video_sender_config_.min_bitrate = 1000000; | 383 video_sender_config_.min_bitrate = 1000000; |
383 video_sender_config_.start_bitrate = 5000000; | 384 video_sender_config_.start_bitrate = 5000000; |
384 video_sender_config_.max_qp = 30; | 385 video_sender_config_.max_qp = 30; |
385 video_sender_config_.min_qp = 4; | 386 video_sender_config_.min_qp = 4; |
386 video_sender_config_.max_frame_rate = 30; | 387 video_sender_config_.max_frame_rate = 30; |
387 video_sender_config_.max_number_of_video_buffers_used = | 388 video_sender_config_.max_number_of_video_buffers_used = |
388 max_number_of_video_buffers_used; | 389 max_number_of_video_buffers_used; |
389 video_sender_config_.codec = kVp8; | 390 video_sender_config_.codec = transport::kVp8; |
390 video_sender_config_.number_of_cores = 1; | 391 video_sender_config_.number_of_cores = 1; |
391 | 392 |
392 video_receiver_config_.feedback_ssrc = | 393 video_receiver_config_.feedback_ssrc = |
393 video_sender_config_.incoming_feedback_ssrc; | 394 video_sender_config_.incoming_feedback_ssrc; |
394 video_receiver_config_.incoming_ssrc = | 395 video_receiver_config_.incoming_ssrc = |
395 video_sender_config_.sender_ssrc; | 396 video_sender_config_.sender_ssrc; |
396 video_receiver_config_.rtp_payload_type = | 397 video_receiver_config_.rtp_payload_type = |
397 video_sender_config_.rtp_payload_type; | 398 video_sender_config_.rtp_payload_type; |
398 video_receiver_config_.use_external_decoder = false; | 399 video_receiver_config_.use_external_decoder = false; |
399 video_receiver_config_.codec = video_sender_config_.codec; | 400 video_receiver_config_.codec = video_sender_config_.codec; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 | 467 |
467 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; | 468 scoped_refptr<TestReceiverAudioCallback> test_receiver_audio_callback_; |
468 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; | 469 scoped_refptr<TestReceiverVideoCallback> test_receiver_video_callback_; |
469 | 470 |
470 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; | 471 scoped_ptr<TestAudioBusFactory> audio_bus_factory_; |
471 }; | 472 }; |
472 | 473 |
473 // Audio and video test without packet loss using raw PCM 16 audio "codec"; | 474 // Audio and video test without packet loss using raw PCM 16 audio "codec"; |
474 // This test is too slow. Disabled for now: crbug.com/329333. | 475 // This test is too slow. Disabled for now: crbug.com/329333. |
475 TEST_F(End2EndTest, DISABLED_LoopNoLossPcm16) { | 476 TEST_F(End2EndTest, DISABLED_LoopNoLossPcm16) { |
476 SetupConfig(kPcm16, 32000, false, 1); | 477 SetupConfig(transport::kPcm16, 32000, false, 1); |
477 Create(); | 478 Create(); |
478 | 479 |
479 int video_start = 1; | 480 int video_start = 1; |
480 int audio_diff = kFrameTimerMs; | 481 int audio_diff = kFrameTimerMs; |
481 int i = 0; | 482 int i = 0; |
482 | 483 |
483 std::cout << "Progress "; | 484 std::cout << "Progress "; |
484 for (; i < 10; ++i) { | 485 for (; i < 10; ++i) { |
485 int num_10ms_blocks = audio_diff / 10; | 486 int num_10ms_blocks = audio_diff / 10; |
486 audio_diff -= num_10ms_blocks * 10; | 487 audio_diff -= num_10ms_blocks * 10; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
539 // TODO(mikhal): Crashes on the Win7 x64 bots. Re-enable. | 540 // TODO(mikhal): Crashes on the Win7 x64 bots. Re-enable. |
540 // http://crbug.com/329563 | 541 // http://crbug.com/329563 |
541 #if defined(OS_WIN) | 542 #if defined(OS_WIN) |
542 #define MAYBE_LoopNoLossPcm16ExternalDecoder DISABLED_LoopNoLossPcm16ExternalDec
oder | 543 #define MAYBE_LoopNoLossPcm16ExternalDecoder DISABLED_LoopNoLossPcm16ExternalDec
oder |
543 #else | 544 #else |
544 #define MAYBE_LoopNoLossPcm16ExternalDecoder LoopNoLossPcm16ExternalDecoder | 545 #define MAYBE_LoopNoLossPcm16ExternalDecoder LoopNoLossPcm16ExternalDecoder |
545 #endif | 546 #endif |
546 // This tests our external decoder interface for Audio. | 547 // This tests our external decoder interface for Audio. |
547 // Audio test without packet loss using raw PCM 16 audio "codec"; | 548 // Audio test without packet loss using raw PCM 16 audio "codec"; |
548 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16ExternalDecoder) { | 549 TEST_F(End2EndTest, MAYBE_LoopNoLossPcm16ExternalDecoder) { |
549 SetupConfig(kPcm16, 32000, true, 1); | 550 SetupConfig(transport::kPcm16, 32000, true, 1); |
550 Create(); | 551 Create(); |
551 | 552 |
552 int i = 0; | 553 int i = 0; |
553 for (; i < 10; ++i) { | 554 for (; i < 10; ++i) { |
554 base::TimeTicks send_time = testing_clock_.NowTicks(); | 555 base::TimeTicks send_time = testing_clock_.NowTicks(); |
555 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( | 556 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( |
556 base::TimeDelta::FromMilliseconds(10))); | 557 base::TimeDelta::FromMilliseconds(10))); |
557 test_receiver_audio_callback_->AddExpectedResult( | 558 test_receiver_audio_callback_->AddExpectedResult( |
558 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), | 559 ToPcmAudioFrame(*audio_bus, audio_sender_config_.frequency), |
559 1, send_time); | 560 1, send_time); |
(...skipping 12 matching lines...) Expand all Loading... |
572 } | 573 } |
573 | 574 |
574 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 | 575 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 |
575 #if defined(OS_WIN) | 576 #if defined(OS_WIN) |
576 #define MAYBE_LoopNoLossOpus DISABLED_LoopNoLossOpus | 577 #define MAYBE_LoopNoLossOpus DISABLED_LoopNoLossOpus |
577 #else | 578 #else |
578 #define MAYBE_LoopNoLossOpus LoopNoLossOpus | 579 #define MAYBE_LoopNoLossOpus LoopNoLossOpus |
579 #endif | 580 #endif |
580 // This tests our Opus audio codec without video. | 581 // This tests our Opus audio codec without video. |
581 TEST_F(End2EndTest, MAYBE_LoopNoLossOpus) { | 582 TEST_F(End2EndTest, MAYBE_LoopNoLossOpus) { |
582 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 1); | 583 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 1); |
583 Create(); | 584 Create(); |
584 | 585 |
585 int i = 0; | 586 int i = 0; |
586 for (; i < 10; ++i) { | 587 for (; i < 10; ++i) { |
587 int num_10ms_blocks = 3; | 588 int num_10ms_blocks = 3; |
588 base::TimeTicks send_time = testing_clock_.NowTicks(); | 589 base::TimeTicks send_time = testing_clock_.NowTicks(); |
589 | 590 |
590 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( | 591 scoped_ptr<AudioBus> audio_bus(audio_bus_factory_->NextAudioBus( |
591 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); | 592 base::TimeDelta::FromMilliseconds(10) * num_10ms_blocks)); |
592 | 593 |
(...skipping 23 matching lines...) Expand all Loading... |
616 } | 617 } |
617 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. | 618 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. |
618 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called()); | 619 EXPECT_EQ(i - 1, test_receiver_audio_callback_->number_times_called()); |
619 } | 620 } |
620 | 621 |
621 // This tests start sending audio and video before the receiver is ready. | 622 // This tests start sending audio and video before the receiver is ready. |
622 // | 623 // |
623 // TODO(miu): Test disabled because of non-determinism. | 624 // TODO(miu): Test disabled because of non-determinism. |
624 // http://crbug.com/314233 | 625 // http://crbug.com/314233 |
625 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) { | 626 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) { |
626 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 1); | 627 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 1); |
627 Create(); | 628 Create(); |
628 | 629 |
629 int video_start = 1; | 630 int video_start = 1; |
630 int audio_diff = kFrameTimerMs; | 631 int audio_diff = kFrameTimerMs; |
631 | 632 |
632 sender_to_receiver_.SetSendPackets(false); | 633 sender_to_receiver_.SetSendPackets(false); |
633 | 634 |
634 for (int i = 0; i < 3; ++i) { | 635 for (int i = 0; i < 3; ++i) { |
635 int num_10ms_blocks = audio_diff / 10; | 636 int num_10ms_blocks = audio_diff / 10; |
636 audio_diff -= num_10ms_blocks * 10; | 637 audio_diff -= num_10ms_blocks * 10; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
695 video_start++; | 696 video_start++; |
696 } | 697 } |
697 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. | 698 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. |
698 EXPECT_EQ(j - number_of_audio_frames_to_ignore, | 699 EXPECT_EQ(j - number_of_audio_frames_to_ignore, |
699 test_receiver_audio_callback_->number_times_called()); | 700 test_receiver_audio_callback_->number_times_called()); |
700 EXPECT_EQ(j, test_receiver_video_callback_->number_times_called()); | 701 EXPECT_EQ(j, test_receiver_video_callback_->number_times_called()); |
701 } | 702 } |
702 | 703 |
703 // This tests a network glitch lasting for 10 video frames. | 704 // This tests a network glitch lasting for 10 video frames. |
704 TEST_F(End2EndTest, GlitchWith3Buffers) { | 705 TEST_F(End2EndTest, GlitchWith3Buffers) { |
705 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 3); | 706 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); |
706 video_sender_config_.rtp_max_delay_ms = 67; | 707 video_sender_config_.rtp_max_delay_ms = 67; |
707 video_receiver_config_.rtp_max_delay_ms = 67; | 708 video_receiver_config_.rtp_max_delay_ms = 67; |
708 Create(); | 709 Create(); |
709 | 710 |
710 int video_start = 50; | 711 int video_start = 50; |
711 base::TimeTicks send_time = testing_clock_.NowTicks(); | 712 base::TimeTicks send_time = testing_clock_.NowTicks(); |
712 SendVideoFrame(video_start, send_time); | 713 SendVideoFrame(video_start, send_time); |
713 RunTasks(kFrameTimerMs); | 714 RunTasks(kFrameTimerMs); |
714 | 715 |
715 test_receiver_video_callback_->AddExpectedResult(video_start, | 716 test_receiver_video_callback_->AddExpectedResult(video_start, |
(...skipping 28 matching lines...) Expand all Loading... |
744 | 745 |
745 frame_receiver_->GetRawVideoFrame( | 746 frame_receiver_->GetRawVideoFrame( |
746 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, | 747 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, |
747 test_receiver_video_callback_)); | 748 test_receiver_video_callback_)); |
748 | 749 |
749 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. | 750 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. |
750 EXPECT_EQ(2, test_receiver_video_callback_->number_times_called()); | 751 EXPECT_EQ(2, test_receiver_video_callback_->number_times_called()); |
751 } | 752 } |
752 | 753 |
753 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) { | 754 TEST_F(End2EndTest, DropEveryOtherFrame3Buffers) { |
754 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 3); | 755 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); |
755 video_sender_config_.rtp_max_delay_ms = 67; | 756 video_sender_config_.rtp_max_delay_ms = 67; |
756 video_receiver_config_.rtp_max_delay_ms = 67; | 757 video_receiver_config_.rtp_max_delay_ms = 67; |
757 Create(); | 758 Create(); |
758 sender_to_receiver_.DropAllPacketsBelongingToOddFrames(); | 759 sender_to_receiver_.DropAllPacketsBelongingToOddFrames(); |
759 | 760 |
760 int video_start = 50; | 761 int video_start = 50; |
761 base::TimeTicks send_time; | 762 base::TimeTicks send_time; |
762 | 763 |
763 std::cout << "Progress "; | 764 std::cout << "Progress "; |
764 int i = 0; | 765 int i = 0; |
(...skipping 14 matching lines...) Expand all Loading... |
779 RunTasks(kFrameTimerMs); | 780 RunTasks(kFrameTimerMs); |
780 std::cout << " " << i << std::flush; | 781 std::cout << " " << i << std::flush; |
781 video_start++; | 782 video_start++; |
782 } | 783 } |
783 std::cout << std::endl; | 784 std::cout << std::endl; |
784 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. | 785 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. |
785 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called()); | 786 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called()); |
786 } | 787 } |
787 | 788 |
788 TEST_F(End2EndTest, ResetReferenceFrameId) { | 789 TEST_F(End2EndTest, ResetReferenceFrameId) { |
789 SetupConfig(kOpus, kDefaultAudioSamplingRate, false, 3); | 790 SetupConfig(transport::kOpus, kDefaultAudioSamplingRate, false, 3); |
790 video_sender_config_.rtp_max_delay_ms = 67; | 791 video_sender_config_.rtp_max_delay_ms = 67; |
791 video_receiver_config_.rtp_max_delay_ms = 67; | 792 video_receiver_config_.rtp_max_delay_ms = 67; |
792 Create(); | 793 Create(); |
793 sender_to_receiver_.AlwaysResetReferenceFrameId(); | 794 sender_to_receiver_.AlwaysResetReferenceFrameId(); |
794 | 795 |
795 int frames_counter = 0; | 796 int frames_counter = 0; |
796 for (; frames_counter < 20; ++frames_counter) { | 797 for (; frames_counter < 20; ++frames_counter) { |
797 const base::TimeTicks send_time = testing_clock_.NowTicks(); | 798 const base::TimeTicks send_time = testing_clock_.NowTicks(); |
798 SendVideoFrame(frames_counter, send_time); | 799 SendVideoFrame(frames_counter, send_time); |
799 | 800 |
800 test_receiver_video_callback_->AddExpectedResult(frames_counter, | 801 test_receiver_video_callback_->AddExpectedResult(frames_counter, |
801 video_sender_config_.width, video_sender_config_.height, send_time); | 802 video_sender_config_.width, video_sender_config_.height, send_time); |
802 | 803 |
803 // GetRawVideoFrame will not return the frame until we are close to the | 804 // GetRawVideoFrame will not return the frame until we are close to the |
804 // time in which we should render the frame. | 805 // time in which we should render the frame. |
805 frame_receiver_->GetRawVideoFrame( | 806 frame_receiver_->GetRawVideoFrame( |
806 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, | 807 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, |
807 test_receiver_video_callback_)); | 808 test_receiver_video_callback_)); |
808 RunTasks(kFrameTimerMs); | 809 RunTasks(kFrameTimerMs); |
809 } | 810 } |
810 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. | 811 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. |
811 EXPECT_EQ(frames_counter, | 812 EXPECT_EQ(frames_counter, |
812 test_receiver_video_callback_->number_times_called()); | 813 test_receiver_video_callback_->number_times_called()); |
813 } | 814 } |
814 | 815 |
815 TEST_F(End2EndTest, CryptoVideo) { | 816 TEST_F(End2EndTest, CryptoVideo) { |
816 SetupConfig(kPcm16, 32000, false, 1); | 817 SetupConfig(transport::kPcm16, 32000, false, 1); |
817 | 818 |
818 video_sender_config_.aes_iv_mask = | 819 video_sender_config_.aes_iv_mask = |
819 ConvertFromBase16String("1234567890abcdeffedcba0987654321"); | 820 ConvertFromBase16String("1234567890abcdeffedcba0987654321"); |
820 video_sender_config_.aes_key = | 821 video_sender_config_.aes_key = |
821 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef"); | 822 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef"); |
822 | 823 |
823 video_receiver_config_.aes_iv_mask = video_sender_config_.aes_iv_mask; | 824 video_receiver_config_.aes_iv_mask = video_sender_config_.aes_iv_mask; |
824 video_receiver_config_.aes_key = video_sender_config_.aes_key; | 825 video_receiver_config_.aes_key = video_sender_config_.aes_key; |
825 | 826 |
826 Create(); | 827 Create(); |
(...skipping 19 matching lines...) Expand all Loading... |
846 test_receiver_video_callback_->number_times_called()); | 847 test_receiver_video_callback_->number_times_called()); |
847 } | 848 } |
848 | 849 |
849 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 | 850 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 |
850 #if defined(OS_WIN) | 851 #if defined(OS_WIN) |
851 #define MAYBE_CryptoAudio DISABLED_CryptoAudio | 852 #define MAYBE_CryptoAudio DISABLED_CryptoAudio |
852 #else | 853 #else |
853 #define MAYBE_CryptoAudio CryptoAudio | 854 #define MAYBE_CryptoAudio CryptoAudio |
854 #endif | 855 #endif |
855 TEST_F(End2EndTest, MAYBE_CryptoAudio) { | 856 TEST_F(End2EndTest, MAYBE_CryptoAudio) { |
856 SetupConfig(kPcm16, 32000, false, 1); | 857 SetupConfig(transport::kPcm16, 32000, false, 1); |
857 | 858 |
858 audio_sender_config_.aes_iv_mask = | 859 audio_sender_config_.aes_iv_mask = |
859 ConvertFromBase16String("abcdeffedcba12345678900987654321"); | 860 ConvertFromBase16String("abcdeffedcba12345678900987654321"); |
860 audio_sender_config_.aes_key = | 861 audio_sender_config_.aes_key = |
861 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0"); | 862 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0"); |
862 | 863 |
863 audio_receiver_config_.aes_iv_mask = audio_sender_config_.aes_iv_mask; | 864 audio_receiver_config_.aes_iv_mask = audio_sender_config_.aes_iv_mask; |
864 audio_receiver_config_.aes_key = audio_sender_config_.aes_key; | 865 audio_receiver_config_.aes_key = audio_sender_config_.aes_key; |
865 | 866 |
866 Create(); | 867 Create(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
901 } | 902 } |
902 } | 903 } |
903 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. | 904 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. |
904 EXPECT_EQ(frames_counter - 1, | 905 EXPECT_EQ(frames_counter - 1, |
905 test_receiver_audio_callback_->number_times_called()); | 906 test_receiver_audio_callback_->number_times_called()); |
906 } | 907 } |
907 | 908 |
908 // Video test without packet loss; This test is targeted at testing the logging | 909 // Video test without packet loss; This test is targeted at testing the logging |
909 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. | 910 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. |
910 TEST_F(End2EndTest, VideoLogging) { | 911 TEST_F(End2EndTest, VideoLogging) { |
911 SetupConfig(kPcm16, 32000, false, 1); | 912 SetupConfig(transport::kPcm16, 32000, false, 1); |
912 Create(); | 913 Create(); |
913 | 914 |
914 int video_start = 1; | 915 int video_start = 1; |
915 int i = 0; | 916 int i = 0; |
916 for (; i < 1; ++i) { | 917 for (; i < 1; ++i) { |
917 base::TimeTicks send_time = testing_clock_.NowTicks(); | 918 base::TimeTicks send_time = testing_clock_.NowTicks(); |
918 test_receiver_video_callback_->AddExpectedResult(video_start, | 919 test_receiver_video_callback_->AddExpectedResult(video_start, |
919 video_sender_config_.width, video_sender_config_.height, send_time); | 920 video_sender_config_.width, video_sender_config_.height, send_time); |
920 | 921 |
921 SendVideoFrame(video_start, send_time); | 922 SendVideoFrame(video_start, send_time); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 | 960 |
960 // Packet logging. | 961 // Packet logging. |
961 // Verify that all packet related events were logged. | 962 // Verify that all packet related events were logged. |
962 PacketRawMap packet_raw_log = logging->GetPacketRawData(); | 963 PacketRawMap packet_raw_log = logging->GetPacketRawData(); |
963 // Every rtp_timestamp should have only one entry. | 964 // Every rtp_timestamp should have only one entry. |
964 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size()); | 965 EXPECT_EQ(static_cast<unsigned int>(i), packet_raw_log.size()); |
965 PacketRawMap::const_iterator packet_it = packet_raw_log.begin(); | 966 PacketRawMap::const_iterator packet_it = packet_raw_log.begin(); |
966 // Choose a packet, and verify that all events were logged. | 967 // Choose a packet, and verify that all events were logged. |
967 event_log = (++(packet_it->second.packet_map.begin()))->second.type; | 968 event_log = (++(packet_it->second.packet_map.begin()))->second.type; |
968 EXPECT_TRUE((std::find(event_log.begin(), event_log.end(), | 969 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(), | |
973 kPacketReceived)) != event_log.end()); | 970 kPacketReceived)) != event_log.end()); |
974 // Verify that there were no other events logged with respect to this frame. | 971 // Verify that there were no other events logged with respect to this frame. |
975 EXPECT_EQ(3u, event_log.size()); | 972 EXPECT_EQ(1u, event_log.size()); |
976 } | 973 } |
977 | 974 |
978 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 | 975 // TODO(mikhal): Crashes on the bots. Re-enable. http://crbug.com/329563 |
979 #if defined(OS_WIN) | 976 #if defined(OS_WIN) |
980 #define MAYBE_AudioLogging DISABLED_AudioLogging | 977 #define MAYBE_AudioLogging DISABLED_AudioLogging |
981 #else | 978 #else |
982 #define MAYBE_AudioLogging AudioLogging | 979 #define MAYBE_AudioLogging AudioLogging |
983 #endif | 980 #endif |
984 // Audio test without packet loss; This test is targeted at testing the logging | 981 // Audio test without packet loss; This test is targeted at testing the logging |
985 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. | 982 // aspects of the end2end, but is basically equivalent to LoopNoLossPcm16. |
986 TEST_F(End2EndTest, MAYBE_AudioLogging) { | 983 TEST_F(End2EndTest, MAYBE_AudioLogging) { |
987 SetupConfig(kPcm16, 32000, false, 1); | 984 SetupConfig(transport::kPcm16, 32000, false, 1); |
988 Create(); | 985 Create(); |
989 | 986 |
990 int audio_diff = kFrameTimerMs; | 987 int audio_diff = kFrameTimerMs; |
991 int i = 0; | 988 int i = 0; |
992 | 989 |
993 for (; i < 10; ++i) { | 990 for (; i < 10; ++i) { |
994 int num_10ms_blocks = audio_diff / 10; | 991 int num_10ms_blocks = audio_diff / 10; |
995 audio_diff -= num_10ms_blocks * 10; | 992 audio_diff -= num_10ms_blocks * 10; |
996 base::TimeTicks send_time = testing_clock_.NowTicks(); | 993 base::TimeTicks send_time = testing_clock_.NowTicks(); |
997 | 994 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1057 } | 1054 } |
1058 | 1055 |
1059 | 1056 |
1060 // TODO(pwestin): Add repeatable packet loss test. | 1057 // TODO(pwestin): Add repeatable packet loss test. |
1061 // TODO(pwestin): Add test for misaligned send get calls. | 1058 // TODO(pwestin): Add test for misaligned send get calls. |
1062 // TODO(pwestin): Add more tests that does not resample. | 1059 // TODO(pwestin): Add more tests that does not resample. |
1063 // TODO(pwestin): Add test when we have starvation for our RunTask. | 1060 // TODO(pwestin): Add test when we have starvation for our RunTask. |
1064 | 1061 |
1065 } // namespace cast | 1062 } // namespace cast |
1066 } // namespace media | 1063 } // namespace media |
OLD | NEW |