OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |