| 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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, &transport); |
| 72 CreateStreams(); | 72 CreateStreams(); |
| 73 send_stream_->Start(); | 73 video_send_stream_->Start(); |
| 74 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, &transport); |
| 84 CreateStreams(); | 84 CreateStreams(); |
| 85 send_stream_->Stop(); | 85 video_send_stream_->Stop(); |
| 86 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) {} |
| 95 | 95 |
| 96 private: | 96 private: |
| 97 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | 97 Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
| 98 RTCPUtility::RTCPParserV2 parser(packet, length, true); | 98 RTCPUtility::RTCPParserV2 parser(packet, length, true); |
| 99 EXPECT_TRUE(parser.IsValid()); | 99 EXPECT_TRUE(parser.IsValid()); |
| 100 | 100 |
| 101 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 101 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); |
| 102 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | 102 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { |
| 103 if (packet_type == RTCPUtility::RTCPPacketTypes::kSdesChunk) { | 103 if (packet_type == RTCPUtility::RTCPPacketTypes::kSdesChunk) { |
| 104 EXPECT_EQ(parser.Packet().CName.CName, kCName); | 104 EXPECT_EQ(parser.Packet().CName.CName, kCName); |
| 105 observation_complete_.Set(); | 105 observation_complete_.Set(); |
| 106 } | 106 } |
| 107 | 107 |
| 108 packet_type = parser.Iterate(); | 108 packet_type = parser.Iterate(); |
| 109 } | 109 } |
| 110 | 110 |
| 111 return SEND_PACKET; | 111 return SEND_PACKET; |
| 112 } | 112 } |
| 113 | 113 |
| 114 void ModifyConfigs(VideoSendStream::Config* send_config, | 114 void ModifyVideoConfigs( |
| 115 std::vector<VideoReceiveStream::Config>* receive_configs, | 115 VideoSendStream::Config* send_config, |
| 116 VideoEncoderConfig* encoder_config) override { | 116 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 117 VideoEncoderConfig* encoder_config) override { |
| 117 send_config->rtp.c_name = kCName; | 118 send_config->rtp.c_name = kCName; |
| 118 } | 119 } |
| 119 | 120 |
| 120 void PerformTest() override { | 121 void PerformTest() override { |
| 121 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP with CNAME."; | 122 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP with CNAME."; |
| 122 } | 123 } |
| 123 } test; | 124 } test; |
| 124 | 125 |
| 125 RunBaseTest(&test, FakeNetworkPipe::Config()); | 126 RunBaseTest(&test, FakeNetworkPipe::Config()); |
| 126 } | 127 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 139 | 140 |
| 140 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); | 141 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); |
| 141 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); | 142 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); |
| 142 EXPECT_EQ(header.extension.transmissionTimeOffset, 0); | 143 EXPECT_EQ(header.extension.transmissionTimeOffset, 0); |
| 143 EXPECT_GT(header.extension.absoluteSendTime, 0u); | 144 EXPECT_GT(header.extension.absoluteSendTime, 0u); |
| 144 observation_complete_.Set(); | 145 observation_complete_.Set(); |
| 145 | 146 |
| 146 return SEND_PACKET; | 147 return SEND_PACKET; |
| 147 } | 148 } |
| 148 | 149 |
| 149 void ModifyConfigs(VideoSendStream::Config* send_config, | 150 void ModifyVideoConfigs( |
| 150 std::vector<VideoReceiveStream::Config>* receive_configs, | 151 VideoSendStream::Config* send_config, |
| 151 VideoEncoderConfig* encoder_config) override { | 152 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 153 VideoEncoderConfig* encoder_config) override { |
| 152 send_config->rtp.extensions.clear(); | 154 send_config->rtp.extensions.clear(); |
| 153 send_config->rtp.extensions.push_back(RtpExtension( | 155 send_config->rtp.extensions.push_back(RtpExtension( |
| 154 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId)); | 156 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId)); |
| 155 } | 157 } |
| 156 | 158 |
| 157 void PerformTest() override { | 159 void PerformTest() override { |
| 158 EXPECT_TRUE(Wait()) << "Timed out while waiting for single RTP packet."; | 160 EXPECT_TRUE(Wait()) << "Timed out while waiting for single RTP packet."; |
| 159 } | 161 } |
| 160 } test; | 162 } test; |
| 161 | 163 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 180 | 182 |
| 181 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); | 183 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); |
| 182 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); | 184 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); |
| 183 EXPECT_GT(header.extension.transmissionTimeOffset, 0); | 185 EXPECT_GT(header.extension.transmissionTimeOffset, 0); |
| 184 EXPECT_EQ(header.extension.absoluteSendTime, 0u); | 186 EXPECT_EQ(header.extension.absoluteSendTime, 0u); |
| 185 observation_complete_.Set(); | 187 observation_complete_.Set(); |
| 186 | 188 |
| 187 return SEND_PACKET; | 189 return SEND_PACKET; |
| 188 } | 190 } |
| 189 | 191 |
| 190 void ModifyConfigs(VideoSendStream::Config* send_config, | 192 void ModifyVideoConfigs( |
| 191 std::vector<VideoReceiveStream::Config>* receive_configs, | 193 VideoSendStream::Config* send_config, |
| 192 VideoEncoderConfig* encoder_config) override { | 194 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 195 VideoEncoderConfig* encoder_config) override { |
| 193 send_config->encoder_settings.encoder = &encoder_; | 196 send_config->encoder_settings.encoder = &encoder_; |
| 194 send_config->rtp.extensions.clear(); | 197 send_config->rtp.extensions.clear(); |
| 195 send_config->rtp.extensions.push_back( | 198 send_config->rtp.extensions.push_back( |
| 196 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId)); | 199 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId)); |
| 197 } | 200 } |
| 198 | 201 |
| 199 void PerformTest() override { | 202 void PerformTest() override { |
| 200 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet."; | 203 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet."; |
| 201 } | 204 } |
| 202 | 205 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 223 | 226 |
| 224 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); | 227 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); |
| 225 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); | 228 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); |
| 226 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); | 229 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); |
| 227 | 230 |
| 228 observation_complete_.Set(); | 231 observation_complete_.Set(); |
| 229 | 232 |
| 230 return SEND_PACKET; | 233 return SEND_PACKET; |
| 231 } | 234 } |
| 232 | 235 |
| 233 void ModifyConfigs(VideoSendStream::Config* send_config, | 236 void ModifyVideoConfigs( |
| 234 std::vector<VideoReceiveStream::Config>* receive_configs, | 237 VideoSendStream::Config* send_config, |
| 235 VideoEncoderConfig* encoder_config) override { | 238 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 239 VideoEncoderConfig* encoder_config) override { |
| 236 send_config->encoder_settings.encoder = &encoder_; | 240 send_config->encoder_settings.encoder = &encoder_; |
| 237 send_config->rtp.extensions.clear(); | 241 send_config->rtp.extensions.clear(); |
| 238 send_config->rtp.extensions.push_back( | 242 send_config->rtp.extensions.push_back( |
| 239 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); | 243 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
| 240 } | 244 } |
| 241 | 245 |
| 242 void PerformTest() override { | 246 void PerformTest() override { |
| 243 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet."; | 247 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet."; |
| 244 } | 248 } |
| 245 | 249 |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 } | 380 } |
| 377 | 381 |
| 378 if (received_media_ && received_fec_ && send_count_ > 100) | 382 if (received_media_ && received_fec_ && send_count_ > 100) |
| 379 observation_complete_.Set(); | 383 observation_complete_.Set(); |
| 380 | 384 |
| 381 prev_header_ = header; | 385 prev_header_ = header; |
| 382 | 386 |
| 383 return SEND_PACKET; | 387 return SEND_PACKET; |
| 384 } | 388 } |
| 385 | 389 |
| 386 void ModifyConfigs(VideoSendStream::Config* send_config, | 390 void ModifyVideoConfigs( |
| 387 std::vector<VideoReceiveStream::Config>* receive_configs, | 391 VideoSendStream::Config* send_config, |
| 388 VideoEncoderConfig* encoder_config) override { | 392 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 393 VideoEncoderConfig* encoder_config) override { |
| 389 transport_adapter_.reset( | 394 transport_adapter_.reset( |
| 390 new internal::TransportAdapter(send_config->send_transport)); | 395 new internal::TransportAdapter(send_config->send_transport)); |
| 391 transport_adapter_->Enable(); | 396 transport_adapter_->Enable(); |
| 392 send_config->rtp.fec.red_payload_type = | 397 send_config->rtp.fec.red_payload_type = |
| 393 VideoSendStreamTest::kRedPayloadType; | 398 VideoSendStreamTest::kRedPayloadType; |
| 394 send_config->rtp.fec.ulpfec_payload_type = | 399 send_config->rtp.fec.ulpfec_payload_type = |
| 395 VideoSendStreamTest::kUlpfecPayloadType; | 400 VideoSendStreamTest::kUlpfecPayloadType; |
| 396 if (header_extensions_enabled_) { | 401 if (header_extensions_enabled_) { |
| 397 send_config->rtp.extensions.push_back(RtpExtension( | 402 send_config->rtp.extensions.push_back(RtpExtension( |
| 398 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId)); | 403 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId)); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 | 480 |
| 476 if (sequence_number == nacked_sequence_number_) { | 481 if (sequence_number == nacked_sequence_number_) { |
| 477 EXPECT_EQ(retransmit_ssrc_, header.ssrc); | 482 EXPECT_EQ(retransmit_ssrc_, header.ssrc); |
| 478 EXPECT_EQ(retransmit_payload_type_, header.payloadType); | 483 EXPECT_EQ(retransmit_payload_type_, header.payloadType); |
| 479 observation_complete_.Set(); | 484 observation_complete_.Set(); |
| 480 } | 485 } |
| 481 | 486 |
| 482 return SEND_PACKET; | 487 return SEND_PACKET; |
| 483 } | 488 } |
| 484 | 489 |
| 485 void ModifyConfigs(VideoSendStream::Config* send_config, | 490 void ModifyVideoConfigs( |
| 486 std::vector<VideoReceiveStream::Config>* receive_configs, | 491 VideoSendStream::Config* send_config, |
| 487 VideoEncoderConfig* encoder_config) override { | 492 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 493 VideoEncoderConfig* encoder_config) override { |
| 488 transport_adapter_.reset( | 494 transport_adapter_.reset( |
| 489 new internal::TransportAdapter(send_config->send_transport)); | 495 new internal::TransportAdapter(send_config->send_transport)); |
| 490 transport_adapter_->Enable(); | 496 transport_adapter_->Enable(); |
| 491 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 497 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 492 send_config->rtp.rtx.payload_type = retransmit_payload_type_; | 498 send_config->rtp.rtx.payload_type = retransmit_payload_type_; |
| 493 if (retransmit_ssrc_ != kSendSsrcs[0]) | 499 if (retransmit_ssrc_ != kSendSsrcs[0]) |
| 494 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); | 500 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); |
| 495 } | 501 } |
| 496 | 502 |
| 497 void PerformTest() override { | 503 void PerformTest() override { |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 659 encoder_.SetFrameSize(static_cast<size_t>(current_size_frame_.Value())); | 665 encoder_.SetFrameSize(static_cast<size_t>(current_size_frame_.Value())); |
| 660 } | 666 } |
| 661 | 667 |
| 662 Call::Config GetSenderCallConfig() override { | 668 Call::Config GetSenderCallConfig() override { |
| 663 Call::Config config; | 669 Call::Config config; |
| 664 const int kMinBitrateBps = 30000; | 670 const int kMinBitrateBps = 30000; |
| 665 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; | 671 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; |
| 666 return config; | 672 return config; |
| 667 } | 673 } |
| 668 | 674 |
| 669 void ModifyConfigs(VideoSendStream::Config* send_config, | 675 void ModifyVideoConfigs( |
| 670 std::vector<VideoReceiveStream::Config>* receive_configs, | 676 VideoSendStream::Config* send_config, |
| 671 VideoEncoderConfig* encoder_config) override { | 677 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 678 VideoEncoderConfig* encoder_config) override { |
| 672 transport_adapter_.reset( | 679 transport_adapter_.reset( |
| 673 new internal::TransportAdapter(send_config->send_transport)); | 680 new internal::TransportAdapter(send_config->send_transport)); |
| 674 transport_adapter_->Enable(); | 681 transport_adapter_->Enable(); |
| 675 if (use_fec_) { | 682 if (use_fec_) { |
| 676 send_config->rtp.fec.red_payload_type = kRedPayloadType; | 683 send_config->rtp.fec.red_payload_type = kRedPayloadType; |
| 677 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 684 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 678 } | 685 } |
| 679 | 686 |
| 680 if (!test_generic_packetization_) | 687 if (!test_generic_packetization_) |
| 681 send_config->encoder_settings.payload_name = "VP8"; | 688 send_config->encoder_settings.payload_name = "VP8"; |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 813 void set_low_remb_bps(int value) { | 820 void set_low_remb_bps(int value) { |
| 814 rtc::CritScope lock(&crit_); | 821 rtc::CritScope lock(&crit_); |
| 815 low_remb_bps_ = value; | 822 low_remb_bps_ = value; |
| 816 } | 823 } |
| 817 | 824 |
| 818 void set_high_remb_bps(int value) { | 825 void set_high_remb_bps(int value) { |
| 819 rtc::CritScope lock(&crit_); | 826 rtc::CritScope lock(&crit_); |
| 820 high_remb_bps_ = value; | 827 high_remb_bps_ = value; |
| 821 } | 828 } |
| 822 | 829 |
| 823 void OnStreamsCreated( | 830 void OnVideoStreamsCreated( |
| 824 VideoSendStream* send_stream, | 831 VideoSendStream* send_stream, |
| 825 const std::vector<VideoReceiveStream*>& receive_streams) override { | 832 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 826 stream_ = send_stream; | 833 stream_ = send_stream; |
| 827 } | 834 } |
| 828 | 835 |
| 829 void ModifyConfigs(VideoSendStream::Config* send_config, | 836 void ModifyVideoConfigs( |
| 830 std::vector<VideoReceiveStream::Config>* receive_configs, | 837 VideoSendStream::Config* send_config, |
| 831 VideoEncoderConfig* encoder_config) override { | 838 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 839 VideoEncoderConfig* encoder_config) override { |
| 832 transport_adapter_.reset( | 840 transport_adapter_.reset( |
| 833 new internal::TransportAdapter(send_config->send_transport)); | 841 new internal::TransportAdapter(send_config->send_transport)); |
| 834 transport_adapter_->Enable(); | 842 transport_adapter_->Enable(); |
| 835 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 843 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 836 send_config->pre_encode_callback = this; | 844 send_config->pre_encode_callback = this; |
| 837 send_config->suspend_below_min_bitrate = true; | 845 send_config->suspend_below_min_bitrate = true; |
| 838 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; | 846 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; |
| 839 set_low_remb_bps(min_bitrate_bps - 10000); | 847 set_low_remb_bps(min_bitrate_bps - 10000); |
| 840 int threshold_window = std::max(min_bitrate_bps / 10, 10000); | 848 int threshold_window = std::max(min_bitrate_bps / 10, 10000); |
| 841 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, | 849 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1003 bitrate_capped_ = true; | 1011 bitrate_capped_ = true; |
| 1004 } else if (bitrate_capped_ && | 1012 } else if (bitrate_capped_ && |
| 1005 total_bitrate_bps < kRembRespectedBitrateBps) { | 1013 total_bitrate_bps < kRembRespectedBitrateBps) { |
| 1006 observation_complete_.Set(); | 1014 observation_complete_.Set(); |
| 1007 } | 1015 } |
| 1008 } | 1016 } |
| 1009 // Packets don't have to be delivered since the test is the receiver. | 1017 // Packets don't have to be delivered since the test is the receiver. |
| 1010 return DROP_PACKET; | 1018 return DROP_PACKET; |
| 1011 } | 1019 } |
| 1012 | 1020 |
| 1013 void OnStreamsCreated( | 1021 void OnVideoStreamsCreated( |
| 1014 VideoSendStream* send_stream, | 1022 VideoSendStream* send_stream, |
| 1015 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1023 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1016 stream_ = send_stream; | 1024 stream_ = send_stream; |
| 1017 RtpRtcp::Configuration config; | 1025 RtpRtcp::Configuration config; |
| 1018 config.outgoing_transport = feedback_transport_.get(); | 1026 config.outgoing_transport = feedback_transport_.get(); |
| 1019 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); | 1027 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); |
| 1020 rtp_rtcp_->SetREMBStatus(true); | 1028 rtp_rtcp_->SetREMBStatus(true); |
| 1021 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); | 1029 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); |
| 1022 } | 1030 } |
| 1023 | 1031 |
| 1024 void ModifyConfigs(VideoSendStream::Config* send_config, | 1032 void ModifyVideoConfigs( |
| 1025 std::vector<VideoReceiveStream::Config>* receive_configs, | 1033 VideoSendStream::Config* send_config, |
| 1026 VideoEncoderConfig* encoder_config) override { | 1034 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1035 VideoEncoderConfig* encoder_config) override { |
| 1027 feedback_transport_.reset( | 1036 feedback_transport_.reset( |
| 1028 new internal::TransportAdapter(send_config->send_transport)); | 1037 new internal::TransportAdapter(send_config->send_transport)); |
| 1029 feedback_transport_->Enable(); | 1038 feedback_transport_->Enable(); |
| 1030 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 1039 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
| 1031 } | 1040 } |
| 1032 | 1041 |
| 1033 void PerformTest() override { | 1042 void PerformTest() override { |
| 1034 EXPECT_TRUE(Wait()) | 1043 EXPECT_TRUE(Wait()) |
| 1035 << "Timeout while waiting for low bitrate stats after REMB."; | 1044 << "Timeout while waiting for low bitrate stats after REMB."; |
| 1036 } | 1045 } |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1073 int start_bitrate_kbps_ GUARDED_BY(crit_); | 1082 int start_bitrate_kbps_ GUARDED_BY(crit_); |
| 1074 }; | 1083 }; |
| 1075 | 1084 |
| 1076 CreateSenderCall(Call::Config()); | 1085 CreateSenderCall(Call::Config()); |
| 1077 | 1086 |
| 1078 test::NullTransport transport; | 1087 test::NullTransport transport; |
| 1079 CreateSendConfig(1, &transport); | 1088 CreateSendConfig(1, &transport); |
| 1080 | 1089 |
| 1081 Call::Config::BitrateConfig bitrate_config; | 1090 Call::Config::BitrateConfig bitrate_config; |
| 1082 bitrate_config.start_bitrate_bps = | 1091 bitrate_config.start_bitrate_bps = |
| 1083 2 * encoder_config_.streams[0].max_bitrate_bps; | 1092 2 * video_encoder_config_.streams[0].max_bitrate_bps; |
| 1084 sender_call_->SetBitrateConfig(bitrate_config); | 1093 sender_call_->SetBitrateConfig(bitrate_config); |
| 1085 | 1094 |
| 1086 StartBitrateObserver encoder; | 1095 StartBitrateObserver encoder; |
| 1087 send_config_.encoder_settings.encoder = &encoder; | 1096 video_send_config_.encoder_settings.encoder = &encoder; |
| 1088 | 1097 |
| 1089 CreateStreams(); | 1098 CreateStreams(); |
| 1090 | 1099 |
| 1091 EXPECT_EQ(encoder_config_.streams[0].max_bitrate_bps / 1000, | 1100 EXPECT_EQ(video_encoder_config_.streams[0].max_bitrate_bps / 1000, |
| 1092 encoder.GetStartBitrateKbps()); | 1101 encoder.GetStartBitrateKbps()); |
| 1093 | 1102 |
| 1094 encoder_config_.streams[0].max_bitrate_bps = | 1103 video_encoder_config_.streams[0].max_bitrate_bps = |
| 1095 2 * bitrate_config.start_bitrate_bps; | 1104 2 * bitrate_config.start_bitrate_bps; |
| 1096 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1105 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
| 1097 | 1106 |
| 1098 // New bitrate should be reconfigured above the previous max. As there's no | 1107 // New bitrate should be reconfigured above the previous max. As there's no |
| 1099 // network connection this shouldn't be flaky, as no bitrate should've been | 1108 // network connection this shouldn't be flaky, as no bitrate should've been |
| 1100 // reported in between. | 1109 // reported in between. |
| 1101 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, | 1110 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
| 1102 encoder.GetStartBitrateKbps()); | 1111 encoder.GetStartBitrateKbps()); |
| 1103 | 1112 |
| 1104 DestroyStreams(); | 1113 DestroyStreams(); |
| 1105 } | 1114 } |
| 1106 | 1115 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1131 // Indicate an output frame has arrived. | 1140 // Indicate an output frame has arrived. |
| 1132 rtc::Event output_frame_event_; | 1141 rtc::Event output_frame_event_; |
| 1133 }; | 1142 }; |
| 1134 | 1143 |
| 1135 // Initialize send stream. | 1144 // Initialize send stream. |
| 1136 CreateSenderCall(Call::Config()); | 1145 CreateSenderCall(Call::Config()); |
| 1137 | 1146 |
| 1138 test::NullTransport transport; | 1147 test::NullTransport transport; |
| 1139 CreateSendConfig(1, &transport); | 1148 CreateSendConfig(1, &transport); |
| 1140 FrameObserver observer; | 1149 FrameObserver observer; |
| 1141 send_config_.pre_encode_callback = &observer; | 1150 video_send_config_.pre_encode_callback = &observer; |
| 1142 CreateStreams(); | 1151 CreateStreams(); |
| 1143 | 1152 |
| 1144 // Prepare five input frames. Send ordinary VideoFrame and texture frames | 1153 // Prepare five input frames. Send ordinary VideoFrame and texture frames |
| 1145 // alternatively. | 1154 // alternatively. |
| 1146 std::vector<VideoFrame> input_frames; | 1155 std::vector<VideoFrame> input_frames; |
| 1147 int width = static_cast<int>(encoder_config_.streams[0].width); | 1156 int width = static_cast<int>(video_encoder_config_.streams[0].width); |
| 1148 int height = static_cast<int>(encoder_config_.streams[0].height); | 1157 int height = static_cast<int>(video_encoder_config_.streams[0].height); |
| 1149 test::FakeNativeHandle* handle1 = new test::FakeNativeHandle(); | 1158 test::FakeNativeHandle* handle1 = new test::FakeNativeHandle(); |
| 1150 test::FakeNativeHandle* handle2 = new test::FakeNativeHandle(); | 1159 test::FakeNativeHandle* handle2 = new test::FakeNativeHandle(); |
| 1151 test::FakeNativeHandle* handle3 = new test::FakeNativeHandle(); | 1160 test::FakeNativeHandle* handle3 = new test::FakeNativeHandle(); |
| 1152 input_frames.push_back(test::CreateFakeNativeHandleFrame( | 1161 input_frames.push_back(test::CreateFakeNativeHandleFrame( |
| 1153 handle1, width, height, 1, 1, kVideoRotation_0)); | 1162 handle1, width, height, 1, 1, kVideoRotation_0)); |
| 1154 input_frames.push_back(test::CreateFakeNativeHandleFrame( | 1163 input_frames.push_back(test::CreateFakeNativeHandleFrame( |
| 1155 handle2, width, height, 2, 2, kVideoRotation_0)); | 1164 handle2, width, height, 2, 2, kVideoRotation_0)); |
| 1156 input_frames.push_back(CreateVideoFrame(width, height, 3)); | 1165 input_frames.push_back(CreateVideoFrame(width, height, 3)); |
| 1157 input_frames.push_back(CreateVideoFrame(width, height, 4)); | 1166 input_frames.push_back(CreateVideoFrame(width, height, 4)); |
| 1158 input_frames.push_back(test::CreateFakeNativeHandleFrame( | 1167 input_frames.push_back(test::CreateFakeNativeHandleFrame( |
| 1159 handle3, width, height, 5, 5, kVideoRotation_0)); | 1168 handle3, width, height, 5, 5, kVideoRotation_0)); |
| 1160 | 1169 |
| 1161 send_stream_->Start(); | 1170 video_send_stream_->Start(); |
| 1162 for (size_t i = 0; i < input_frames.size(); i++) { | 1171 for (size_t i = 0; i < input_frames.size(); i++) { |
| 1163 send_stream_->Input()->IncomingCapturedFrame(input_frames[i]); | 1172 video_send_stream_->Input()->IncomingCapturedFrame(input_frames[i]); |
| 1164 // Do not send the next frame too fast, so the frame dropper won't drop it. | 1173 // Do not send the next frame too fast, so the frame dropper won't drop it. |
| 1165 if (i < input_frames.size() - 1) | 1174 if (i < input_frames.size() - 1) |
| 1166 SleepMs(1000 / encoder_config_.streams[0].max_framerate); | 1175 SleepMs(1000 / video_encoder_config_.streams[0].max_framerate); |
| 1167 // Wait until the output frame is received before sending the next input | 1176 // Wait until the output frame is received before sending the next input |
| 1168 // frame. Or the previous input frame may be replaced without delivering. | 1177 // frame. Or the previous input frame may be replaced without delivering. |
| 1169 observer.WaitOutputFrame(); | 1178 observer.WaitOutputFrame(); |
| 1170 } | 1179 } |
| 1171 send_stream_->Stop(); | 1180 video_send_stream_->Stop(); |
| 1172 | 1181 |
| 1173 // Test if the input and output frames are the same. render_time_ms and | 1182 // Test if the input and output frames are the same. render_time_ms and |
| 1174 // timestamp are not compared because capturer sets those values. | 1183 // timestamp are not compared because capturer sets those values. |
| 1175 ExpectEqualFramesVector(input_frames, observer.output_frames()); | 1184 ExpectEqualFramesVector(input_frames, observer.output_frames()); |
| 1176 | 1185 |
| 1177 DestroyStreams(); | 1186 DestroyStreams(); |
| 1178 } | 1187 } |
| 1179 | 1188 |
| 1180 void ExpectEqualFrames(const VideoFrame& frame1, const VideoFrame& frame2) { | 1189 void ExpectEqualFrames(const VideoFrame& frame1, const VideoFrame& frame2) { |
| 1181 if (frame1.native_handle() != nullptr || frame2.native_handle() != nullptr) | 1190 if (frame1.native_handle() != nullptr || frame2.native_handle() != nullptr) |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1303 int32_t SetChannelParameters(uint32_t packetLoss, int64_t rtt) override { | 1312 int32_t SetChannelParameters(uint32_t packetLoss, int64_t rtt) override { |
| 1304 EXPECT_TRUE(IsReadyForEncode()); | 1313 EXPECT_TRUE(IsReadyForEncode()); |
| 1305 return 0; | 1314 return 0; |
| 1306 } | 1315 } |
| 1307 | 1316 |
| 1308 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { | 1317 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) override { |
| 1309 EXPECT_TRUE(IsReadyForEncode()); | 1318 EXPECT_TRUE(IsReadyForEncode()); |
| 1310 return 0; | 1319 return 0; |
| 1311 } | 1320 } |
| 1312 | 1321 |
| 1313 void OnStreamsCreated( | 1322 void OnVideoStreamsCreated( |
| 1314 VideoSendStream* send_stream, | 1323 VideoSendStream* send_stream, |
| 1315 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1324 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1316 // Encoder initialization should be done in stream construction before | 1325 // Encoder initialization should be done in stream construction before |
| 1317 // starting. | 1326 // starting. |
| 1318 EXPECT_TRUE(IsReadyForEncode()); | 1327 EXPECT_TRUE(IsReadyForEncode()); |
| 1319 stream_ = send_stream; | 1328 stream_ = send_stream; |
| 1320 } | 1329 } |
| 1321 | 1330 |
| 1322 void ModifyConfigs(VideoSendStream::Config* send_config, | 1331 void ModifyVideoConfigs( |
| 1323 std::vector<VideoReceiveStream::Config>* receive_configs, | 1332 VideoSendStream::Config* send_config, |
| 1324 VideoEncoderConfig* encoder_config) override { | 1333 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1334 VideoEncoderConfig* encoder_config) override { |
| 1325 send_config->encoder_settings.encoder = this; | 1335 send_config->encoder_settings.encoder = this; |
| 1326 encoder_config_ = *encoder_config; | 1336 encoder_config_ = *encoder_config; |
| 1327 } | 1337 } |
| 1328 | 1338 |
| 1329 void PerformTest() override { | 1339 void PerformTest() override { |
| 1330 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; | 1340 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
| 1331 EXPECT_EQ(0u, num_releases()); | 1341 EXPECT_EQ(0u, num_releases()); |
| 1332 stream_->ReconfigureVideoEncoder(encoder_config_); | 1342 stream_->ReconfigureVideoEncoder(encoder_config_); |
| 1333 EXPECT_EQ(0u, num_releases()); | 1343 EXPECT_EQ(0u, num_releases()); |
| 1334 stream_->Stop(); | 1344 stream_->Stop(); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1358 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 1368 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
| 1359 class VideoCodecConfigObserver : public test::SendTest, | 1369 class VideoCodecConfigObserver : public test::SendTest, |
| 1360 public test::FakeEncoder { | 1370 public test::FakeEncoder { |
| 1361 public: | 1371 public: |
| 1362 VideoCodecConfigObserver() | 1372 VideoCodecConfigObserver() |
| 1363 : SendTest(kDefaultTimeoutMs), | 1373 : SendTest(kDefaultTimeoutMs), |
| 1364 FakeEncoder(Clock::GetRealTimeClock()), | 1374 FakeEncoder(Clock::GetRealTimeClock()), |
| 1365 num_initializations_(0) {} | 1375 num_initializations_(0) {} |
| 1366 | 1376 |
| 1367 private: | 1377 private: |
| 1368 void ModifyConfigs(VideoSendStream::Config* send_config, | 1378 void ModifyVideoConfigs( |
| 1369 std::vector<VideoReceiveStream::Config>* receive_configs, | 1379 VideoSendStream::Config* send_config, |
| 1370 VideoEncoderConfig* encoder_config) override { | 1380 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1381 VideoEncoderConfig* encoder_config) override { |
| 1371 send_config->encoder_settings.encoder = this; | 1382 send_config->encoder_settings.encoder = this; |
| 1372 encoder_config_ = *encoder_config; | 1383 encoder_config_ = *encoder_config; |
| 1373 } | 1384 } |
| 1374 | 1385 |
| 1375 void OnStreamsCreated( | 1386 void OnVideoStreamsCreated( |
| 1376 VideoSendStream* send_stream, | 1387 VideoSendStream* send_stream, |
| 1377 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1388 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1378 stream_ = send_stream; | 1389 stream_ = send_stream; |
| 1379 } | 1390 } |
| 1380 | 1391 |
| 1381 int32_t InitEncode(const VideoCodec* config, | 1392 int32_t InitEncode(const VideoCodec* config, |
| 1382 int32_t number_of_cores, | 1393 int32_t number_of_cores, |
| 1383 size_t max_payload_size) override { | 1394 size_t max_payload_size) override { |
| 1384 if (num_initializations_ == 0) { | 1395 if (num_initializations_ == 0) { |
| 1385 // Verify default values. | 1396 // Verify default values. |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1419 const char* codec_name) | 1430 const char* codec_name) |
| 1420 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), | 1431 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), |
| 1421 FakeEncoder(Clock::GetRealTimeClock()), | 1432 FakeEncoder(Clock::GetRealTimeClock()), |
| 1422 video_codec_type_(video_codec_type), | 1433 video_codec_type_(video_codec_type), |
| 1423 codec_name_(codec_name), | 1434 codec_name_(codec_name), |
| 1424 num_initializations_(0) { | 1435 num_initializations_(0) { |
| 1425 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); | 1436 memset(&encoder_settings_, 0, sizeof(encoder_settings_)); |
| 1426 } | 1437 } |
| 1427 | 1438 |
| 1428 private: | 1439 private: |
| 1429 void ModifyConfigs(VideoSendStream::Config* send_config, | 1440 void ModifyVideoConfigs( |
| 1430 std::vector<VideoReceiveStream::Config>* receive_configs, | 1441 VideoSendStream::Config* send_config, |
| 1431 VideoEncoderConfig* encoder_config) override { | 1442 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1443 VideoEncoderConfig* encoder_config) override { |
| 1432 send_config->encoder_settings.encoder = this; | 1444 send_config->encoder_settings.encoder = this; |
| 1433 send_config->encoder_settings.payload_name = codec_name_; | 1445 send_config->encoder_settings.payload_name = codec_name_; |
| 1434 | 1446 |
| 1435 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 1447 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { |
| 1436 encoder_config->streams[i].temporal_layer_thresholds_bps.resize( | 1448 encoder_config->streams[i].temporal_layer_thresholds_bps.resize( |
| 1437 kVideoCodecConfigObserverNumberOfTemporalLayers - 1); | 1449 kVideoCodecConfigObserverNumberOfTemporalLayers - 1); |
| 1438 } | 1450 } |
| 1439 | 1451 |
| 1440 encoder_config->encoder_specific_settings = &encoder_settings_; | 1452 encoder_config->encoder_specific_settings = &encoder_settings_; |
| 1441 encoder_config_ = *encoder_config; | 1453 encoder_config_ = *encoder_config; |
| 1442 } | 1454 } |
| 1443 | 1455 |
| 1444 void OnStreamsCreated( | 1456 void OnVideoStreamsCreated( |
| 1445 VideoSendStream* send_stream, | 1457 VideoSendStream* send_stream, |
| 1446 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1458 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1447 stream_ = send_stream; | 1459 stream_ = send_stream; |
| 1448 } | 1460 } |
| 1449 | 1461 |
| 1450 int32_t InitEncode(const VideoCodec* config, | 1462 int32_t InitEncode(const VideoCodec* config, |
| 1451 int32_t number_of_cores, | 1463 int32_t number_of_cores, |
| 1452 size_t max_payload_size) override { | 1464 size_t max_payload_size) override { |
| 1453 EXPECT_EQ(video_codec_type_, config->codecType); | 1465 EXPECT_EQ(video_codec_type_, config->codecType); |
| 1454 VerifyCodecSpecifics(*config); | 1466 VerifyCodecSpecifics(*config); |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1611 private: | 1623 private: |
| 1612 int32_t InitEncode(const VideoCodec* config, | 1624 int32_t InitEncode(const VideoCodec* config, |
| 1613 int32_t number_of_cores, | 1625 int32_t number_of_cores, |
| 1614 size_t max_payload_size) override { | 1626 size_t max_payload_size) override { |
| 1615 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps), | 1627 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps), |
| 1616 config->targetBitrate); | 1628 config->targetBitrate); |
| 1617 observation_complete_.Set(); | 1629 observation_complete_.Set(); |
| 1618 return test::FakeEncoder::InitEncode( | 1630 return test::FakeEncoder::InitEncode( |
| 1619 config, number_of_cores, max_payload_size); | 1631 config, number_of_cores, max_payload_size); |
| 1620 } | 1632 } |
| 1621 void ModifyConfigs(VideoSendStream::Config* send_config, | 1633 void ModifyVideoConfigs( |
| 1622 std::vector<VideoReceiveStream::Config>* receive_configs, | 1634 VideoSendStream::Config* send_config, |
| 1623 VideoEncoderConfig* encoder_config) override { | 1635 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1636 VideoEncoderConfig* encoder_config) override { |
| 1624 send_config->encoder_settings.encoder = this; | 1637 send_config->encoder_settings.encoder = this; |
| 1625 EXPECT_EQ(1u, encoder_config->streams.size()); | 1638 EXPECT_EQ(1u, encoder_config->streams.size()); |
| 1626 EXPECT_TRUE( | 1639 EXPECT_TRUE( |
| 1627 encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); | 1640 encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); |
| 1628 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back( | 1641 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back( |
| 1629 kScreencastTargetBitrateKbps * 1000); | 1642 kScreencastTargetBitrateKbps * 1000); |
| 1630 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 1643 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; |
| 1631 } | 1644 } |
| 1632 | 1645 |
| 1633 void PerformTest() override { | 1646 void PerformTest() override { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1687 } | 1700 } |
| 1688 | 1701 |
| 1689 Call::Config GetSenderCallConfig() override { | 1702 Call::Config GetSenderCallConfig() override { |
| 1690 Call::Config config; | 1703 Call::Config config; |
| 1691 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; | 1704 config.bitrate_config.min_bitrate_bps = kMinBitrateKbps * 1000; |
| 1692 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; | 1705 config.bitrate_config.start_bitrate_bps = kStartBitrateKbps * 1000; |
| 1693 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; | 1706 config.bitrate_config.max_bitrate_bps = kMaxBitrateKbps * 1000; |
| 1694 return config; | 1707 return config; |
| 1695 } | 1708 } |
| 1696 | 1709 |
| 1697 void ModifyConfigs(VideoSendStream::Config* send_config, | 1710 void ModifyVideoConfigs( |
| 1698 std::vector<VideoReceiveStream::Config>* receive_configs, | 1711 VideoSendStream::Config* send_config, |
| 1699 VideoEncoderConfig* encoder_config) override { | 1712 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1713 VideoEncoderConfig* encoder_config) override { |
| 1700 send_config->encoder_settings.encoder = this; | 1714 send_config->encoder_settings.encoder = this; |
| 1701 // Set bitrates lower/higher than min/max to make sure they are properly | 1715 // Set bitrates lower/higher than min/max to make sure they are properly |
| 1702 // capped. | 1716 // capped. |
| 1703 encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; | 1717 encoder_config->streams.front().min_bitrate_bps = kMinBitrateKbps * 1000; |
| 1704 encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; | 1718 encoder_config->streams.front().max_bitrate_bps = kMaxBitrateKbps * 1000; |
| 1705 encoder_config_ = *encoder_config; | 1719 encoder_config_ = *encoder_config; |
| 1706 } | 1720 } |
| 1707 | 1721 |
| 1708 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 1722 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
| 1709 call_ = sender_call; | 1723 call_ = sender_call; |
| 1710 } | 1724 } |
| 1711 | 1725 |
| 1712 void OnStreamsCreated( | 1726 void OnVideoStreamsCreated( |
| 1713 VideoSendStream* send_stream, | 1727 VideoSendStream* send_stream, |
| 1714 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1728 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1715 send_stream_ = send_stream; | 1729 send_stream_ = send_stream; |
| 1716 } | 1730 } |
| 1717 | 1731 |
| 1718 void PerformTest() override { | 1732 void PerformTest() override { |
| 1719 Call::Config::BitrateConfig bitrate_config; | 1733 Call::Config::BitrateConfig bitrate_config; |
| 1720 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 1734 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
| 1721 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 1735 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
| 1722 call_->SetBitrateConfig(bitrate_config); | 1736 call_->SetBitrateConfig(bitrate_config); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1779 encoded._encodedWidth = kEncodedResolution[i].width; | 1793 encoded._encodedWidth = kEncodedResolution[i].width; |
| 1780 encoded._encodedHeight = kEncodedResolution[i].height; | 1794 encoded._encodedHeight = kEncodedResolution[i].height; |
| 1781 RTC_DCHECK(callback_ != nullptr); | 1795 RTC_DCHECK(callback_ != nullptr); |
| 1782 if (callback_->Encoded(encoded, &specifics, nullptr) != 0) | 1796 if (callback_->Encoded(encoded, &specifics, nullptr) != 0) |
| 1783 return -1; | 1797 return -1; |
| 1784 } | 1798 } |
| 1785 | 1799 |
| 1786 observation_complete_.Set(); | 1800 observation_complete_.Set(); |
| 1787 return 0; | 1801 return 0; |
| 1788 } | 1802 } |
| 1789 void ModifyConfigs(VideoSendStream::Config* send_config, | 1803 void ModifyVideoConfigs( |
| 1790 std::vector<VideoReceiveStream::Config>* receive_configs, | 1804 VideoSendStream::Config* send_config, |
| 1791 VideoEncoderConfig* encoder_config) override { | 1805 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1806 VideoEncoderConfig* encoder_config) override { |
| 1792 send_config->encoder_settings.encoder = this; | 1807 send_config->encoder_settings.encoder = this; |
| 1793 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); | 1808 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); |
| 1794 } | 1809 } |
| 1795 | 1810 |
| 1796 size_t GetNumStreams() const override { return kNumStreams; } | 1811 size_t GetNumStreams() const override { return kNumStreams; } |
| 1797 | 1812 |
| 1798 void PerformTest() override { | 1813 void PerformTest() override { |
| 1799 EXPECT_TRUE(Wait()) | 1814 EXPECT_TRUE(Wait()) |
| 1800 << "Timed out while waiting for the encoder to send one frame."; | 1815 << "Timed out while waiting for the encoder to send one frame."; |
| 1801 VideoSendStream::Stats stats = send_stream_->GetStats(); | 1816 VideoSendStream::Stats stats = send_stream_->GetStats(); |
| 1802 | 1817 |
| 1803 for (size_t i = 0; i < kNumStreams; ++i) { | 1818 for (size_t i = 0; i < kNumStreams; ++i) { |
| 1804 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) != | 1819 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) != |
| 1805 stats.substreams.end()) | 1820 stats.substreams.end()) |
| 1806 << "No stats for SSRC: " << kSendSsrcs[i] | 1821 << "No stats for SSRC: " << kSendSsrcs[i] |
| 1807 << ", stats should exist as soon as frames have been encoded."; | 1822 << ", stats should exist as soon as frames have been encoded."; |
| 1808 VideoSendStream::StreamStats ssrc_stats = | 1823 VideoSendStream::StreamStats ssrc_stats = |
| 1809 stats.substreams[kSendSsrcs[i]]; | 1824 stats.substreams[kSendSsrcs[i]]; |
| 1810 EXPECT_EQ(kEncodedResolution[i].width, ssrc_stats.width); | 1825 EXPECT_EQ(kEncodedResolution[i].width, ssrc_stats.width); |
| 1811 EXPECT_EQ(kEncodedResolution[i].height, ssrc_stats.height); | 1826 EXPECT_EQ(kEncodedResolution[i].height, ssrc_stats.height); |
| 1812 } | 1827 } |
| 1813 } | 1828 } |
| 1814 | 1829 |
| 1815 void OnStreamsCreated( | 1830 void OnVideoStreamsCreated( |
| 1816 VideoSendStream* send_stream, | 1831 VideoSendStream* send_stream, |
| 1817 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1832 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1818 send_stream_ = send_stream; | 1833 send_stream_ = send_stream; |
| 1819 } | 1834 } |
| 1820 | 1835 |
| 1821 VideoSendStream* send_stream_; | 1836 VideoSendStream* send_stream_; |
| 1822 } test; | 1837 } test; |
| 1823 | 1838 |
| 1824 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1839 RunBaseTest(&test, FakeNetworkPipe::Config()); |
| 1825 } | 1840 } |
| 1826 | 1841 |
| 1827 class Vp9HeaderObserver : public test::SendTest { | 1842 class Vp9HeaderObserver : public test::SendTest { |
| 1828 public: | 1843 public: |
| 1829 Vp9HeaderObserver() | 1844 Vp9HeaderObserver() |
| 1830 : SendTest(VideoSendStreamTest::kLongTimeoutMs), | 1845 : SendTest(VideoSendStreamTest::kLongTimeoutMs), |
| 1831 vp9_encoder_(VP9Encoder::Create()), | 1846 vp9_encoder_(VP9Encoder::Create()), |
| 1832 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()), | 1847 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()), |
| 1833 packets_sent_(0), | 1848 packets_sent_(0), |
| 1834 frames_sent_(0) {} | 1849 frames_sent_(0) {} |
| 1835 | 1850 |
| 1836 virtual void ModifyConfigsHook( | 1851 virtual void ModifyVideoConfigsHook( |
| 1837 VideoSendStream::Config* send_config, | 1852 VideoSendStream::Config* send_config, |
| 1838 std::vector<VideoReceiveStream::Config>* receive_configs, | 1853 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1839 VideoEncoderConfig* encoder_config) {} | 1854 VideoEncoderConfig* encoder_config) {} |
| 1840 | 1855 |
| 1841 virtual void InspectHeader(const RTPVideoHeaderVP9& vp9) = 0; | 1856 virtual void InspectHeader(const RTPVideoHeaderVP9& vp9) = 0; |
| 1842 | 1857 |
| 1843 private: | 1858 private: |
| 1844 const int kVp9PayloadType = 105; | 1859 const int kVp9PayloadType = 105; |
| 1845 | 1860 |
| 1846 void ModifyConfigs(VideoSendStream::Config* send_config, | 1861 void ModifyVideoConfigs( |
| 1847 std::vector<VideoReceiveStream::Config>* receive_configs, | 1862 VideoSendStream::Config* send_config, |
| 1848 VideoEncoderConfig* encoder_config) override { | 1863 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1864 VideoEncoderConfig* encoder_config) override { |
| 1849 encoder_config->encoder_specific_settings = &vp9_settings_; | 1865 encoder_config->encoder_specific_settings = &vp9_settings_; |
| 1850 send_config->encoder_settings.encoder = vp9_encoder_.get(); | 1866 send_config->encoder_settings.encoder = vp9_encoder_.get(); |
| 1851 send_config->encoder_settings.payload_name = "VP9"; | 1867 send_config->encoder_settings.payload_name = "VP9"; |
| 1852 send_config->encoder_settings.payload_type = kVp9PayloadType; | 1868 send_config->encoder_settings.payload_type = kVp9PayloadType; |
| 1853 ModifyConfigsHook(send_config, receive_configs, encoder_config); | 1869 ModifyVideoConfigsHook(send_config, receive_configs, encoder_config); |
| 1854 EXPECT_EQ(1u, encoder_config->streams.size()); | 1870 EXPECT_EQ(1u, encoder_config->streams.size()); |
| 1855 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( | 1871 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( |
| 1856 vp9_settings_.numberOfTemporalLayers - 1); | 1872 vp9_settings_.numberOfTemporalLayers - 1); |
| 1857 encoder_config_ = *encoder_config; | 1873 encoder_config_ = *encoder_config; |
| 1858 } | 1874 } |
| 1859 | 1875 |
| 1860 void PerformTest() override { | 1876 void PerformTest() override { |
| 1861 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " | 1877 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " |
| 1862 << frames_sent_; | 1878 << frames_sent_; |
| 1863 } | 1879 } |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2134 static const size_t kNumFramesToSend = 100; | 2150 static const size_t kNumFramesToSend = 100; |
| 2135 // Set to < kNumFramesToSend and coprime to length of temporal layer | 2151 // Set to < kNumFramesToSend and coprime to length of temporal layer |
| 2136 // structures to verify temporal id reset on key frame. | 2152 // structures to verify temporal id reset on key frame. |
| 2137 static const int kKeyFrameInterval = 31; | 2153 static const int kKeyFrameInterval = 31; |
| 2138 class NonFlexibleMode : public Vp9HeaderObserver { | 2154 class NonFlexibleMode : public Vp9HeaderObserver { |
| 2139 public: | 2155 public: |
| 2140 NonFlexibleMode(uint8_t num_temporal_layers, uint8_t num_spatial_layers) | 2156 NonFlexibleMode(uint8_t num_temporal_layers, uint8_t num_spatial_layers) |
| 2141 : num_temporal_layers_(num_temporal_layers), | 2157 : num_temporal_layers_(num_temporal_layers), |
| 2142 num_spatial_layers_(num_spatial_layers), | 2158 num_spatial_layers_(num_spatial_layers), |
| 2143 l_field_(num_temporal_layers > 1 || num_spatial_layers > 1) {} | 2159 l_field_(num_temporal_layers > 1 || num_spatial_layers > 1) {} |
| 2144 void ModifyConfigsHook( | 2160 void ModifyVideoConfigsHook( |
| 2145 VideoSendStream::Config* send_config, | 2161 VideoSendStream::Config* send_config, |
| 2146 std::vector<VideoReceiveStream::Config>* receive_configs, | 2162 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2147 VideoEncoderConfig* encoder_config) override { | 2163 VideoEncoderConfig* encoder_config) override { |
| 2148 vp9_settings_.flexibleMode = false; | 2164 vp9_settings_.flexibleMode = false; |
| 2149 vp9_settings_.frameDroppingOn = false; | 2165 vp9_settings_.frameDroppingOn = false; |
| 2150 vp9_settings_.keyFrameInterval = kKeyFrameInterval; | 2166 vp9_settings_.keyFrameInterval = kKeyFrameInterval; |
| 2151 vp9_settings_.numberOfTemporalLayers = num_temporal_layers_; | 2167 vp9_settings_.numberOfTemporalLayers = num_temporal_layers_; |
| 2152 vp9_settings_.numberOfSpatialLayers = num_spatial_layers_; | 2168 vp9_settings_.numberOfSpatialLayers = num_spatial_layers_; |
| 2153 } | 2169 } |
| 2154 | 2170 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2174 const uint8_t num_temporal_layers_; | 2190 const uint8_t num_temporal_layers_; |
| 2175 const uint8_t num_spatial_layers_; | 2191 const uint8_t num_spatial_layers_; |
| 2176 const bool l_field_; | 2192 const bool l_field_; |
| 2177 } test(num_temporal_layers, num_spatial_layers); | 2193 } test(num_temporal_layers, num_spatial_layers); |
| 2178 | 2194 |
| 2179 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2195 RunBaseTest(&test, FakeNetworkPipe::Config()); |
| 2180 } | 2196 } |
| 2181 | 2197 |
| 2182 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) { | 2198 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) { |
| 2183 class FlexibleMode : public Vp9HeaderObserver { | 2199 class FlexibleMode : public Vp9HeaderObserver { |
| 2184 void ModifyConfigsHook( | 2200 void ModifyVideoConfigsHook( |
| 2185 VideoSendStream::Config* send_config, | 2201 VideoSendStream::Config* send_config, |
| 2186 std::vector<VideoReceiveStream::Config>* receive_configs, | 2202 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2187 VideoEncoderConfig* encoder_config) override { | 2203 VideoEncoderConfig* encoder_config) override { |
| 2188 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 2204 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; |
| 2189 vp9_settings_.flexibleMode = true; | 2205 vp9_settings_.flexibleMode = true; |
| 2190 vp9_settings_.numberOfTemporalLayers = 1; | 2206 vp9_settings_.numberOfTemporalLayers = 1; |
| 2191 vp9_settings_.numberOfSpatialLayers = 2; | 2207 vp9_settings_.numberOfSpatialLayers = 2; |
| 2192 } | 2208 } |
| 2193 | 2209 |
| 2194 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { | 2210 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { |
| 2195 EXPECT_TRUE(vp9_header.flexible_mode); | 2211 EXPECT_TRUE(vp9_header.flexible_mode); |
| 2196 EXPECT_EQ(kNoTl0PicIdx, vp9_header.tl0_pic_idx); | 2212 EXPECT_EQ(kNoTl0PicIdx, vp9_header.tl0_pic_idx); |
| 2197 if (vp9_header.inter_pic_predicted) { | 2213 if (vp9_header.inter_pic_predicted) { |
| 2198 EXPECT_GT(vp9_header.num_ref_pics, 0u); | 2214 EXPECT_GT(vp9_header.num_ref_pics, 0u); |
| 2199 observation_complete_.Set(); | 2215 observation_complete_.Set(); |
| 2200 } | 2216 } |
| 2201 } | 2217 } |
| 2202 } test; | 2218 } test; |
| 2203 | 2219 |
| 2204 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2220 RunBaseTest(&test, FakeNetworkPipe::Config()); |
| 2205 } | 2221 } |
| 2206 | 2222 |
| 2207 } // namespace webrtc | 2223 } // namespace webrtc |
| OLD | NEW |