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

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

Issue 306783002: [Cast] Clean-up: Merge AudioReceiverConfig+VideoReceiverConfig-->FrameReceiverConfig. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Removed kFakeSoftwareAudio in AudioCodec enum, per hclam@. Created 6 years, 6 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/rtp_receiver/rtp_receiver.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 443 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 test_receiver_video_callback_(new TestReceiverVideoCallback()) { 454 test_receiver_video_callback_(new TestReceiverVideoCallback()) {
455 testing_clock_.Advance( 455 testing_clock_.Advance(
456 base::TimeDelta::FromMilliseconds(kStartMillisecond)); 456 base::TimeDelta::FromMilliseconds(kStartMillisecond));
457 cast_environment_sender_->Logging()->AddRawEventSubscriber( 457 cast_environment_sender_->Logging()->AddRawEventSubscriber(
458 &event_subscriber_sender_); 458 &event_subscriber_sender_);
459 } 459 }
460 460
461 void Configure(transport::VideoCodec video_codec, 461 void Configure(transport::VideoCodec video_codec,
462 transport::AudioCodec audio_codec, 462 transport::AudioCodec audio_codec,
463 int audio_sampling_frequency, 463 int audio_sampling_frequency,
464 bool external_audio_decoder,
465 int max_number_of_video_buffers_used) { 464 int max_number_of_video_buffers_used) {
466 audio_sender_config_.rtp_config.ssrc = 1; 465 audio_sender_config_.rtp_config.ssrc = 1;
467 audio_sender_config_.rtp_config.max_delay_ms = kTargetPlayoutDelayMs; 466 audio_sender_config_.rtp_config.max_delay_ms = kTargetPlayoutDelayMs;
468 audio_sender_config_.incoming_feedback_ssrc = 2; 467 audio_sender_config_.incoming_feedback_ssrc = 2;
469 audio_sender_config_.rtp_config.payload_type = 96; 468 audio_sender_config_.rtp_config.payload_type = 96;
470 audio_sender_config_.use_external_encoder = false; 469 audio_sender_config_.use_external_encoder = false;
471 audio_sender_config_.frequency = audio_sampling_frequency; 470 audio_sender_config_.frequency = audio_sampling_frequency;
472 audio_sender_config_.channels = kAudioChannels; 471 audio_sender_config_.channels = kAudioChannels;
473 audio_sender_config_.bitrate = kDefaultAudioEncoderBitrate; 472 audio_sender_config_.bitrate = kDefaultAudioEncoderBitrate;
474 audio_sender_config_.codec = audio_codec; 473 audio_sender_config_.codec = audio_codec;
475 474
476 audio_receiver_config_.feedback_ssrc = 475 audio_receiver_config_.feedback_ssrc =
477 audio_sender_config_.incoming_feedback_ssrc; 476 audio_sender_config_.incoming_feedback_ssrc;
478 audio_receiver_config_.incoming_ssrc = audio_sender_config_.rtp_config.ssrc; 477 audio_receiver_config_.incoming_ssrc = audio_sender_config_.rtp_config.ssrc;
479 audio_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; 478 audio_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs;
480 audio_receiver_config_.rtp_payload_type = 479 audio_receiver_config_.rtp_payload_type =
481 audio_sender_config_.rtp_config.payload_type; 480 audio_sender_config_.rtp_config.payload_type;
482 audio_receiver_config_.use_external_decoder = external_audio_decoder;
483 audio_receiver_config_.frequency = audio_sender_config_.frequency; 481 audio_receiver_config_.frequency = audio_sender_config_.frequency;
484 audio_receiver_config_.channels = kAudioChannels; 482 audio_receiver_config_.channels = kAudioChannels;
485 audio_receiver_config_.codec = audio_sender_config_.codec; 483 audio_receiver_config_.max_frame_rate = 100;
484 audio_receiver_config_.codec.audio = audio_sender_config_.codec;
486 485
487 test_receiver_audio_callback_->SetExpectedSamplingFrequency( 486 test_receiver_audio_callback_->SetExpectedSamplingFrequency(
488 audio_receiver_config_.frequency); 487 audio_receiver_config_.frequency);
489 488
490 video_sender_config_.rtp_config.ssrc = 3; 489 video_sender_config_.rtp_config.ssrc = 3;
491 video_sender_config_.rtp_config.max_delay_ms = kTargetPlayoutDelayMs; 490 video_sender_config_.rtp_config.max_delay_ms = kTargetPlayoutDelayMs;
492 video_sender_config_.incoming_feedback_ssrc = 4; 491 video_sender_config_.incoming_feedback_ssrc = 4;
493 video_sender_config_.rtp_config.payload_type = 97; 492 video_sender_config_.rtp_config.payload_type = 97;
494 video_sender_config_.use_external_encoder = false; 493 video_sender_config_.use_external_encoder = false;
495 video_sender_config_.width = kVideoHdWidth; 494 video_sender_config_.width = kVideoHdWidth;
496 video_sender_config_.height = kVideoHdHeight; 495 video_sender_config_.height = kVideoHdHeight;
497 video_sender_config_.max_bitrate = 50000; 496 video_sender_config_.max_bitrate = 50000;
498 video_sender_config_.min_bitrate = 10000; 497 video_sender_config_.min_bitrate = 10000;
499 video_sender_config_.start_bitrate = 10000; 498 video_sender_config_.start_bitrate = 10000;
500 video_sender_config_.max_qp = 30; 499 video_sender_config_.max_qp = 30;
501 video_sender_config_.min_qp = 4; 500 video_sender_config_.min_qp = 4;
502 video_sender_config_.max_frame_rate = 30; 501 video_sender_config_.max_frame_rate = 30;
503 video_sender_config_.max_number_of_video_buffers_used = 502 video_sender_config_.max_number_of_video_buffers_used =
504 max_number_of_video_buffers_used; 503 max_number_of_video_buffers_used;
505 video_sender_config_.codec = video_codec; 504 video_sender_config_.codec = video_codec;
506 505
507 video_receiver_config_.feedback_ssrc = 506 video_receiver_config_.feedback_ssrc =
508 video_sender_config_.incoming_feedback_ssrc; 507 video_sender_config_.incoming_feedback_ssrc;
509 video_receiver_config_.incoming_ssrc = video_sender_config_.rtp_config.ssrc; 508 video_receiver_config_.incoming_ssrc = video_sender_config_.rtp_config.ssrc;
510 video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs; 509 video_receiver_config_.rtp_max_delay_ms = kTargetPlayoutDelayMs;
511 video_receiver_config_.rtp_payload_type = 510 video_receiver_config_.rtp_payload_type =
512 video_sender_config_.rtp_config.payload_type; 511 video_sender_config_.rtp_config.payload_type;
513 video_receiver_config_.use_external_decoder = false; 512 video_receiver_config_.frequency = kVideoFrequency;
514 video_receiver_config_.codec = video_sender_config_.codec; 513 video_receiver_config_.channels = 1;
514 video_receiver_config_.max_frame_rate = video_sender_config_.max_frame_rate;
515 video_receiver_config_.codec.video = video_sender_config_.codec;
515 } 516 }
516 517
517 void SetReceiverSkew(double skew, base::TimeDelta offset) { 518 void SetReceiverSkew(double skew, base::TimeDelta offset) {
518 testing_clock_receiver_->SetSkew(skew, offset); 519 testing_clock_receiver_->SetSkew(skew, offset);
519 task_runner_receiver_->SetSkew(1.0 / skew); 520 task_runner_receiver_->SetSkew(1.0 / skew);
520 } 521 }
521 522
522 // Specify the minimum/maximum difference in playout times between two 523 // Specify the minimum/maximum difference in playout times between two
523 // consecutive frames. Also, specify the maximum absolute rate of change over 524 // consecutive frames. Also, specify the maximum absolute rate of change over
524 // each three consecutive frames. 525 // each three consecutive frames.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
724 it->type, 725 it->type,
725 it->media_type, 726 it->media_type,
726 it->rtp_timestamp, 727 it->rtp_timestamp,
727 it->frame_id, 728 it->frame_id,
728 it->packet_id, 729 it->packet_id,
729 it->max_packet_id, 730 it->max_packet_id,
730 it->size); 731 it->size);
731 } 732 }
732 } 733 }
733 734
734 AudioReceiverConfig audio_receiver_config_; 735 FrameReceiverConfig audio_receiver_config_;
735 VideoReceiverConfig video_receiver_config_; 736 FrameReceiverConfig video_receiver_config_;
736 AudioSenderConfig audio_sender_config_; 737 AudioSenderConfig audio_sender_config_;
737 VideoSenderConfig video_sender_config_; 738 VideoSenderConfig video_sender_config_;
738 739
739 base::TimeTicks start_time_; 740 base::TimeTicks start_time_;
740 741
741 // These run in "test time" 742 // These run in "test time"
742 base::SimpleTestTickClock testing_clock_; 743 base::SimpleTestTickClock testing_clock_;
743 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_; 744 scoped_refptr<test::FakeSingleThreadTaskRunner> task_runner_;
744 745
745 // These run on the sender timeline. 746 // These run on the sender timeline.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 SimpleEventSubscriber event_subscriber_sender_; 778 SimpleEventSubscriber event_subscriber_sender_;
778 std::vector<FrameEvent> frame_events_; 779 std::vector<FrameEvent> frame_events_;
779 std::vector<PacketEvent> packet_events_; 780 std::vector<PacketEvent> packet_events_;
780 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > audio_ticks_; 781 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > audio_ticks_;
781 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > video_ticks_; 782 std::vector<std::pair<base::TimeTicks, base::TimeTicks> > video_ticks_;
782 // |transport_sender_| has a RepeatingTimer which needs a MessageLoop. 783 // |transport_sender_| has a RepeatingTimer which needs a MessageLoop.
783 base::MessageLoop message_loop_; 784 base::MessageLoop message_loop_;
784 }; 785 };
785 786
786 TEST_F(End2EndTest, LoopNoLossPcm16) { 787 TEST_F(End2EndTest, LoopNoLossPcm16) {
787 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 788 Configure(transport::kVp8, transport::kPcm16, 32000, 1);
788 // Reduce video resolution to allow processing multiple frames within a 789 // Reduce video resolution to allow processing multiple frames within a
789 // reasonable time frame. 790 // reasonable time frame.
790 video_sender_config_.width = kVideoQcifWidth; 791 video_sender_config_.width = kVideoQcifWidth;
791 video_sender_config_.height = kVideoQcifHeight; 792 video_sender_config_.height = kVideoQcifHeight;
792 Create(); 793 Create();
793 794
794 const int kNumIterations = 50; 795 const int kNumIterations = 50;
795 int video_start = kVideoStart; 796 int video_start = kVideoStart;
796 int audio_diff = kFrameTimerMs; 797 int audio_diff = kFrameTimerMs;
797 int num_audio_frames_requested = 0; 798 int num_audio_frames_requested = 0;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 832 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
832 EXPECT_EQ(num_audio_frames_requested, 833 EXPECT_EQ(num_audio_frames_requested,
833 test_receiver_audio_callback_->number_times_called()); 834 test_receiver_audio_callback_->number_times_called());
834 EXPECT_EQ(kNumIterations, 835 EXPECT_EQ(kNumIterations,
835 test_receiver_video_callback_->number_times_called()); 836 test_receiver_video_callback_->number_times_called());
836 } 837 }
837 838
838 // This tests our external decoder interface for Audio. 839 // This tests our external decoder interface for Audio.
839 // Audio test without packet loss using raw PCM 16 audio "codec"; 840 // Audio test without packet loss using raw PCM 16 audio "codec";
840 TEST_F(End2EndTest, LoopNoLossPcm16ExternalDecoder) { 841 TEST_F(End2EndTest, LoopNoLossPcm16ExternalDecoder) {
841 Configure(transport::kVp8, transport::kPcm16, 32000, true, 1); 842 Configure(transport::kVp8, transport::kPcm16, 32000, 1);
842 Create(); 843 Create();
843 844
844 const int kNumIterations = 10; 845 const int kNumIterations = 10;
845 for (int i = 0; i < kNumIterations; ++i) { 846 for (int i = 0; i < kNumIterations; ++i) {
846 FeedAudioFrames(1, true); 847 FeedAudioFrames(1, true);
847 RunTasks(kAudioFrameDurationMs); 848 RunTasks(kAudioFrameDurationMs);
848 frame_receiver_->GetCodedAudioFrame( 849 frame_receiver_->GetCodedAudioFrame(
849 base::Bind(&TestReceiverAudioCallback::CheckCodedAudioFrame, 850 base::Bind(&TestReceiverAudioCallback::CheckCodedAudioFrame,
850 test_receiver_audio_callback_)); 851 test_receiver_audio_callback_));
851 } 852 }
852 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 853 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
853 EXPECT_EQ(kNumIterations, 854 EXPECT_EQ(kNumIterations,
854 test_receiver_audio_callback_->number_times_called()); 855 test_receiver_audio_callback_->number_times_called());
855 } 856 }
856 857
857 // This tests our Opus audio codec without video. 858 // This tests our Opus audio codec without video.
858 TEST_F(End2EndTest, LoopNoLossOpus) { 859 TEST_F(End2EndTest, LoopNoLossOpus) {
859 Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 860 Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 1);
860 false, 1);
861 Create(); 861 Create();
862 862
863 const int kNumIterations = 300; 863 const int kNumIterations = 300;
864 for (int i = 0; i < kNumIterations; ++i) { 864 for (int i = 0; i < kNumIterations; ++i) {
865 // Opus introduces a tiny delay before the sinewave starts; so don't examine 865 // Opus introduces a tiny delay before the sinewave starts; so don't examine
866 // the first frame. 866 // the first frame.
867 const bool examine_audio_data = i > 0; 867 const bool examine_audio_data = i > 0;
868 FeedAudioFrames(1, examine_audio_data); 868 FeedAudioFrames(1, examine_audio_data);
869 RunTasks(kAudioFrameDurationMs); 869 RunTasks(kAudioFrameDurationMs);
870 RequestAudioFrames(1, examine_audio_data); 870 RequestAudioFrames(1, examine_audio_data);
871 } 871 }
872 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 872 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
873 EXPECT_EQ(kNumIterations, 873 EXPECT_EQ(kNumIterations,
874 test_receiver_audio_callback_->number_times_called()); 874 test_receiver_audio_callback_->number_times_called());
875 } 875 }
876 876
877 // This tests start sending audio and video at start-up time before the receiver 877 // This tests start sending audio and video at start-up time before the receiver
878 // is ready; it sends 2 frames before the receiver comes online. 878 // is ready; it sends 2 frames before the receiver comes online.
879 // 879 //
880 // Test disabled due to flakiness: It appears that the RTCP synchronization 880 // Test disabled due to flakiness: It appears that the RTCP synchronization
881 // sometimes kicks in, and sometimes doesn't. When it does, there's a sharp 881 // sometimes kicks in, and sometimes doesn't. When it does, there's a sharp
882 // discontinuity in the timeline, throwing off the test expectations. See TODOs 882 // discontinuity in the timeline, throwing off the test expectations. See TODOs
883 // in audio_receiver.cc for likely cause(s) of this bug. 883 // in audio_receiver.cc for likely cause(s) of this bug.
884 // http://crbug.com/356942 884 // http://crbug.com/356942
885 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) { 885 TEST_F(End2EndTest, DISABLED_StartSenderBeforeReceiver) {
886 Configure(transport::kVp8, transport::kPcm16, kDefaultAudioSamplingRate, 886 Configure(transport::kVp8, transport::kPcm16, kDefaultAudioSamplingRate, 1);
887 false, 1);
888 Create(); 887 Create();
889 888
890 int video_start = kVideoStart; 889 int video_start = kVideoStart;
891 int audio_diff = kFrameTimerMs; 890 int audio_diff = kFrameTimerMs;
892 891
893 sender_to_receiver_.SetSendPackets(false); 892 sender_to_receiver_.SetSendPackets(false);
894 893
895 const int test_delay_ms = 100; 894 const int test_delay_ms = 100;
896 895
897 const int kNumVideoFramesBeforeReceiverStarted = 2; 896 const int kNumVideoFramesBeforeReceiverStarted = 2;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
965 } 964 }
966 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 965 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
967 EXPECT_EQ(num_audio_frames_requested, 966 EXPECT_EQ(num_audio_frames_requested,
968 test_receiver_audio_callback_->number_times_called()); 967 test_receiver_audio_callback_->number_times_called());
969 EXPECT_EQ(10, test_receiver_video_callback_->number_times_called()); 968 EXPECT_EQ(10, test_receiver_video_callback_->number_times_called());
970 } 969 }
971 970
972 // This tests a network glitch lasting for 10 video frames. 971 // This tests a network glitch lasting for 10 video frames.
973 // Flaky. See crbug.com/351596. 972 // Flaky. See crbug.com/351596.
974 TEST_F(End2EndTest, DISABLED_GlitchWith3Buffers) { 973 TEST_F(End2EndTest, DISABLED_GlitchWith3Buffers) {
975 Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 974 Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 3);
976 false, 3);
977 video_sender_config_.rtp_config.max_delay_ms = 67; 975 video_sender_config_.rtp_config.max_delay_ms = 67;
978 video_receiver_config_.rtp_max_delay_ms = 67; 976 video_receiver_config_.rtp_max_delay_ms = 67;
979 Create(); 977 Create();
980 978
981 int video_start = kVideoStart; 979 int video_start = kVideoStart;
982 base::TimeTicks capture_time; 980 base::TimeTicks capture_time;
983 // Frames will rendered on completion until the render time stabilizes, i.e. 981 // Frames will rendered on completion until the render time stabilizes, i.e.
984 // we got enough data. 982 // we got enough data.
985 const int frames_before_glitch = 20; 983 const int frames_before_glitch = 20;
986 for (int i = 0; i < frames_before_glitch; ++i) { 984 for (int i = 0; i < frames_before_glitch; ++i) {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 1027 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
1030 test_receiver_video_callback_)); 1028 test_receiver_video_callback_));
1031 1029
1032 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline. 1030 RunTasks(2 * kFrameTimerMs + 1); // Empty the receiver pipeline.
1033 EXPECT_EQ(frames_before_glitch + 1, 1031 EXPECT_EQ(frames_before_glitch + 1,
1034 test_receiver_video_callback_->number_times_called()); 1032 test_receiver_video_callback_->number_times_called());
1035 } 1033 }
1036 1034
1037 // Disabled due to flakiness and crashiness. http://crbug.com/360951 1035 // Disabled due to flakiness and crashiness. http://crbug.com/360951
1038 TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) { 1036 TEST_F(End2EndTest, DISABLED_DropEveryOtherFrame3Buffers) {
1039 Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, false, 1037 Configure(transport::kVp8, transport::kOpus, kDefaultAudioSamplingRate, 3);
1040 3);
1041 video_sender_config_.rtp_config.max_delay_ms = 67; 1038 video_sender_config_.rtp_config.max_delay_ms = 67;
1042 video_receiver_config_.rtp_max_delay_ms = 67; 1039 video_receiver_config_.rtp_max_delay_ms = 67;
1043 Create(); 1040 Create();
1044 sender_to_receiver_.DropAllPacketsBelongingToOddFrames(); 1041 sender_to_receiver_.DropAllPacketsBelongingToOddFrames();
1045 1042
1046 int video_start = kVideoStart; 1043 int video_start = kVideoStart;
1047 base::TimeTicks capture_time; 1044 base::TimeTicks capture_time;
1048 1045
1049 int i = 0; 1046 int i = 0;
1050 for (; i < 20; ++i) { 1047 for (; i < 20; ++i) {
(...skipping 17 matching lines...) Expand all
1068 } 1065 }
1069 RunTasks(kFrameTimerMs); 1066 RunTasks(kFrameTimerMs);
1070 video_start++; 1067 video_start++;
1071 } 1068 }
1072 1069
1073 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1070 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1074 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called()); 1071 EXPECT_EQ(i / 2, test_receiver_video_callback_->number_times_called());
1075 } 1072 }
1076 1073
1077 TEST_F(End2EndTest, CryptoVideo) { 1074 TEST_F(End2EndTest, CryptoVideo) {
1078 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 1075 Configure(transport::kVp8, transport::kPcm16, 32000, 1);
1079 1076
1080 video_sender_config_.rtp_config.aes_iv_mask = 1077 video_sender_config_.rtp_config.aes_iv_mask =
1081 ConvertFromBase16String("1234567890abcdeffedcba0987654321"); 1078 ConvertFromBase16String("1234567890abcdeffedcba0987654321");
1082 video_sender_config_.rtp_config.aes_key = 1079 video_sender_config_.rtp_config.aes_key =
1083 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef"); 1080 ConvertFromBase16String("deadbeefcafeb0b0b0b0cafedeadbeef");
1084 1081
1085 video_receiver_config_.aes_iv_mask = 1082 video_receiver_config_.aes_iv_mask =
1086 video_sender_config_.rtp_config.aes_iv_mask; 1083 video_sender_config_.rtp_config.aes_iv_mask;
1087 video_receiver_config_.aes_key = 1084 video_receiver_config_.aes_key =
1088 video_sender_config_.rtp_config.aes_key; 1085 video_sender_config_.rtp_config.aes_key;
(...skipping 17 matching lines...) Expand all
1106 frame_receiver_->GetRawVideoFrame( 1103 frame_receiver_->GetRawVideoFrame(
1107 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame, 1104 base::Bind(&TestReceiverVideoCallback::CheckVideoFrame,
1108 test_receiver_video_callback_)); 1105 test_receiver_video_callback_));
1109 } 1106 }
1110 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1107 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1111 EXPECT_EQ(frames_counter, 1108 EXPECT_EQ(frames_counter,
1112 test_receiver_video_callback_->number_times_called()); 1109 test_receiver_video_callback_->number_times_called());
1113 } 1110 }
1114 1111
1115 TEST_F(End2EndTest, CryptoAudio) { 1112 TEST_F(End2EndTest, CryptoAudio) {
1116 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 1113 Configure(transport::kVp8, transport::kPcm16, 32000, 1);
1117 1114
1118 audio_sender_config_.rtp_config.aes_iv_mask = 1115 audio_sender_config_.rtp_config.aes_iv_mask =
1119 ConvertFromBase16String("abcdeffedcba12345678900987654321"); 1116 ConvertFromBase16String("abcdeffedcba12345678900987654321");
1120 audio_sender_config_.rtp_config.aes_key = 1117 audio_sender_config_.rtp_config.aes_key =
1121 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0"); 1118 ConvertFromBase16String("deadbeefcafecafedeadbeefb0b0b0b0");
1122 1119
1123 audio_receiver_config_.aes_iv_mask = 1120 audio_receiver_config_.aes_iv_mask =
1124 audio_sender_config_.rtp_config.aes_iv_mask; 1121 audio_sender_config_.rtp_config.aes_iv_mask;
1125 audio_receiver_config_.aes_key = 1122 audio_receiver_config_.aes_key =
1126 audio_sender_config_.rtp_config.aes_key; 1123 audio_sender_config_.rtp_config.aes_key;
1127 1124
1128 Create(); 1125 Create();
1129 1126
1130 const int kNumIterations = 3; 1127 const int kNumIterations = 3;
1131 const int kNumAudioFramesPerIteration = 2; 1128 const int kNumAudioFramesPerIteration = 2;
1132 for (int i = 0; i < kNumIterations; ++i) { 1129 for (int i = 0; i < kNumIterations; ++i) {
1133 FeedAudioFrames(kNumAudioFramesPerIteration, true); 1130 FeedAudioFrames(kNumAudioFramesPerIteration, true);
1134 RunTasks(kNumAudioFramesPerIteration * kAudioFrameDurationMs); 1131 RunTasks(kNumAudioFramesPerIteration * kAudioFrameDurationMs);
1135 RequestAudioFrames(kNumAudioFramesPerIteration, true); 1132 RequestAudioFrames(kNumAudioFramesPerIteration, true);
1136 } 1133 }
1137 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1134 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1138 EXPECT_EQ(kNumIterations * kNumAudioFramesPerIteration, 1135 EXPECT_EQ(kNumIterations * kNumAudioFramesPerIteration,
1139 test_receiver_audio_callback_->number_times_called()); 1136 test_receiver_audio_callback_->number_times_called());
1140 } 1137 }
1141 1138
1142 // Video test without packet loss - tests the logging aspects of the end2end, 1139 // Video test without packet loss - tests the logging aspects of the end2end,
1143 // but is basically equivalent to LoopNoLossPcm16. 1140 // but is basically equivalent to LoopNoLossPcm16.
1144 TEST_F(End2EndTest, VideoLogging) { 1141 TEST_F(End2EndTest, VideoLogging) {
1145 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 1142 Configure(transport::kVp8, transport::kPcm16, 32000, 1);
1146 Create(); 1143 Create();
1147 1144
1148 int video_start = kVideoStart; 1145 int video_start = kVideoStart;
1149 const int num_frames = 5; 1146 const int num_frames = 5;
1150 for (int i = 0; i < num_frames; ++i) { 1147 for (int i = 0; i < num_frames; ++i) {
1151 base::TimeTicks capture_time = testing_clock_sender_->NowTicks(); 1148 base::TimeTicks capture_time = testing_clock_sender_->NowTicks();
1152 test_receiver_video_callback_->AddExpectedResult( 1149 test_receiver_video_callback_->AddExpectedResult(
1153 video_start, 1150 video_start,
1154 video_sender_config_.width, 1151 video_sender_config_.width,
1155 video_sender_config_.height, 1152 video_sender_config_.height,
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1259 1256
1260 // Verify that there were no other events logged with respect to this 1257 // Verify that there were no other events logged with respect to this
1261 // packet. (i.e. Total event count = expected event count) 1258 // packet. (i.e. Total event count = expected event count)
1262 EXPECT_EQ(total_event_count_for_packet, expected_event_count_for_packet); 1259 EXPECT_EQ(total_event_count_for_packet, expected_event_count_for_packet);
1263 } 1260 }
1264 } 1261 }
1265 1262
1266 // Audio test without packet loss - tests the logging aspects of the end2end, 1263 // Audio test without packet loss - tests the logging aspects of the end2end,
1267 // but is basically equivalent to LoopNoLossPcm16. 1264 // but is basically equivalent to LoopNoLossPcm16.
1268 TEST_F(End2EndTest, AudioLogging) { 1265 TEST_F(End2EndTest, AudioLogging) {
1269 Configure(transport::kVp8, transport::kPcm16, 32000, false, 1); 1266 Configure(transport::kVp8, transport::kPcm16, 32000, 1);
1270 Create(); 1267 Create();
1271 1268
1272 int audio_diff = kFrameTimerMs; 1269 int audio_diff = kFrameTimerMs;
1273 const int kNumVideoFrames = 10; 1270 const int kNumVideoFrames = 10;
1274 int num_audio_frames_requested = 0; 1271 int num_audio_frames_requested = 0;
1275 for (int i = 0; i < kNumVideoFrames; ++i) { 1272 for (int i = 0; i < kNumVideoFrames; ++i) {
1276 const int num_audio_frames = audio_diff / kAudioFrameDurationMs; 1273 const int num_audio_frames = audio_diff / kAudioFrameDurationMs;
1277 audio_diff -= num_audio_frames * kAudioFrameDurationMs; 1274 audio_diff -= num_audio_frames * kAudioFrameDurationMs;
1278 1275
1279 FeedAudioFrames(num_audio_frames, true); 1276 FeedAudioFrames(num_audio_frames, true);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1337 EXPECT_GT(map_it->second.counter[FRAME_ACK_SENT], 0); 1334 EXPECT_GT(map_it->second.counter[FRAME_ACK_SENT], 0);
1338 expected_event_count_for_frame += map_it->second.counter[FRAME_ACK_SENT]; 1335 expected_event_count_for_frame += map_it->second.counter[FRAME_ACK_SENT];
1339 1336
1340 // Verify that there were no other events logged with respect to this frame. 1337 // Verify that there were no other events logged with respect to this frame.
1341 // (i.e. Total event count = expected event count) 1338 // (i.e. Total event count = expected event count)
1342 EXPECT_EQ(total_event_count_for_frame, expected_event_count_for_frame); 1339 EXPECT_EQ(total_event_count_for_frame, expected_event_count_for_frame);
1343 } 1340 }
1344 } 1341 }
1345 1342
1346 TEST_F(End2EndTest, BasicFakeSoftwareVideo) { 1343 TEST_F(End2EndTest, BasicFakeSoftwareVideo) {
1347 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, false, 1); 1344 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
1348 Create(); 1345 Create();
1349 StartBasicPlayer(); 1346 StartBasicPlayer();
1350 SetReceiverSkew(1.0, base::TimeDelta::FromMilliseconds(1)); 1347 SetReceiverSkew(1.0, base::TimeDelta::FromMilliseconds(1));
1351 1348
1352 // Expect very smooth playout when there is no clock skew. 1349 // Expect very smooth playout when there is no clock skew.
1353 SetExpectedVideoPlayoutSmoothness( 1350 SetExpectedVideoPlayoutSmoothness(
1354 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 99 / 100, 1351 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 99 / 100,
1355 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 101 / 100, 1352 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 101 / 100,
1356 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 100); 1353 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 100);
1357 1354
1358 int frames_counter = 0; 1355 int frames_counter = 0;
1359 for (; frames_counter < 1000; ++frames_counter) { 1356 for (; frames_counter < 1000; ++frames_counter) {
1360 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1357 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1361 RunTasks(kFrameTimerMs); 1358 RunTasks(kFrameTimerMs);
1362 } 1359 }
1363 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1360 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1364 EXPECT_EQ(1000ul, video_ticks_.size()); 1361 EXPECT_EQ(1000ul, video_ticks_.size());
1365 } 1362 }
1366 1363
1367 TEST_F(End2EndTest, ReceiverClockFast) { 1364 TEST_F(End2EndTest, ReceiverClockFast) {
1368 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, false, 1); 1365 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
1369 Create(); 1366 Create();
1370 StartBasicPlayer(); 1367 StartBasicPlayer();
1371 SetReceiverSkew(2.0, base::TimeDelta::FromMicroseconds(1234567)); 1368 SetReceiverSkew(2.0, base::TimeDelta::FromMicroseconds(1234567));
1372 1369
1373 int frames_counter = 0; 1370 int frames_counter = 0;
1374 for (; frames_counter < 10000; ++frames_counter) { 1371 for (; frames_counter < 10000; ++frames_counter) {
1375 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1372 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1376 RunTasks(kFrameTimerMs); 1373 RunTasks(kFrameTimerMs);
1377 } 1374 }
1378 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1375 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1379 EXPECT_EQ(10000ul, video_ticks_.size()); 1376 EXPECT_EQ(10000ul, video_ticks_.size());
1380 } 1377 }
1381 1378
1382 TEST_F(End2EndTest, ReceiverClockSlow) { 1379 TEST_F(End2EndTest, ReceiverClockSlow) {
1383 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, false, 1); 1380 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
1384 Create(); 1381 Create();
1385 StartBasicPlayer(); 1382 StartBasicPlayer();
1386 SetReceiverSkew(0.5, base::TimeDelta::FromMicroseconds(-765432)); 1383 SetReceiverSkew(0.5, base::TimeDelta::FromMicroseconds(-765432));
1387 1384
1388 int frames_counter = 0; 1385 int frames_counter = 0;
1389 for (; frames_counter < 10000; ++frames_counter) { 1386 for (; frames_counter < 10000; ++frames_counter) {
1390 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1387 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1391 RunTasks(kFrameTimerMs); 1388 RunTasks(kFrameTimerMs);
1392 } 1389 }
1393 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1390 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1394 EXPECT_EQ(10000ul, video_ticks_.size()); 1391 EXPECT_EQ(10000ul, video_ticks_.size());
1395 } 1392 }
1396 1393
1397 TEST_F(End2EndTest, SmoothPlayoutWithFivePercentClockRateSkew) { 1394 TEST_F(End2EndTest, SmoothPlayoutWithFivePercentClockRateSkew) {
1398 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, false, 1); 1395 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
1399 Create(); 1396 Create();
1400 StartBasicPlayer(); 1397 StartBasicPlayer();
1401 SetReceiverSkew(1.05, base::TimeDelta::FromMilliseconds(-42)); 1398 SetReceiverSkew(1.05, base::TimeDelta::FromMilliseconds(-42));
1402 1399
1403 // Expect smooth playout when there is 5% skew. 1400 // Expect smooth playout when there is 5% skew.
1404 SetExpectedVideoPlayoutSmoothness( 1401 SetExpectedVideoPlayoutSmoothness(
1405 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100, 1402 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 90 / 100,
1406 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100, 1403 base::TimeDelta::FromMilliseconds(kFrameTimerMs) * 110 / 100,
1407 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10); 1404 base::TimeDelta::FromMilliseconds(kFrameTimerMs) / 10);
1408 1405
1409 int frames_counter = 0; 1406 int frames_counter = 0;
1410 for (; frames_counter < 10000; ++frames_counter) { 1407 for (; frames_counter < 10000; ++frames_counter) {
1411 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1408 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1412 RunTasks(kFrameTimerMs); 1409 RunTasks(kFrameTimerMs);
1413 } 1410 }
1414 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline. 1411 RunTasks(2 * kFrameTimerMs + 1); // Empty the pipeline.
1415 EXPECT_EQ(10000ul, video_ticks_.size()); 1412 EXPECT_EQ(10000ul, video_ticks_.size());
1416 } 1413 }
1417 1414
1418 TEST_F(End2EndTest, EvilNetwork) { 1415 TEST_F(End2EndTest, EvilNetwork) {
1419 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, false, 1); 1416 Configure(transport::kFakeSoftwareVideo, transport::kPcm16, 32000, 1);
1420 receiver_to_sender_.SetPacketPipe(test::EvilNetwork().Pass()); 1417 receiver_to_sender_.SetPacketPipe(test::EvilNetwork().Pass());
1421 sender_to_receiver_.SetPacketPipe(test::EvilNetwork().Pass()); 1418 sender_to_receiver_.SetPacketPipe(test::EvilNetwork().Pass());
1422 Create(); 1419 Create();
1423 StartBasicPlayer(); 1420 StartBasicPlayer();
1424 1421
1425 int frames_counter = 0; 1422 int frames_counter = 0;
1426 for (; frames_counter < 10000; ++frames_counter) { 1423 for (; frames_counter < 10000; ++frames_counter) {
1427 SendFakeVideoFrame(testing_clock_sender_->NowTicks()); 1424 SendFakeVideoFrame(testing_clock_sender_->NowTicks());
1428 RunTasks(kFrameTimerMs); 1425 RunTasks(kFrameTimerMs);
1429 } 1426 }
1430 base::TimeTicks test_end = testing_clock_receiver_->NowTicks(); 1427 base::TimeTicks test_end = testing_clock_receiver_->NowTicks();
1431 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline. 1428 RunTasks(100 * kFrameTimerMs + 1); // Empty the pipeline.
1432 EXPECT_GT(video_ticks_.size(), 100ul); 1429 EXPECT_GT(video_ticks_.size(), 100ul);
1433 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000); 1430 EXPECT_LT((video_ticks_.back().second - test_end).InMilliseconds(), 1000);
1434 } 1431 }
1435 1432
1436 // TODO(pwestin): Add repeatable packet loss test. 1433 // TODO(pwestin): Add repeatable packet loss test.
1437 // TODO(pwestin): Add test for misaligned send get calls. 1434 // TODO(pwestin): Add test for misaligned send get calls.
1438 // TODO(pwestin): Add more tests that does not resample. 1435 // TODO(pwestin): Add more tests that does not resample.
1439 // TODO(pwestin): Add test when we have starvation for our RunTask. 1436 // TODO(pwestin): Add test when we have starvation for our RunTask.
1440 1437
1441 } // namespace cast 1438 } // namespace cast
1442 } // namespace media 1439 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/rtp_receiver/rtp_receiver.cc ('k') | media/cast/test/receiver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698