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 |