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

Side by Side Diff: webrtc/video/video_send_stream_tests.cc

Issue 1542653002: Add audio streams to CallTest and a first A/V call test. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Comment addressed Created 4 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
« no previous file with comments | « webrtc/video/video_quality_test.cc ('k') | webrtc/video_engine_tests.isolate » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 #include <algorithm> // max 10 #include <algorithm> // max
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 61
62 void TestVp9NonFlexMode(uint8_t num_temporal_layers, 62 void TestVp9NonFlexMode(uint8_t num_temporal_layers,
63 uint8_t num_spatial_layers); 63 uint8_t num_spatial_layers);
64 }; 64 };
65 65
66 TEST_F(VideoSendStreamTest, CanStartStartedStream) { 66 TEST_F(VideoSendStreamTest, CanStartStartedStream) {
67 Call::Config call_config; 67 Call::Config call_config;
68 CreateSenderCall(call_config); 68 CreateSenderCall(call_config);
69 69
70 test::NullTransport transport; 70 test::NullTransport transport;
71 CreateSendConfig(1, &transport); 71 CreateSendConfig(1, 0, &transport);
72 CreateStreams(); 72 CreateVideoStreams();
73 video_send_stream_->Start(); 73 video_send_stream_->Start();
74 video_send_stream_->Start(); 74 video_send_stream_->Start();
75 DestroyStreams(); 75 DestroyStreams();
76 } 76 }
77 77
78 TEST_F(VideoSendStreamTest, CanStopStoppedStream) { 78 TEST_F(VideoSendStreamTest, CanStopStoppedStream) {
79 Call::Config call_config; 79 Call::Config call_config;
80 CreateSenderCall(call_config); 80 CreateSenderCall(call_config);
81 81
82 test::NullTransport transport; 82 test::NullTransport transport;
83 CreateSendConfig(1, &transport); 83 CreateSendConfig(1, 0, &transport);
84 CreateStreams(); 84 CreateVideoStreams();
85 video_send_stream_->Stop(); 85 video_send_stream_->Stop();
86 video_send_stream_->Stop(); 86 video_send_stream_->Stop();
87 DestroyStreams(); 87 DestroyStreams();
88 } 88 }
89 89
90 TEST_F(VideoSendStreamTest, SupportsCName) { 90 TEST_F(VideoSendStreamTest, SupportsCName) {
91 static std::string kCName = "PjQatC14dGfbVwGPUOA9IH7RlsFDbWl4AhXEiDsBizo="; 91 static std::string kCName = "PjQatC14dGfbVwGPUOA9IH7RlsFDbWl4AhXEiDsBizo=";
92 class CNameObserver : public test::SendTest { 92 class CNameObserver : public test::SendTest {
93 public: 93 public:
94 CNameObserver() : SendTest(kDefaultTimeoutMs) {} 94 CNameObserver() : SendTest(kDefaultTimeoutMs) {}
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 320
321 private: 321 private:
322 Action OnSendRtp(const uint8_t* packet, size_t length) override { 322 Action OnSendRtp(const uint8_t* packet, size_t length) override {
323 RTPHeader header; 323 RTPHeader header;
324 EXPECT_TRUE(parser_->Parse(packet, length, &header)); 324 EXPECT_TRUE(parser_->Parse(packet, length, &header));
325 325
326 // Send lossy receive reports to trigger FEC enabling. 326 // Send lossy receive reports to trigger FEC enabling.
327 if (send_count_++ % 2 != 0) { 327 if (send_count_++ % 2 != 0) {
328 // Receive statistics reporting having lost 50% of the packets. 328 // Receive statistics reporting having lost 50% of the packets.
329 FakeReceiveStatistics lossy_receive_stats( 329 FakeReceiveStatistics lossy_receive_stats(
330 VideoSendStreamTest::kSendSsrcs[0], header.sequenceNumber, 330 VideoSendStreamTest::kVideoSendSsrcs[0], header.sequenceNumber,
331 send_count_ / 2, 127); 331 send_count_ / 2, 127);
332 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), 332 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(),
333 &lossy_receive_stats, nullptr, 333 &lossy_receive_stats, nullptr,
334 transport_adapter_.get()); 334 transport_adapter_.get());
335 335
336 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 336 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
337 rtcp_sender.SetRemoteSSRC(VideoSendStreamTest::kSendSsrcs[0]); 337 rtcp_sender.SetRemoteSSRC(VideoSendStreamTest::kVideoSendSsrcs[0]);
338 338
339 RTCPSender::FeedbackState feedback_state; 339 RTCPSender::FeedbackState feedback_state;
340 340
341 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 341 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
342 } 342 }
343 343
344 int encapsulated_payload_type = -1; 344 int encapsulated_payload_type = -1;
345 if (header.payloadType == VideoSendStreamTest::kRedPayloadType) { 345 if (header.payloadType == VideoSendStreamTest::kRedPayloadType) {
346 encapsulated_payload_type = static_cast<int>(packet[header.headerLength]); 346 encapsulated_payload_type = static_cast<int>(packet[header.headerLength]);
347 if (encapsulated_payload_type != 347 if (encapsulated_payload_type !=
348 VideoSendStreamTest::kFakeSendPayloadType) 348 VideoSendStreamTest::kFakeVideoSendPayloadType)
349 EXPECT_EQ(VideoSendStreamTest::kUlpfecPayloadType, 349 EXPECT_EQ(VideoSendStreamTest::kUlpfecPayloadType,
350 encapsulated_payload_type); 350 encapsulated_payload_type);
351 } else { 351 } else {
352 EXPECT_EQ(VideoSendStreamTest::kFakeSendPayloadType, header.payloadType); 352 EXPECT_EQ(VideoSendStreamTest::kFakeVideoSendPayloadType,
353 header.payloadType);
353 } 354 }
354 355
355 if (header_extensions_enabled_) { 356 if (header_extensions_enabled_) {
356 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); 357 EXPECT_TRUE(header.extension.hasAbsoluteSendTime);
357 uint32_t kHalf24BitsSpace = 0xFFFFFF / 2; 358 uint32_t kHalf24BitsSpace = 0xFFFFFF / 2;
358 if (header.extension.absoluteSendTime <= kHalf24BitsSpace && 359 if (header.extension.absoluteSendTime <= kHalf24BitsSpace &&
359 prev_header_.extension.absoluteSendTime > kHalf24BitsSpace) { 360 prev_header_.extension.absoluteSendTime > kHalf24BitsSpace) {
360 // 24 bits wrap. 361 // 24 bits wrap.
361 EXPECT_GT(prev_header_.extension.absoluteSendTime, 362 EXPECT_GT(prev_header_.extension.absoluteSendTime,
362 header.extension.absoluteSendTime); 363 header.extension.absoluteSendTime);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 453
453 // Nack second packet after receiving the third one. 454 // Nack second packet after receiving the third one.
454 if (++send_count_ == 3) { 455 if (++send_count_ == 3) {
455 uint16_t nack_sequence_number = header.sequenceNumber - 1; 456 uint16_t nack_sequence_number = header.sequenceNumber - 1;
456 nacked_sequence_number_ = nack_sequence_number; 457 nacked_sequence_number_ = nack_sequence_number;
457 NullReceiveStatistics null_stats; 458 NullReceiveStatistics null_stats;
458 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &null_stats, 459 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &null_stats,
459 nullptr, transport_adapter_.get()); 460 nullptr, transport_adapter_.get());
460 461
461 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 462 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
462 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 463 rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]);
463 464
464 RTCPSender::FeedbackState feedback_state; 465 RTCPSender::FeedbackState feedback_state;
465 466
466 EXPECT_EQ(0, 467 EXPECT_EQ(0,
467 rtcp_sender.SendRTCP( 468 rtcp_sender.SendRTCP(
468 feedback_state, kRtcpNack, 1, &nack_sequence_number)); 469 feedback_state, kRtcpNack, 1, &nack_sequence_number));
469 } 470 }
470 471
471 uint16_t sequence_number = header.sequenceNumber; 472 uint16_t sequence_number = header.sequenceNumber;
472 473
473 if (header.ssrc == retransmit_ssrc_ && 474 if (header.ssrc == retransmit_ssrc_ &&
474 retransmit_ssrc_ != kSendSsrcs[0]) { 475 retransmit_ssrc_ != kVideoSendSsrcs[0]) {
475 // Not kSendSsrcs[0], assume correct RTX packet. Extract sequence 476 // Not kVideoSendSsrcs[0], assume correct RTX packet. Extract sequence
476 // number. 477 // number.
477 const uint8_t* rtx_header = packet + header.headerLength; 478 const uint8_t* rtx_header = packet + header.headerLength;
478 sequence_number = (rtx_header[0] << 8) + rtx_header[1]; 479 sequence_number = (rtx_header[0] << 8) + rtx_header[1];
479 } 480 }
480 481
481 if (sequence_number == nacked_sequence_number_) { 482 if (sequence_number == nacked_sequence_number_) {
482 EXPECT_EQ(retransmit_ssrc_, header.ssrc); 483 EXPECT_EQ(retransmit_ssrc_, header.ssrc);
483 EXPECT_EQ(retransmit_payload_type_, header.payloadType); 484 EXPECT_EQ(retransmit_payload_type_, header.payloadType);
484 observation_complete_.Set(); 485 observation_complete_.Set();
485 } 486 }
486 487
487 return SEND_PACKET; 488 return SEND_PACKET;
488 } 489 }
489 490
490 void ModifyVideoConfigs( 491 void ModifyVideoConfigs(
491 VideoSendStream::Config* send_config, 492 VideoSendStream::Config* send_config,
492 std::vector<VideoReceiveStream::Config>* receive_configs, 493 std::vector<VideoReceiveStream::Config>* receive_configs,
493 VideoEncoderConfig* encoder_config) override { 494 VideoEncoderConfig* encoder_config) override {
494 transport_adapter_.reset( 495 transport_adapter_.reset(
495 new internal::TransportAdapter(send_config->send_transport)); 496 new internal::TransportAdapter(send_config->send_transport));
496 transport_adapter_->Enable(); 497 transport_adapter_->Enable();
497 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; 498 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
498 send_config->rtp.rtx.payload_type = retransmit_payload_type_; 499 send_config->rtp.rtx.payload_type = retransmit_payload_type_;
499 if (retransmit_ssrc_ != kSendSsrcs[0]) 500 if (retransmit_ssrc_ != kVideoSendSsrcs[0])
500 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); 501 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_);
501 } 502 }
502 503
503 void PerformTest() override { 504 void PerformTest() override {
504 EXPECT_TRUE(Wait()) << "Timed out while waiting for NACK retransmission."; 505 EXPECT_TRUE(Wait()) << "Timed out while waiting for NACK retransmission.";
505 } 506 }
506 507
507 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 508 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
508 int send_count_; 509 int send_count_;
509 uint32_t retransmit_ssrc_; 510 uint32_t retransmit_ssrc_;
510 uint8_t retransmit_payload_type_; 511 uint8_t retransmit_payload_type_;
511 int nacked_sequence_number_; 512 int nacked_sequence_number_;
512 } test(retransmit_ssrc, retransmit_payload_type); 513 } test(retransmit_ssrc, retransmit_payload_type);
513 514
514 RunBaseTest(&test, FakeNetworkPipe::Config()); 515 RunBaseTest(&test, FakeNetworkPipe::Config());
515 } 516 }
516 517
517 TEST_F(VideoSendStreamTest, RetransmitsNack) { 518 TEST_F(VideoSendStreamTest, RetransmitsNack) {
518 // Normal NACKs should use the send SSRC. 519 // Normal NACKs should use the send SSRC.
519 TestNackRetransmission(kSendSsrcs[0], kFakeSendPayloadType); 520 TestNackRetransmission(kVideoSendSsrcs[0], kFakeVideoSendPayloadType);
520 } 521 }
521 522
522 TEST_F(VideoSendStreamTest, RetransmitsNackOverRtx) { 523 TEST_F(VideoSendStreamTest, RetransmitsNackOverRtx) {
523 // NACKs over RTX should use a separate SSRC. 524 // NACKs over RTX should use a separate SSRC.
524 TestNackRetransmission(kSendRtxSsrcs[0], kSendRtxPayloadType); 525 TestNackRetransmission(kSendRtxSsrcs[0], kSendRtxPayloadType);
525 } 526 }
526 527
527 void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format, 528 void VideoSendStreamTest::TestPacketFragmentationSize(VideoFormat format,
528 bool with_fec) { 529 bool with_fec) {
529 // Use a fake encoder to output a frame of every size in the range [90, 290], 530 // Use a fake encoder to output a frame of every size in the range [90, 290],
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 } 635 }
635 636
636 return SEND_PACKET; 637 return SEND_PACKET;
637 } 638 }
638 639
639 void TriggerLossReport(const RTPHeader& header) { 640 void TriggerLossReport(const RTPHeader& header) {
640 // Send lossy receive reports to trigger FEC enabling. 641 // Send lossy receive reports to trigger FEC enabling.
641 if (packet_count_++ % 2 != 0) { 642 if (packet_count_++ % 2 != 0) {
642 // Receive statistics reporting having lost 50% of the packets. 643 // Receive statistics reporting having lost 50% of the packets.
643 FakeReceiveStatistics lossy_receive_stats( 644 FakeReceiveStatistics lossy_receive_stats(
644 kSendSsrcs[0], header.sequenceNumber, packet_count_ / 2, 127); 645 kVideoSendSsrcs[0], header.sequenceNumber, packet_count_ / 2, 127);
645 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), 646 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(),
646 &lossy_receive_stats, nullptr, 647 &lossy_receive_stats, nullptr,
647 transport_adapter_.get()); 648 transport_adapter_.get());
648 649
649 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 650 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
650 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 651 rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]);
651 652
652 RTCPSender::FeedbackState feedback_state; 653 RTCPSender::FeedbackState feedback_state;
653 654
654 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 655 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
655 } 656 }
656 } 657 }
657 658
658 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) { 659 virtual void EncodedFrameCallback(const EncodedFrame& encoded_frame) {
659 // Increase frame size for next encoded frame, in the context of the 660 // Increase frame size for next encoded frame, in the context of the
660 // encoder thread. 661 // encoder thread.
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
857 858
858 enum TestState { 859 enum TestState {
859 kBeforeSuspend, 860 kBeforeSuspend,
860 kDuringSuspend, 861 kDuringSuspend,
861 kWaitingForPacket, 862 kWaitingForPacket,
862 kWaitingForStats 863 kWaitingForStats
863 }; 864 };
864 865
865 virtual void SendRtcpFeedback(int remb_value) 866 virtual void SendRtcpFeedback(int remb_value)
866 EXCLUSIVE_LOCKS_REQUIRED(crit_) { 867 EXCLUSIVE_LOCKS_REQUIRED(crit_) {
867 FakeReceiveStatistics receive_stats( 868 FakeReceiveStatistics receive_stats(kVideoSendSsrcs[0],
868 kSendSsrcs[0], last_sequence_number_, rtp_count_, 0); 869 last_sequence_number_, rtp_count_, 0);
869 RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr, 870 RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr,
870 transport_adapter_.get()); 871 transport_adapter_.get());
871 872
872 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 873 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
873 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 874 rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]);
874 if (remb_value > 0) { 875 if (remb_value > 0) {
875 rtcp_sender.SetREMBStatus(true); 876 rtcp_sender.SetREMBStatus(true);
876 rtcp_sender.SetREMBData(remb_value, std::vector<uint32_t>()); 877 rtcp_sender.SetREMBData(remb_value, std::vector<uint32_t>());
877 } 878 }
878 RTCPSender::FeedbackState feedback_state; 879 RTCPSender::FeedbackState feedback_state;
879 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 880 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
880 } 881 }
881 882
882 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; 883 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_;
883 Clock* const clock_; 884 Clock* const clock_;
(...skipping 30 matching lines...) Expand all
914 } 915 }
915 916
916 Action OnSendRtcp(const uint8_t* packet, size_t length) override { 917 Action OnSendRtcp(const uint8_t* packet, size_t length) override {
917 rtc::CritScope lock(&crit_); 918 rtc::CritScope lock(&crit_);
918 const int kVideoMutedThresholdMs = 10000; 919 const int kVideoMutedThresholdMs = 10000;
919 if (last_packet_time_ms_ > 0 && 920 if (last_packet_time_ms_ > 0 &&
920 clock_->TimeInMilliseconds() - last_packet_time_ms_ > 921 clock_->TimeInMilliseconds() - last_packet_time_ms_ >
921 kVideoMutedThresholdMs) 922 kVideoMutedThresholdMs)
922 observation_complete_.Set(); 923 observation_complete_.Set();
923 // Receive statistics reporting having lost 50% of the packets. 924 // Receive statistics reporting having lost 50% of the packets.
924 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); 925 FakeReceiveStatistics receive_stats(kVideoSendSsrcs[0], 1, 1, 0);
925 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, 926 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats,
926 nullptr, transport_adapter_.get()); 927 nullptr, transport_adapter_.get());
927 928
928 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); 929 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize);
929 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); 930 rtcp_sender.SetRemoteSSRC(kVideoSendSsrcs[0]);
930 931
931 RTCPSender::FeedbackState feedback_state; 932 RTCPSender::FeedbackState feedback_state;
932 933
933 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); 934 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr));
934 return SEND_PACKET; 935 return SEND_PACKET;
935 } 936 }
936 937
937 void OnTransportsCreated( 938 void OnTransportsCreated(
938 test::PacketTransport* send_transport, 939 test::PacketTransport* send_transport,
939 test::PacketTransport* receive_transport) override { 940 test::PacketTransport* receive_transport) override {
940 transport_adapter_.reset( 941 transport_adapter_.reset(
941 new internal::TransportAdapter(receive_transport)); 942 new internal::TransportAdapter(receive_transport));
942 transport_adapter_->Enable(); 943 transport_adapter_->Enable();
943 } 944 }
944 945
945 size_t GetNumStreams() const override { return 3; } 946 size_t GetNumVideoStreams() const override { return 3; }
946 947
947 virtual void OnFrameGeneratorCapturerCreated( 948 virtual void OnFrameGeneratorCapturerCreated(
948 test::FrameGeneratorCapturer* frame_generator_capturer) { 949 test::FrameGeneratorCapturer* frame_generator_capturer) {
949 rtc::CritScope lock(&crit_); 950 rtc::CritScope lock(&crit_);
950 capturer_ = frame_generator_capturer; 951 capturer_ = frame_generator_capturer;
951 } 952 }
952 953
953 void PerformTest() override { 954 void PerformTest() override {
954 EXPECT_TRUE(Wait()) 955 EXPECT_TRUE(Wait())
955 << "Timed out while waiting for RTP packets to stop being sent."; 956 << "Timed out while waiting for RTP packets to stop being sent.";
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 } 1079 }
1079 1080
1080 private: 1081 private:
1081 mutable rtc::CriticalSection crit_; 1082 mutable rtc::CriticalSection crit_;
1082 int start_bitrate_kbps_ GUARDED_BY(crit_); 1083 int start_bitrate_kbps_ GUARDED_BY(crit_);
1083 }; 1084 };
1084 1085
1085 CreateSenderCall(Call::Config()); 1086 CreateSenderCall(Call::Config());
1086 1087
1087 test::NullTransport transport; 1088 test::NullTransport transport;
1088 CreateSendConfig(1, &transport); 1089 CreateSendConfig(1, 0, &transport);
1089 1090
1090 Call::Config::BitrateConfig bitrate_config; 1091 Call::Config::BitrateConfig bitrate_config;
1091 bitrate_config.start_bitrate_bps = 1092 bitrate_config.start_bitrate_bps =
1092 2 * video_encoder_config_.streams[0].max_bitrate_bps; 1093 2 * video_encoder_config_.streams[0].max_bitrate_bps;
1093 sender_call_->SetBitrateConfig(bitrate_config); 1094 sender_call_->SetBitrateConfig(bitrate_config);
1094 1095
1095 StartBitrateObserver encoder; 1096 StartBitrateObserver encoder;
1096 video_send_config_.encoder_settings.encoder = &encoder; 1097 video_send_config_.encoder_settings.encoder = &encoder;
1097 1098
1098 CreateStreams(); 1099 CreateVideoStreams();
1099 1100
1100 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, 1101 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000,
1101 encoder.GetStartBitrateKbps()); 1102 encoder.GetStartBitrateKbps());
1102 1103
1103 video_encoder_config_.streams[0].max_bitrate_bps = 1104 video_encoder_config_.streams[0].max_bitrate_bps =
1104 2 * bitrate_config.start_bitrate_bps; 1105 2 * bitrate_config.start_bitrate_bps;
1105 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); 1106 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_);
1106 1107
1107 // New bitrate should be reconfigured above the previous max. As there's no 1108 // New bitrate should be reconfigured above the previous max. As there's no
1108 // network connection this shouldn't be flaky, as no bitrate should've been 1109 // network connection this shouldn't be flaky, as no bitrate should've been
(...skipping 29 matching lines...) Expand all
1138 std::vector<VideoFrame> output_frames_; 1139 std::vector<VideoFrame> output_frames_;
1139 1140
1140 // Indicate an output frame has arrived. 1141 // Indicate an output frame has arrived.
1141 rtc::Event output_frame_event_; 1142 rtc::Event output_frame_event_;
1142 }; 1143 };
1143 1144
1144 // Initialize send stream. 1145 // Initialize send stream.
1145 CreateSenderCall(Call::Config()); 1146 CreateSenderCall(Call::Config());
1146 1147
1147 test::NullTransport transport; 1148 test::NullTransport transport;
1148 CreateSendConfig(1, &transport); 1149 CreateSendConfig(1, 0, &transport);
1149 FrameObserver observer; 1150 FrameObserver observer;
1150 video_send_config_.pre_encode_callback = &observer; 1151 video_send_config_.pre_encode_callback = &observer;
1151 CreateStreams(); 1152 CreateVideoStreams();
1152 1153
1153 // Prepare five input frames. Send ordinary VideoFrame and texture frames 1154 // Prepare five input frames. Send ordinary VideoFrame and texture frames
1154 // alternatively. 1155 // alternatively.
1155 std::vector<VideoFrame> input_frames; 1156 std::vector<VideoFrame> input_frames;
1156 int width = static_cast<int>(video_encoder_config_.streams[0].width); 1157 int width = static_cast<int>(video_encoder_config_.streams[0].width);
1157 int height = static_cast<int>(video_encoder_config_.streams[0].height); 1158 int height = static_cast<int>(video_encoder_config_.streams[0].height);
1158 test::FakeNativeHandle* handle1 = new test::FakeNativeHandle(); 1159 test::FakeNativeHandle* handle1 = new test::FakeNativeHandle();
1159 test::FakeNativeHandle* handle2 = new test::FakeNativeHandle(); 1160 test::FakeNativeHandle* handle2 = new test::FakeNativeHandle();
1160 test::FakeNativeHandle* handle3 = new test::FakeNativeHandle(); 1161 test::FakeNativeHandle* handle3 = new test::FakeNativeHandle();
1161 input_frames.push_back(test::FakeNativeHandle::CreateFrame( 1162 input_frames.push_back(test::FakeNativeHandle::CreateFrame(
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after
1812 return 0; 1813 return 0;
1813 } 1814 }
1814 void ModifyVideoConfigs( 1815 void ModifyVideoConfigs(
1815 VideoSendStream::Config* send_config, 1816 VideoSendStream::Config* send_config,
1816 std::vector<VideoReceiveStream::Config>* receive_configs, 1817 std::vector<VideoReceiveStream::Config>* receive_configs,
1817 VideoEncoderConfig* encoder_config) override { 1818 VideoEncoderConfig* encoder_config) override {
1818 send_config->encoder_settings.encoder = this; 1819 send_config->encoder_settings.encoder = this;
1819 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); 1820 EXPECT_EQ(kNumStreams, encoder_config->streams.size());
1820 } 1821 }
1821 1822
1822 size_t GetNumStreams() const override { return kNumStreams; } 1823 size_t GetNumVideoStreams() const override { return kNumStreams; }
1823 1824
1824 void PerformTest() override { 1825 void PerformTest() override {
1825 EXPECT_TRUE(Wait()) 1826 EXPECT_TRUE(Wait())
1826 << "Timed out while waiting for the encoder to send one frame."; 1827 << "Timed out while waiting for the encoder to send one frame.";
1827 VideoSendStream::Stats stats = send_stream_->GetStats(); 1828 VideoSendStream::Stats stats = send_stream_->GetStats();
1828 1829
1829 for (size_t i = 0; i < kNumStreams; ++i) { 1830 for (size_t i = 0; i < kNumStreams; ++i) {
1830 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) != 1831 ASSERT_TRUE(stats.substreams.find(kVideoSendSsrcs[i]) !=
1831 stats.substreams.end()) 1832 stats.substreams.end())
1832 << "No stats for SSRC: " << kSendSsrcs[i] 1833 << "No stats for SSRC: " << kVideoSendSsrcs[i]
1833 << ", stats should exist as soon as frames have been encoded."; 1834 << ", stats should exist as soon as frames have been encoded.";
1834 VideoSendStream::StreamStats ssrc_stats = 1835 VideoSendStream::StreamStats ssrc_stats =
1835 stats.substreams[kSendSsrcs[i]]; 1836 stats.substreams[kVideoSendSsrcs[i]];
1836 EXPECT_EQ(kEncodedResolution[i].width, ssrc_stats.width); 1837 EXPECT_EQ(kEncodedResolution[i].width, ssrc_stats.width);
1837 EXPECT_EQ(kEncodedResolution[i].height, ssrc_stats.height); 1838 EXPECT_EQ(kEncodedResolution[i].height, ssrc_stats.height);
1838 } 1839 }
1839 } 1840 }
1840 1841
1841 void OnVideoStreamsCreated( 1842 void OnVideoStreamsCreated(
1842 VideoSendStream* send_stream, 1843 VideoSendStream* send_stream,
1843 const std::vector<VideoReceiveStream*>& receive_streams) override { 1844 const std::vector<VideoReceiveStream*>& receive_streams) override {
1844 send_stream_ = send_stream; 1845 send_stream_ = send_stream;
1845 } 1846 }
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
2233 observation_complete_.Set(); 2234 observation_complete_.Set();
2234 } 2235 }
2235 } 2236 }
2236 } test; 2237 } test;
2237 2238
2238 RunBaseTest(&test, FakeNetworkPipe::Config()); 2239 RunBaseTest(&test, FakeNetworkPipe::Config());
2239 } 2240 }
2240 #endif 2241 #endif
2241 2242
2242 } // namespace webrtc 2243 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/video_quality_test.cc ('k') | webrtc/video_engine_tests.isolate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698