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 |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 #include "webrtc/base/bind.h" | 15 #include "webrtc/base/bind.h" |
16 #include "webrtc/base/checks.h" | 16 #include "webrtc/base/checks.h" |
17 #include "webrtc/base/criticalsection.h" | 17 #include "webrtc/base/criticalsection.h" |
| 18 #include "webrtc/base/event.h" |
18 #include "webrtc/base/logging.h" | 19 #include "webrtc/base/logging.h" |
19 #include "webrtc/base/platform_thread.h" | 20 #include "webrtc/base/platform_thread.h" |
20 #include "webrtc/base/scoped_ptr.h" | 21 #include "webrtc/base/scoped_ptr.h" |
21 #include "webrtc/call.h" | 22 #include "webrtc/call.h" |
22 #include "webrtc/call/transport_adapter.h" | 23 #include "webrtc/call/transport_adapter.h" |
23 #include "webrtc/frame_callback.h" | 24 #include "webrtc/frame_callback.h" |
24 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" | 25 #include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" |
25 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" | 26 #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h" |
26 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" | 27 #include "webrtc/modules/rtp_rtcp/source/rtcp_sender.h" |
27 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" | 28 #include "webrtc/modules/rtp_rtcp/source/rtcp_utility.h" |
28 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" | 29 #include "webrtc/modules/rtp_rtcp/source/rtp_format_vp9.h" |
29 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" | 30 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" |
30 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" | 31 #include "webrtc/system_wrappers/include/critical_section_wrapper.h" |
31 #include "webrtc/system_wrappers/include/event_wrapper.h" | |
32 #include "webrtc/system_wrappers/include/ref_count.h" | 32 #include "webrtc/system_wrappers/include/ref_count.h" |
33 #include "webrtc/system_wrappers/include/sleep.h" | 33 #include "webrtc/system_wrappers/include/sleep.h" |
34 #include "webrtc/test/call_test.h" | 34 #include "webrtc/test/call_test.h" |
35 #include "webrtc/test/configurable_frame_size_encoder.h" | 35 #include "webrtc/test/configurable_frame_size_encoder.h" |
36 #include "webrtc/test/fake_texture_frame.h" | 36 #include "webrtc/test/fake_texture_frame.h" |
37 #include "webrtc/test/null_transport.h" | 37 #include "webrtc/test/null_transport.h" |
38 #include "webrtc/test/testsupport/perf_test.h" | 38 #include "webrtc/test/testsupport/perf_test.h" |
39 #include "webrtc/video/send_statistics_proxy.h" | 39 #include "webrtc/video/send_statistics_proxy.h" |
40 #include "webrtc/video_frame.h" | 40 #include "webrtc/video_frame.h" |
41 #include "webrtc/video_send_stream.h" | 41 #include "webrtc/video_send_stream.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 ModifyConfigs(VideoSendStream::Config* send_config, |
115 std::vector<VideoReceiveStream::Config>* receive_configs, | 115 std::vector<VideoReceiveStream::Config>* receive_configs, |
116 VideoEncoderConfig* encoder_config) override { | 116 VideoEncoderConfig* encoder_config) override { |
117 send_config->rtp.c_name = kCName; | 117 send_config->rtp.c_name = kCName; |
118 } | 118 } |
119 | 119 |
120 void PerformTest() override { | 120 void PerformTest() override { |
121 EXPECT_EQ(kEventSignaled, Wait()) | 121 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP with CNAME."; |
122 << "Timed out while waiting for RTCP with CNAME."; | |
123 } | 122 } |
124 } test; | 123 } test; |
125 | 124 |
126 RunBaseTest(&test, FakeNetworkPipe::Config()); | 125 RunBaseTest(&test, FakeNetworkPipe::Config()); |
127 } | 126 } |
128 | 127 |
129 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { | 128 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { |
130 class AbsoluteSendTimeObserver : public test::SendTest { | 129 class AbsoluteSendTimeObserver : public test::SendTest { |
131 public: | 130 public: |
132 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) { | 131 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) { |
133 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( | 132 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
134 kRtpExtensionAbsoluteSendTime, test::kAbsSendTimeExtensionId)); | 133 kRtpExtensionAbsoluteSendTime, test::kAbsSendTimeExtensionId)); |
135 } | 134 } |
136 | 135 |
137 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 136 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
138 RTPHeader header; | 137 RTPHeader header; |
139 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 138 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
140 | 139 |
141 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); | 140 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); |
142 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); | 141 EXPECT_TRUE(header.extension.hasAbsoluteSendTime); |
143 EXPECT_EQ(header.extension.transmissionTimeOffset, 0); | 142 EXPECT_EQ(header.extension.transmissionTimeOffset, 0); |
144 EXPECT_GT(header.extension.absoluteSendTime, 0u); | 143 EXPECT_GT(header.extension.absoluteSendTime, 0u); |
145 observation_complete_->Set(); | 144 observation_complete_.Set(); |
146 | 145 |
147 return SEND_PACKET; | 146 return SEND_PACKET; |
148 } | 147 } |
149 | 148 |
150 void ModifyConfigs(VideoSendStream::Config* send_config, | 149 void ModifyConfigs(VideoSendStream::Config* send_config, |
151 std::vector<VideoReceiveStream::Config>* receive_configs, | 150 std::vector<VideoReceiveStream::Config>* receive_configs, |
152 VideoEncoderConfig* encoder_config) override { | 151 VideoEncoderConfig* encoder_config) override { |
153 send_config->rtp.extensions.clear(); | 152 send_config->rtp.extensions.clear(); |
154 send_config->rtp.extensions.push_back(RtpExtension( | 153 send_config->rtp.extensions.push_back(RtpExtension( |
155 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId)); | 154 RtpExtension::kAbsSendTime, test::kAbsSendTimeExtensionId)); |
156 } | 155 } |
157 | 156 |
158 void PerformTest() override { | 157 void PerformTest() override { |
159 EXPECT_EQ(kEventSignaled, Wait()) | 158 EXPECT_TRUE(Wait()) << "Timed out while waiting for single RTP packet."; |
160 << "Timed out while waiting for single RTP packet."; | |
161 } | 159 } |
162 } test; | 160 } test; |
163 | 161 |
164 RunBaseTest(&test, FakeNetworkPipe::Config()); | 162 RunBaseTest(&test, FakeNetworkPipe::Config()); |
165 } | 163 } |
166 | 164 |
167 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { | 165 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { |
168 static const int kEncodeDelayMs = 5; | 166 static const int kEncodeDelayMs = 5; |
169 class TransmissionTimeOffsetObserver : public test::SendTest { | 167 class TransmissionTimeOffsetObserver : public test::SendTest { |
170 public: | 168 public: |
171 TransmissionTimeOffsetObserver() | 169 TransmissionTimeOffsetObserver() |
172 : SendTest(kDefaultTimeoutMs), | 170 : SendTest(kDefaultTimeoutMs), |
173 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) { | 171 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) { |
174 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( | 172 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
175 kRtpExtensionTransmissionTimeOffset, test::kTOffsetExtensionId)); | 173 kRtpExtensionTransmissionTimeOffset, test::kTOffsetExtensionId)); |
176 } | 174 } |
177 | 175 |
178 private: | 176 private: |
179 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 177 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
180 RTPHeader header; | 178 RTPHeader header; |
181 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 179 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
182 | 180 |
183 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); | 181 EXPECT_TRUE(header.extension.hasTransmissionTimeOffset); |
184 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); | 182 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); |
185 EXPECT_GT(header.extension.transmissionTimeOffset, 0); | 183 EXPECT_GT(header.extension.transmissionTimeOffset, 0); |
186 EXPECT_EQ(header.extension.absoluteSendTime, 0u); | 184 EXPECT_EQ(header.extension.absoluteSendTime, 0u); |
187 observation_complete_->Set(); | 185 observation_complete_.Set(); |
188 | 186 |
189 return SEND_PACKET; | 187 return SEND_PACKET; |
190 } | 188 } |
191 | 189 |
192 void ModifyConfigs(VideoSendStream::Config* send_config, | 190 void ModifyConfigs(VideoSendStream::Config* send_config, |
193 std::vector<VideoReceiveStream::Config>* receive_configs, | 191 std::vector<VideoReceiveStream::Config>* receive_configs, |
194 VideoEncoderConfig* encoder_config) override { | 192 VideoEncoderConfig* encoder_config) override { |
195 send_config->encoder_settings.encoder = &encoder_; | 193 send_config->encoder_settings.encoder = &encoder_; |
196 send_config->rtp.extensions.clear(); | 194 send_config->rtp.extensions.clear(); |
197 send_config->rtp.extensions.push_back( | 195 send_config->rtp.extensions.push_back( |
198 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId)); | 196 RtpExtension(RtpExtension::kTOffset, test::kTOffsetExtensionId)); |
199 } | 197 } |
200 | 198 |
201 void PerformTest() override { | 199 void PerformTest() override { |
202 EXPECT_EQ(kEventSignaled, Wait()) | 200 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet."; |
203 << "Timed out while waiting for a single RTP packet."; | |
204 } | 201 } |
205 | 202 |
206 test::DelayedEncoder encoder_; | 203 test::DelayedEncoder encoder_; |
207 } test; | 204 } test; |
208 | 205 |
209 RunBaseTest(&test, FakeNetworkPipe::Config()); | 206 RunBaseTest(&test, FakeNetworkPipe::Config()); |
210 } | 207 } |
211 | 208 |
212 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { | 209 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { |
213 static const uint8_t kExtensionId = 13; | 210 static const uint8_t kExtensionId = 13; |
214 class TransportWideSequenceNumberObserver : public test::SendTest { | 211 class TransportWideSequenceNumberObserver : public test::SendTest { |
215 public: | 212 public: |
216 TransportWideSequenceNumberObserver() | 213 TransportWideSequenceNumberObserver() |
217 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) { | 214 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) { |
218 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( | 215 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
219 kRtpExtensionTransportSequenceNumber, kExtensionId)); | 216 kRtpExtensionTransportSequenceNumber, kExtensionId)); |
220 } | 217 } |
221 | 218 |
222 private: | 219 private: |
223 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 220 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
224 RTPHeader header; | 221 RTPHeader header; |
225 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 222 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
226 | 223 |
227 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); | 224 EXPECT_TRUE(header.extension.hasTransportSequenceNumber); |
228 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); | 225 EXPECT_FALSE(header.extension.hasTransmissionTimeOffset); |
229 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); | 226 EXPECT_FALSE(header.extension.hasAbsoluteSendTime); |
230 | 227 |
231 observation_complete_->Set(); | 228 observation_complete_.Set(); |
232 | 229 |
233 return SEND_PACKET; | 230 return SEND_PACKET; |
234 } | 231 } |
235 | 232 |
236 void ModifyConfigs(VideoSendStream::Config* send_config, | 233 void ModifyConfigs(VideoSendStream::Config* send_config, |
237 std::vector<VideoReceiveStream::Config>* receive_configs, | 234 std::vector<VideoReceiveStream::Config>* receive_configs, |
238 VideoEncoderConfig* encoder_config) override { | 235 VideoEncoderConfig* encoder_config) override { |
239 send_config->encoder_settings.encoder = &encoder_; | 236 send_config->encoder_settings.encoder = &encoder_; |
240 send_config->rtp.extensions.clear(); | 237 send_config->rtp.extensions.clear(); |
241 send_config->rtp.extensions.push_back( | 238 send_config->rtp.extensions.push_back( |
242 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); | 239 RtpExtension(RtpExtension::kTransportSequenceNumber, kExtensionId)); |
243 } | 240 } |
244 | 241 |
245 void PerformTest() override { | 242 void PerformTest() override { |
246 EXPECT_EQ(kEventSignaled, Wait()) | 243 EXPECT_TRUE(Wait()) << "Timed out while waiting for a single RTP packet."; |
247 << "Timed out while waiting for a single RTP packet."; | |
248 } | 244 } |
249 | 245 |
250 test::FakeEncoder encoder_; | 246 test::FakeEncoder encoder_; |
251 } test; | 247 } test; |
252 | 248 |
253 RunBaseTest(&test, FakeNetworkPipe::Config()); | 249 RunBaseTest(&test, FakeNetworkPipe::Config()); |
254 } | 250 } |
255 | 251 |
256 class FakeReceiveStatistics : public NullReceiveStatistics { | 252 class FakeReceiveStatistics : public NullReceiveStatistics { |
257 public: | 253 public: |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 if (encapsulated_payload_type != -1) { | 369 if (encapsulated_payload_type != -1) { |
374 if (encapsulated_payload_type == | 370 if (encapsulated_payload_type == |
375 VideoSendStreamTest::kUlpfecPayloadType) { | 371 VideoSendStreamTest::kUlpfecPayloadType) { |
376 received_fec_ = true; | 372 received_fec_ = true; |
377 } else { | 373 } else { |
378 received_media_ = true; | 374 received_media_ = true; |
379 } | 375 } |
380 } | 376 } |
381 | 377 |
382 if (received_media_ && received_fec_ && send_count_ > 100) | 378 if (received_media_ && received_fec_ && send_count_ > 100) |
383 observation_complete_->Set(); | 379 observation_complete_.Set(); |
384 | 380 |
385 prev_header_ = header; | 381 prev_header_ = header; |
386 | 382 |
387 return SEND_PACKET; | 383 return SEND_PACKET; |
388 } | 384 } |
389 | 385 |
390 void ModifyConfigs(VideoSendStream::Config* send_config, | 386 void ModifyConfigs(VideoSendStream::Config* send_config, |
391 std::vector<VideoReceiveStream::Config>* receive_configs, | 387 std::vector<VideoReceiveStream::Config>* receive_configs, |
392 VideoEncoderConfig* encoder_config) override { | 388 VideoEncoderConfig* encoder_config) override { |
393 transport_adapter_.reset( | 389 transport_adapter_.reset( |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 retransmit_ssrc_ != kSendSsrcs[0]) { | 469 retransmit_ssrc_ != kSendSsrcs[0]) { |
474 // Not kSendSsrcs[0], assume correct RTX packet. Extract sequence | 470 // Not kSendSsrcs[0], assume correct RTX packet. Extract sequence |
475 // number. | 471 // number. |
476 const uint8_t* rtx_header = packet + header.headerLength; | 472 const uint8_t* rtx_header = packet + header.headerLength; |
477 sequence_number = (rtx_header[0] << 8) + rtx_header[1]; | 473 sequence_number = (rtx_header[0] << 8) + rtx_header[1]; |
478 } | 474 } |
479 | 475 |
480 if (sequence_number == nacked_sequence_number_) { | 476 if (sequence_number == nacked_sequence_number_) { |
481 EXPECT_EQ(retransmit_ssrc_, header.ssrc); | 477 EXPECT_EQ(retransmit_ssrc_, header.ssrc); |
482 EXPECT_EQ(retransmit_payload_type_, header.payloadType); | 478 EXPECT_EQ(retransmit_payload_type_, header.payloadType); |
483 observation_complete_->Set(); | 479 observation_complete_.Set(); |
484 } | 480 } |
485 | 481 |
486 return SEND_PACKET; | 482 return SEND_PACKET; |
487 } | 483 } |
488 | 484 |
489 void ModifyConfigs(VideoSendStream::Config* send_config, | 485 void ModifyConfigs(VideoSendStream::Config* send_config, |
490 std::vector<VideoReceiveStream::Config>* receive_configs, | 486 std::vector<VideoReceiveStream::Config>* receive_configs, |
491 VideoEncoderConfig* encoder_config) override { | 487 VideoEncoderConfig* encoder_config) override { |
492 transport_adapter_.reset( | 488 transport_adapter_.reset( |
493 new internal::TransportAdapter(send_config->send_transport)); | 489 new internal::TransportAdapter(send_config->send_transport)); |
494 transport_adapter_->Enable(); | 490 transport_adapter_->Enable(); |
495 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 491 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
496 send_config->rtp.rtx.payload_type = retransmit_payload_type_; | 492 send_config->rtp.rtx.payload_type = retransmit_payload_type_; |
497 if (retransmit_ssrc_ != kSendSsrcs[0]) | 493 if (retransmit_ssrc_ != kSendSsrcs[0]) |
498 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); | 494 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); |
499 } | 495 } |
500 | 496 |
501 void PerformTest() override { | 497 void PerformTest() override { |
502 EXPECT_EQ(kEventSignaled, Wait()) | 498 EXPECT_TRUE(Wait()) << "Timed out while waiting for NACK retransmission."; |
503 << "Timed out while waiting for NACK retransmission."; | |
504 } | 499 } |
505 | 500 |
506 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; | 501 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
507 int send_count_; | 502 int send_count_; |
508 uint32_t retransmit_ssrc_; | 503 uint32_t retransmit_ssrc_; |
509 uint8_t retransmit_payload_type_; | 504 uint8_t retransmit_payload_type_; |
510 int nacked_sequence_number_; | 505 int nacked_sequence_number_; |
511 } test(retransmit_ssrc, retransmit_payload_type); | 506 } test(retransmit_ssrc, retransmit_payload_type); |
512 | 507 |
513 RunBaseTest(&test, FakeNetworkPipe::Config()); | 508 RunBaseTest(&test, FakeNetworkPipe::Config()); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 EXPECT_GE(accumulated_size_, current_size_rtp_); | 604 EXPECT_GE(accumulated_size_, current_size_rtp_); |
610 if (test_generic_packetization_) { | 605 if (test_generic_packetization_) { |
611 EXPECT_EQ(current_size_rtp_, accumulated_payload_); | 606 EXPECT_EQ(current_size_rtp_, accumulated_payload_); |
612 } | 607 } |
613 | 608 |
614 // Last packet of frame; reset counters. | 609 // Last packet of frame; reset counters. |
615 accumulated_size_ = 0; | 610 accumulated_size_ = 0; |
616 accumulated_payload_ = 0; | 611 accumulated_payload_ = 0; |
617 if (current_size_rtp_ == stop_size_) { | 612 if (current_size_rtp_ == stop_size_) { |
618 // Done! (Don't increase size again, might arrive more @ stop_size). | 613 // Done! (Don't increase size again, might arrive more @ stop_size). |
619 observation_complete_->Set(); | 614 observation_complete_.Set(); |
620 } else { | 615 } else { |
621 // Increase next expected frame size. If testing with FEC, make sure | 616 // Increase next expected frame size. If testing with FEC, make sure |
622 // a FEC packet has been received for this frame size before | 617 // a FEC packet has been received for this frame size before |
623 // proceeding, to make sure that redundancy packets don't exceed | 618 // proceeding, to make sure that redundancy packets don't exceed |
624 // size limit. | 619 // size limit. |
625 if (!use_fec_) { | 620 if (!use_fec_) { |
626 ++current_size_rtp_; | 621 ++current_size_rtp_; |
627 } else if (fec_packet_received_) { | 622 } else if (fec_packet_received_) { |
628 fec_packet_received_ = false; | 623 fec_packet_received_ = false; |
629 ++current_size_rtp_; | 624 ++current_size_rtp_; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
688 send_config->encoder_settings.encoder = &encoder_; | 683 send_config->encoder_settings.encoder = &encoder_; |
689 send_config->rtp.max_packet_size = kMaxPacketSize; | 684 send_config->rtp.max_packet_size = kMaxPacketSize; |
690 send_config->post_encode_callback = this; | 685 send_config->post_encode_callback = this; |
691 | 686 |
692 // Make sure there is at least one extension header, to make the RTP | 687 // Make sure there is at least one extension header, to make the RTP |
693 // header larger than the base length of 12 bytes. | 688 // header larger than the base length of 12 bytes. |
694 EXPECT_FALSE(send_config->rtp.extensions.empty()); | 689 EXPECT_FALSE(send_config->rtp.extensions.empty()); |
695 } | 690 } |
696 | 691 |
697 void PerformTest() override { | 692 void PerformTest() override { |
698 EXPECT_EQ(kEventSignaled, Wait()) | 693 EXPECT_TRUE(Wait()) << "Timed out while observing incoming RTP packets."; |
699 << "Timed out while observing incoming RTP packets."; | |
700 } | 694 } |
701 | 695 |
702 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; | 696 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
703 test::ConfigurableFrameSizeEncoder encoder_; | 697 test::ConfigurableFrameSizeEncoder encoder_; |
704 | 698 |
705 const size_t max_packet_size_; | 699 const size_t max_packet_size_; |
706 const size_t stop_size_; | 700 const size_t stop_size_; |
707 const bool test_generic_packetization_; | 701 const bool test_generic_packetization_; |
708 const bool use_fec_; | 702 const bool use_fec_; |
709 | 703 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
789 if (header.paddingLength == 0) { | 783 if (header.paddingLength == 0) { |
790 // Non-padding packet observed. Test is almost complete. Will just | 784 // Non-padding packet observed. Test is almost complete. Will just |
791 // have to wait for the stats to change. | 785 // have to wait for the stats to change. |
792 test_state_ = kWaitingForStats; | 786 test_state_ = kWaitingForStats; |
793 } | 787 } |
794 SendRtcpFeedback(0); // REMB is only sent if value is > 0. | 788 SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
795 } else if (test_state_ == kWaitingForStats) { | 789 } else if (test_state_ == kWaitingForStats) { |
796 VideoSendStream::Stats stats = stream_->GetStats(); | 790 VideoSendStream::Stats stats = stream_->GetStats(); |
797 if (stats.suspended == false) { | 791 if (stats.suspended == false) { |
798 // Stats flipped to false. Test is complete. | 792 // Stats flipped to false. Test is complete. |
799 observation_complete_->Set(); | 793 observation_complete_.Set(); |
800 } | 794 } |
801 SendRtcpFeedback(0); // REMB is only sent if value is > 0. | 795 SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
802 } | 796 } |
803 | 797 |
804 return SEND_PACKET; | 798 return SEND_PACKET; |
805 } | 799 } |
806 | 800 |
807 // This method implements the I420FrameCallback. | 801 // This method implements the I420FrameCallback. |
808 void FrameCallback(VideoFrame* video_frame) override { | 802 void FrameCallback(VideoFrame* video_frame) override { |
809 rtc::CritScope lock(&crit_); | 803 rtc::CritScope lock(&crit_); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 send_config->suspend_below_min_bitrate = true; | 837 send_config->suspend_below_min_bitrate = true; |
844 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; | 838 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; |
845 set_low_remb_bps(min_bitrate_bps - 10000); | 839 set_low_remb_bps(min_bitrate_bps - 10000); |
846 int threshold_window = std::max(min_bitrate_bps / 10, 10000); | 840 int threshold_window = std::max(min_bitrate_bps / 10, 10000); |
847 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, | 841 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, |
848 min_bitrate_bps + threshold_window + 5000); | 842 min_bitrate_bps + threshold_window + 5000); |
849 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); | 843 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); |
850 } | 844 } |
851 | 845 |
852 void PerformTest() override { | 846 void PerformTest() override { |
853 EXPECT_EQ(kEventSignaled, Wait()) | 847 EXPECT_TRUE(Wait()) << "Timed out during suspend-below-min-bitrate test."; |
854 << "Timed out during suspend-below-min-bitrate test."; | |
855 } | 848 } |
856 | 849 |
857 enum TestState { | 850 enum TestState { |
858 kBeforeSuspend, | 851 kBeforeSuspend, |
859 kDuringSuspend, | 852 kDuringSuspend, |
860 kWaitingForPacket, | 853 kWaitingForPacket, |
861 kWaitingForStats | 854 kWaitingForStats |
862 }; | 855 }; |
863 | 856 |
864 virtual void SendRtcpFeedback(int remb_value) | 857 virtual void SendRtcpFeedback(int remb_value) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
911 capturer_->Stop(); | 904 capturer_->Stop(); |
912 return SEND_PACKET; | 905 return SEND_PACKET; |
913 } | 906 } |
914 | 907 |
915 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | 908 Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
916 rtc::CritScope lock(&crit_); | 909 rtc::CritScope lock(&crit_); |
917 const int kVideoMutedThresholdMs = 10000; | 910 const int kVideoMutedThresholdMs = 10000; |
918 if (last_packet_time_ms_ > 0 && | 911 if (last_packet_time_ms_ > 0 && |
919 clock_->TimeInMilliseconds() - last_packet_time_ms_ > | 912 clock_->TimeInMilliseconds() - last_packet_time_ms_ > |
920 kVideoMutedThresholdMs) | 913 kVideoMutedThresholdMs) |
921 observation_complete_->Set(); | 914 observation_complete_.Set(); |
922 // Receive statistics reporting having lost 50% of the packets. | 915 // Receive statistics reporting having lost 50% of the packets. |
923 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); | 916 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); |
924 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, | 917 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, |
925 nullptr, transport_adapter_.get()); | 918 nullptr, transport_adapter_.get()); |
926 | 919 |
927 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); | 920 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
928 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); | 921 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
929 | 922 |
930 RTCPSender::FeedbackState feedback_state; | 923 RTCPSender::FeedbackState feedback_state; |
931 | 924 |
(...skipping 11 matching lines...) Expand all Loading... |
943 | 936 |
944 size_t GetNumStreams() const override { return 3; } | 937 size_t GetNumStreams() const override { return 3; } |
945 | 938 |
946 virtual void OnFrameGeneratorCapturerCreated( | 939 virtual void OnFrameGeneratorCapturerCreated( |
947 test::FrameGeneratorCapturer* frame_generator_capturer) { | 940 test::FrameGeneratorCapturer* frame_generator_capturer) { |
948 rtc::CritScope lock(&crit_); | 941 rtc::CritScope lock(&crit_); |
949 capturer_ = frame_generator_capturer; | 942 capturer_ = frame_generator_capturer; |
950 } | 943 } |
951 | 944 |
952 void PerformTest() override { | 945 void PerformTest() override { |
953 EXPECT_EQ(kEventSignaled, Wait()) | 946 EXPECT_TRUE(Wait()) |
954 << "Timed out while waiting for RTP packets to stop being sent."; | 947 << "Timed out while waiting for RTP packets to stop being sent."; |
955 } | 948 } |
956 | 949 |
957 Clock* const clock_; | 950 Clock* const clock_; |
958 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; | 951 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
959 rtc::CriticalSection crit_; | 952 rtc::CriticalSection crit_; |
960 int64_t last_packet_time_ms_ GUARDED_BY(crit_); | 953 int64_t last_packet_time_ms_ GUARDED_BY(crit_); |
961 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); | 954 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); |
962 } test; | 955 } test; |
963 | 956 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 static_cast<size_t>(total_bitrate_bps), | 996 static_cast<size_t>(total_bitrate_bps), |
1004 "bps", | 997 "bps", |
1005 false); | 998 false); |
1006 if (total_bitrate_bps > kHighBitrateBps) { | 999 if (total_bitrate_bps > kHighBitrateBps) { |
1007 rtp_rtcp_->SetREMBData(kRembBitrateBps, | 1000 rtp_rtcp_->SetREMBData(kRembBitrateBps, |
1008 std::vector<uint32_t>(1, header.ssrc)); | 1001 std::vector<uint32_t>(1, header.ssrc)); |
1009 rtp_rtcp_->Process(); | 1002 rtp_rtcp_->Process(); |
1010 bitrate_capped_ = true; | 1003 bitrate_capped_ = true; |
1011 } else if (bitrate_capped_ && | 1004 } else if (bitrate_capped_ && |
1012 total_bitrate_bps < kRembRespectedBitrateBps) { | 1005 total_bitrate_bps < kRembRespectedBitrateBps) { |
1013 observation_complete_->Set(); | 1006 observation_complete_.Set(); |
1014 } | 1007 } |
1015 } | 1008 } |
1016 // Packets don't have to be delivered since the test is the receiver. | 1009 // Packets don't have to be delivered since the test is the receiver. |
1017 return DROP_PACKET; | 1010 return DROP_PACKET; |
1018 } | 1011 } |
1019 | 1012 |
1020 void OnStreamsCreated( | 1013 void OnStreamsCreated( |
1021 VideoSendStream* send_stream, | 1014 VideoSendStream* send_stream, |
1022 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1015 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1023 stream_ = send_stream; | 1016 stream_ = send_stream; |
1024 RtpRtcp::Configuration config; | 1017 RtpRtcp::Configuration config; |
1025 config.outgoing_transport = feedback_transport_.get(); | 1018 config.outgoing_transport = feedback_transport_.get(); |
1026 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); | 1019 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); |
1027 rtp_rtcp_->SetREMBStatus(true); | 1020 rtp_rtcp_->SetREMBStatus(true); |
1028 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); | 1021 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); |
1029 } | 1022 } |
1030 | 1023 |
1031 void ModifyConfigs(VideoSendStream::Config* send_config, | 1024 void ModifyConfigs(VideoSendStream::Config* send_config, |
1032 std::vector<VideoReceiveStream::Config>* receive_configs, | 1025 std::vector<VideoReceiveStream::Config>* receive_configs, |
1033 VideoEncoderConfig* encoder_config) override { | 1026 VideoEncoderConfig* encoder_config) override { |
1034 feedback_transport_.reset( | 1027 feedback_transport_.reset( |
1035 new internal::TransportAdapter(send_config->send_transport)); | 1028 new internal::TransportAdapter(send_config->send_transport)); |
1036 feedback_transport_->Enable(); | 1029 feedback_transport_->Enable(); |
1037 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 1030 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
1038 } | 1031 } |
1039 | 1032 |
1040 void PerformTest() override { | 1033 void PerformTest() override { |
1041 EXPECT_EQ(kEventSignaled, Wait()) | 1034 EXPECT_TRUE(Wait()) |
1042 << "Timeout while waiting for low bitrate stats after REMB."; | 1035 << "Timeout while waiting for low bitrate stats after REMB."; |
1043 } | 1036 } |
1044 | 1037 |
1045 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; | 1038 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; |
1046 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_; | 1039 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_; |
1047 VideoSendStream* stream_; | 1040 VideoSendStream* stream_; |
1048 bool bitrate_capped_; | 1041 bool bitrate_capped_; |
1049 } test; | 1042 } test; |
1050 | 1043 |
1051 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1044 RunBaseTest(&test, FakeNetworkPipe::Config()); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 // reported in between. | 1100 // reported in between. |
1108 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, | 1101 EXPECT_EQ(bitrate_config.start_bitrate_bps / 1000, |
1109 encoder.GetStartBitrateKbps()); | 1102 encoder.GetStartBitrateKbps()); |
1110 | 1103 |
1111 DestroyStreams(); | 1104 DestroyStreams(); |
1112 } | 1105 } |
1113 | 1106 |
1114 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { | 1107 TEST_F(VideoSendStreamTest, CapturesTextureAndVideoFrames) { |
1115 class FrameObserver : public I420FrameCallback { | 1108 class FrameObserver : public I420FrameCallback { |
1116 public: | 1109 public: |
1117 FrameObserver() : output_frame_event_(EventWrapper::Create()) {} | 1110 FrameObserver() : output_frame_event_(false, false) {} |
1118 | 1111 |
1119 void FrameCallback(VideoFrame* video_frame) override { | 1112 void FrameCallback(VideoFrame* video_frame) override { |
1120 output_frames_.push_back(*video_frame); | 1113 output_frames_.push_back(*video_frame); |
1121 output_frame_event_->Set(); | 1114 output_frame_event_.Set(); |
1122 } | 1115 } |
1123 | 1116 |
1124 void WaitOutputFrame() { | 1117 void WaitOutputFrame() { |
1125 const uint32_t kWaitFrameTimeoutMs = 3000; | 1118 const int kWaitFrameTimeoutMs = 3000; |
1126 EXPECT_EQ(kEventSignaled, output_frame_event_->Wait(kWaitFrameTimeoutMs)) | 1119 EXPECT_TRUE(output_frame_event_.Wait(kWaitFrameTimeoutMs)) |
1127 << "Timeout while waiting for output frames."; | 1120 << "Timeout while waiting for output frames."; |
1128 } | 1121 } |
1129 | 1122 |
1130 const std::vector<VideoFrame>& output_frames() const { | 1123 const std::vector<VideoFrame>& output_frames() const { |
1131 return output_frames_; | 1124 return output_frames_; |
1132 } | 1125 } |
1133 | 1126 |
1134 private: | 1127 private: |
1135 // Delivered output frames. | 1128 // Delivered output frames. |
1136 std::vector<VideoFrame> output_frames_; | 1129 std::vector<VideoFrame> output_frames_; |
1137 | 1130 |
1138 // Indicate an output frame has arrived. | 1131 // Indicate an output frame has arrived. |
1139 rtc::scoped_ptr<EventWrapper> output_frame_event_; | 1132 rtc::Event output_frame_event_; |
1140 }; | 1133 }; |
1141 | 1134 |
1142 // Initialize send stream. | 1135 // Initialize send stream. |
1143 CreateSenderCall(Call::Config()); | 1136 CreateSenderCall(Call::Config()); |
1144 | 1137 |
1145 test::NullTransport transport; | 1138 test::NullTransport transport; |
1146 CreateSendConfig(1, &transport); | 1139 CreateSendConfig(1, &transport); |
1147 FrameObserver observer; | 1140 FrameObserver observer; |
1148 send_config_.pre_encode_callback = &observer; | 1141 send_config_.pre_encode_callback = &observer; |
1149 CreateStreams(); | 1142 CreateStreams(); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1277 initialized_ = true; | 1270 initialized_ = true; |
1278 released_ = false; | 1271 released_ = false; |
1279 return 0; | 1272 return 0; |
1280 } | 1273 } |
1281 | 1274 |
1282 int32_t Encode(const VideoFrame& inputImage, | 1275 int32_t Encode(const VideoFrame& inputImage, |
1283 const CodecSpecificInfo* codecSpecificInfo, | 1276 const CodecSpecificInfo* codecSpecificInfo, |
1284 const std::vector<FrameType>* frame_types) override { | 1277 const std::vector<FrameType>* frame_types) override { |
1285 EXPECT_TRUE(IsReadyForEncode()); | 1278 EXPECT_TRUE(IsReadyForEncode()); |
1286 | 1279 |
1287 observation_complete_->Set(); | 1280 observation_complete_.Set(); |
1288 return 0; | 1281 return 0; |
1289 } | 1282 } |
1290 | 1283 |
1291 int32_t RegisterEncodeCompleteCallback( | 1284 int32_t RegisterEncodeCompleteCallback( |
1292 EncodedImageCallback* callback) override { | 1285 EncodedImageCallback* callback) override { |
1293 rtc::CritScope lock(&crit_); | 1286 rtc::CritScope lock(&crit_); |
1294 EXPECT_TRUE(initialized_); | 1287 EXPECT_TRUE(initialized_); |
1295 callback_registered_ = true; | 1288 callback_registered_ = true; |
1296 return 0; | 1289 return 0; |
1297 } | 1290 } |
(...skipping 29 matching lines...) Expand all Loading... |
1327 } | 1320 } |
1328 | 1321 |
1329 void ModifyConfigs(VideoSendStream::Config* send_config, | 1322 void ModifyConfigs(VideoSendStream::Config* send_config, |
1330 std::vector<VideoReceiveStream::Config>* receive_configs, | 1323 std::vector<VideoReceiveStream::Config>* receive_configs, |
1331 VideoEncoderConfig* encoder_config) override { | 1324 VideoEncoderConfig* encoder_config) override { |
1332 send_config->encoder_settings.encoder = this; | 1325 send_config->encoder_settings.encoder = this; |
1333 encoder_config_ = *encoder_config; | 1326 encoder_config_ = *encoder_config; |
1334 } | 1327 } |
1335 | 1328 |
1336 void PerformTest() override { | 1329 void PerformTest() override { |
1337 EXPECT_EQ(kEventSignaled, Wait()) | 1330 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
1338 << "Timed out while waiting for Encode."; | |
1339 EXPECT_EQ(0u, num_releases()); | 1331 EXPECT_EQ(0u, num_releases()); |
1340 stream_->ReconfigureVideoEncoder(encoder_config_); | 1332 stream_->ReconfigureVideoEncoder(encoder_config_); |
1341 EXPECT_EQ(0u, num_releases()); | 1333 EXPECT_EQ(0u, num_releases()); |
1342 stream_->Stop(); | 1334 stream_->Stop(); |
1343 // Encoder should not be released before destroying the VideoSendStream. | 1335 // Encoder should not be released before destroying the VideoSendStream. |
1344 EXPECT_FALSE(IsReleased()); | 1336 EXPECT_FALSE(IsReleased()); |
1345 EXPECT_TRUE(IsReadyForEncode()); | 1337 EXPECT_TRUE(IsReadyForEncode()); |
1346 stream_->Start(); | 1338 stream_->Start(); |
1347 // Sanity check, make sure we still encode frames with this encoder. | 1339 // Sanity check, make sure we still encode frames with this encoder. |
1348 EXPECT_EQ(kEventSignaled, Wait()) | 1340 EXPECT_TRUE(Wait()) << "Timed out while waiting for Encode."; |
1349 << "Timed out while waiting for Encode."; | |
1350 } | 1341 } |
1351 | 1342 |
1352 rtc::CriticalSection crit_; | 1343 rtc::CriticalSection crit_; |
1353 VideoSendStream* stream_; | 1344 VideoSendStream* stream_; |
1354 bool initialized_ GUARDED_BY(crit_); | 1345 bool initialized_ GUARDED_BY(crit_); |
1355 bool callback_registered_ GUARDED_BY(crit_); | 1346 bool callback_registered_ GUARDED_BY(crit_); |
1356 size_t num_releases_ GUARDED_BY(crit_); | 1347 size_t num_releases_ GUARDED_BY(crit_); |
1357 bool released_ GUARDED_BY(crit_); | 1348 bool released_ GUARDED_BY(crit_); |
1358 VideoEncoderConfig encoder_config_; | 1349 VideoEncoderConfig encoder_config_; |
1359 } test_encoder; | 1350 } test_encoder; |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1580 | 1571 |
1581 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); | 1572 RTCPUtility::RTCPPacketTypes packet_type = parser.Begin(); |
1582 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | 1573 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { |
1583 if (packet_type == RTCPUtility::RTCPPacketTypes::kSr) { | 1574 if (packet_type == RTCPUtility::RTCPPacketTypes::kSr) { |
1584 // Only compare sent media bytes if SenderPacketCount matches the | 1575 // Only compare sent media bytes if SenderPacketCount matches the |
1585 // number of sent rtp packets (a new rtp packet could be sent before | 1576 // number of sent rtp packets (a new rtp packet could be sent before |
1586 // the rtcp packet). | 1577 // the rtcp packet). |
1587 if (parser.Packet().SR.SenderOctetCount > 0 && | 1578 if (parser.Packet().SR.SenderOctetCount > 0 && |
1588 parser.Packet().SR.SenderPacketCount == rtp_packets_sent_) { | 1579 parser.Packet().SR.SenderPacketCount == rtp_packets_sent_) { |
1589 EXPECT_EQ(media_bytes_sent_, parser.Packet().SR.SenderOctetCount); | 1580 EXPECT_EQ(media_bytes_sent_, parser.Packet().SR.SenderOctetCount); |
1590 observation_complete_->Set(); | 1581 observation_complete_.Set(); |
1591 } | 1582 } |
1592 } | 1583 } |
1593 packet_type = parser.Iterate(); | 1584 packet_type = parser.Iterate(); |
1594 } | 1585 } |
1595 | 1586 |
1596 return SEND_PACKET; | 1587 return SEND_PACKET; |
1597 } | 1588 } |
1598 | 1589 |
1599 void PerformTest() override { | 1590 void PerformTest() override { |
1600 EXPECT_EQ(kEventSignaled, Wait()) | 1591 EXPECT_TRUE(Wait()) << "Timed out while waiting for RTCP sender report."; |
1601 << "Timed out while waiting for RTCP sender report."; | |
1602 } | 1592 } |
1603 | 1593 |
1604 rtc::CriticalSection crit_; | 1594 rtc::CriticalSection crit_; |
1605 size_t rtp_packets_sent_ GUARDED_BY(&crit_); | 1595 size_t rtp_packets_sent_ GUARDED_BY(&crit_); |
1606 size_t media_bytes_sent_ GUARDED_BY(&crit_); | 1596 size_t media_bytes_sent_ GUARDED_BY(&crit_); |
1607 } test; | 1597 } test; |
1608 | 1598 |
1609 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1599 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1610 } | 1600 } |
1611 | 1601 |
1612 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { | 1602 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { |
1613 static const int kScreencastTargetBitrateKbps = 200; | 1603 static const int kScreencastTargetBitrateKbps = 200; |
1614 class ScreencastTargetBitrateTest : public test::SendTest, | 1604 class ScreencastTargetBitrateTest : public test::SendTest, |
1615 public test::FakeEncoder { | 1605 public test::FakeEncoder { |
1616 public: | 1606 public: |
1617 ScreencastTargetBitrateTest() | 1607 ScreencastTargetBitrateTest() |
1618 : SendTest(kDefaultTimeoutMs), | 1608 : SendTest(kDefaultTimeoutMs), |
1619 test::FakeEncoder(Clock::GetRealTimeClock()) {} | 1609 test::FakeEncoder(Clock::GetRealTimeClock()) {} |
1620 | 1610 |
1621 private: | 1611 private: |
1622 int32_t InitEncode(const VideoCodec* config, | 1612 int32_t InitEncode(const VideoCodec* config, |
1623 int32_t number_of_cores, | 1613 int32_t number_of_cores, |
1624 size_t max_payload_size) override { | 1614 size_t max_payload_size) override { |
1625 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps), | 1615 EXPECT_EQ(static_cast<unsigned int>(kScreencastTargetBitrateKbps), |
1626 config->targetBitrate); | 1616 config->targetBitrate); |
1627 observation_complete_->Set(); | 1617 observation_complete_.Set(); |
1628 return test::FakeEncoder::InitEncode( | 1618 return test::FakeEncoder::InitEncode( |
1629 config, number_of_cores, max_payload_size); | 1619 config, number_of_cores, max_payload_size); |
1630 } | 1620 } |
1631 void ModifyConfigs(VideoSendStream::Config* send_config, | 1621 void ModifyConfigs(VideoSendStream::Config* send_config, |
1632 std::vector<VideoReceiveStream::Config>* receive_configs, | 1622 std::vector<VideoReceiveStream::Config>* receive_configs, |
1633 VideoEncoderConfig* encoder_config) override { | 1623 VideoEncoderConfig* encoder_config) override { |
1634 send_config->encoder_settings.encoder = this; | 1624 send_config->encoder_settings.encoder = this; |
1635 EXPECT_EQ(1u, encoder_config->streams.size()); | 1625 EXPECT_EQ(1u, encoder_config->streams.size()); |
1636 EXPECT_TRUE( | 1626 EXPECT_TRUE( |
1637 encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); | 1627 encoder_config->streams[0].temporal_layer_thresholds_bps.empty()); |
1638 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back( | 1628 encoder_config->streams[0].temporal_layer_thresholds_bps.push_back( |
1639 kScreencastTargetBitrateKbps * 1000); | 1629 kScreencastTargetBitrateKbps * 1000); |
1640 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 1630 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; |
1641 } | 1631 } |
1642 | 1632 |
1643 void PerformTest() override { | 1633 void PerformTest() override { |
1644 EXPECT_EQ(kEventSignaled, Wait()) | 1634 EXPECT_TRUE(Wait()) |
1645 << "Timed out while waiting for the encoder to be initialized."; | 1635 << "Timed out while waiting for the encoder to be initialized."; |
1646 } | 1636 } |
1647 } test; | 1637 } test; |
1648 | 1638 |
1649 RunBaseTest(&test, FakeNetworkPipe::Config()); | 1639 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1650 } | 1640 } |
1651 | 1641 |
1652 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { | 1642 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
1653 // These are chosen to be "kind of odd" to not be accidentally checked against | 1643 // These are chosen to be "kind of odd" to not be accidentally checked against |
1654 // default values. | 1644 // default values. |
(...skipping 15 matching lines...) Expand all Loading... |
1670 int32_t InitEncode(const VideoCodec* codecSettings, | 1660 int32_t InitEncode(const VideoCodec* codecSettings, |
1671 int32_t numberOfCores, | 1661 int32_t numberOfCores, |
1672 size_t maxPayloadSize) override { | 1662 size_t maxPayloadSize) override { |
1673 if (num_initializations_ == 0) { | 1663 if (num_initializations_ == 0) { |
1674 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), | 1664 EXPECT_EQ(static_cast<unsigned int>(kMinBitrateKbps), |
1675 codecSettings->minBitrate); | 1665 codecSettings->minBitrate); |
1676 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), | 1666 EXPECT_EQ(static_cast<unsigned int>(kStartBitrateKbps), |
1677 codecSettings->startBitrate); | 1667 codecSettings->startBitrate); |
1678 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), | 1668 EXPECT_EQ(static_cast<unsigned int>(kMaxBitrateKbps), |
1679 codecSettings->maxBitrate); | 1669 codecSettings->maxBitrate); |
1680 observation_complete_->Set(); | 1670 observation_complete_.Set(); |
1681 } else if (num_initializations_ == 1) { | 1671 } else if (num_initializations_ == 1) { |
1682 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), | 1672 EXPECT_EQ(static_cast<unsigned int>(kLowerMaxBitrateKbps), |
1683 codecSettings->maxBitrate); | 1673 codecSettings->maxBitrate); |
1684 // The start bitrate should be kept (-1) and capped to the max bitrate. | 1674 // The start bitrate should be kept (-1) and capped to the max bitrate. |
1685 // Since this is not an end-to-end call no receiver should have been | 1675 // Since this is not an end-to-end call no receiver should have been |
1686 // returning a REMB that could lower this estimate. | 1676 // returning a REMB that could lower this estimate. |
1687 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); | 1677 EXPECT_EQ(codecSettings->startBitrate, codecSettings->maxBitrate); |
1688 } else if (num_initializations_ == 2) { | 1678 } else if (num_initializations_ == 2) { |
1689 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), | 1679 EXPECT_EQ(static_cast<unsigned int>(kIncreasedMaxBitrateKbps), |
1690 codecSettings->maxBitrate); | 1680 codecSettings->maxBitrate); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1723 VideoSendStream* send_stream, | 1713 VideoSendStream* send_stream, |
1724 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1714 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1725 send_stream_ = send_stream; | 1715 send_stream_ = send_stream; |
1726 } | 1716 } |
1727 | 1717 |
1728 void PerformTest() override { | 1718 void PerformTest() override { |
1729 Call::Config::BitrateConfig bitrate_config; | 1719 Call::Config::BitrateConfig bitrate_config; |
1730 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; | 1720 bitrate_config.start_bitrate_bps = kIncreasedStartBitrateKbps * 1000; |
1731 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; | 1721 bitrate_config.max_bitrate_bps = kIncreasedMaxBitrateKbps * 1000; |
1732 call_->SetBitrateConfig(bitrate_config); | 1722 call_->SetBitrateConfig(bitrate_config); |
1733 EXPECT_EQ(kEventSignaled, Wait()) | 1723 EXPECT_TRUE(Wait()) |
1734 << "Timed out while waiting encoder to be configured."; | 1724 << "Timed out while waiting encoder to be configured."; |
1735 encoder_config_.streams[0].min_bitrate_bps = 0; | 1725 encoder_config_.streams[0].min_bitrate_bps = 0; |
1736 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; | 1726 encoder_config_.streams[0].max_bitrate_bps = kLowerMaxBitrateKbps * 1000; |
1737 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 1727 send_stream_->ReconfigureVideoEncoder(encoder_config_); |
1738 EXPECT_EQ(2, num_initializations_) | 1728 EXPECT_EQ(2, num_initializations_) |
1739 << "Encoder should have been reconfigured with the new value."; | 1729 << "Encoder should have been reconfigured with the new value."; |
1740 encoder_config_.streams[0].target_bitrate_bps = | 1730 encoder_config_.streams[0].target_bitrate_bps = |
1741 encoder_config_.streams[0].min_bitrate_bps; | 1731 encoder_config_.streams[0].min_bitrate_bps; |
1742 encoder_config_.streams[0].max_bitrate_bps = | 1732 encoder_config_.streams[0].max_bitrate_bps = |
1743 kIncreasedMaxBitrateKbps * 1000; | 1733 kIncreasedMaxBitrateKbps * 1000; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1786 for (size_t i = 0; i < kNumStreams; ++i) { | 1776 for (size_t i = 0; i < kNumStreams; ++i) { |
1787 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i); | 1777 specifics.codecSpecific.generic.simulcast_idx = static_cast<uint8_t>(i); |
1788 encoded._frameType = (*frame_types)[i]; | 1778 encoded._frameType = (*frame_types)[i]; |
1789 encoded._encodedWidth = kEncodedResolution[i].width; | 1779 encoded._encodedWidth = kEncodedResolution[i].width; |
1790 encoded._encodedHeight = kEncodedResolution[i].height; | 1780 encoded._encodedHeight = kEncodedResolution[i].height; |
1791 RTC_DCHECK(callback_ != nullptr); | 1781 RTC_DCHECK(callback_ != nullptr); |
1792 if (callback_->Encoded(encoded, &specifics, nullptr) != 0) | 1782 if (callback_->Encoded(encoded, &specifics, nullptr) != 0) |
1793 return -1; | 1783 return -1; |
1794 } | 1784 } |
1795 | 1785 |
1796 observation_complete_->Set(); | 1786 observation_complete_.Set(); |
1797 return 0; | 1787 return 0; |
1798 } | 1788 } |
1799 void ModifyConfigs(VideoSendStream::Config* send_config, | 1789 void ModifyConfigs(VideoSendStream::Config* send_config, |
1800 std::vector<VideoReceiveStream::Config>* receive_configs, | 1790 std::vector<VideoReceiveStream::Config>* receive_configs, |
1801 VideoEncoderConfig* encoder_config) override { | 1791 VideoEncoderConfig* encoder_config) override { |
1802 send_config->encoder_settings.encoder = this; | 1792 send_config->encoder_settings.encoder = this; |
1803 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); | 1793 EXPECT_EQ(kNumStreams, encoder_config->streams.size()); |
1804 } | 1794 } |
1805 | 1795 |
1806 size_t GetNumStreams() const override { return kNumStreams; } | 1796 size_t GetNumStreams() const override { return kNumStreams; } |
1807 | 1797 |
1808 void PerformTest() override { | 1798 void PerformTest() override { |
1809 EXPECT_EQ(kEventSignaled, Wait()) | 1799 EXPECT_TRUE(Wait()) |
1810 << "Timed out while waiting for the encoder to send one frame."; | 1800 << "Timed out while waiting for the encoder to send one frame."; |
1811 VideoSendStream::Stats stats = send_stream_->GetStats(); | 1801 VideoSendStream::Stats stats = send_stream_->GetStats(); |
1812 | 1802 |
1813 for (size_t i = 0; i < kNumStreams; ++i) { | 1803 for (size_t i = 0; i < kNumStreams; ++i) { |
1814 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) != | 1804 ASSERT_TRUE(stats.substreams.find(kSendSsrcs[i]) != |
1815 stats.substreams.end()) | 1805 stats.substreams.end()) |
1816 << "No stats for SSRC: " << kSendSsrcs[i] | 1806 << "No stats for SSRC: " << kSendSsrcs[i] |
1817 << ", stats should exist as soon as frames have been encoded."; | 1807 << ", stats should exist as soon as frames have been encoded."; |
1818 VideoSendStream::StreamStats ssrc_stats = | 1808 VideoSendStream::StreamStats ssrc_stats = |
1819 stats.substreams[kSendSsrcs[i]]; | 1809 stats.substreams[kSendSsrcs[i]]; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1861 send_config->encoder_settings.payload_name = "VP9"; | 1851 send_config->encoder_settings.payload_name = "VP9"; |
1862 send_config->encoder_settings.payload_type = kVp9PayloadType; | 1852 send_config->encoder_settings.payload_type = kVp9PayloadType; |
1863 ModifyConfigsHook(send_config, receive_configs, encoder_config); | 1853 ModifyConfigsHook(send_config, receive_configs, encoder_config); |
1864 EXPECT_EQ(1u, encoder_config->streams.size()); | 1854 EXPECT_EQ(1u, encoder_config->streams.size()); |
1865 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( | 1855 encoder_config->streams[0].temporal_layer_thresholds_bps.resize( |
1866 vp9_settings_.numberOfTemporalLayers - 1); | 1856 vp9_settings_.numberOfTemporalLayers - 1); |
1867 encoder_config_ = *encoder_config; | 1857 encoder_config_ = *encoder_config; |
1868 } | 1858 } |
1869 | 1859 |
1870 void PerformTest() override { | 1860 void PerformTest() override { |
1871 EXPECT_EQ(kEventSignaled, Wait()) | 1861 EXPECT_TRUE(Wait()) << "Test timed out waiting for VP9 packet, num frames " |
1872 << "Test timed out waiting for VP9 packet, num frames " << frames_sent_; | 1862 << frames_sent_; |
1873 } | 1863 } |
1874 | 1864 |
1875 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 1865 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
1876 RTPHeader header; | 1866 RTPHeader header; |
1877 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 1867 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
1878 | 1868 |
1879 EXPECT_EQ(kVp9PayloadType, header.payloadType); | 1869 EXPECT_EQ(kVp9PayloadType, header.payloadType); |
1880 const uint8_t* payload = packet + header.headerLength; | 1870 const uint8_t* payload = packet + header.headerLength; |
1881 size_t payload_length = length - header.headerLength - header.paddingLength; | 1871 size_t payload_length = length - header.headerLength - header.paddingLength; |
1882 | 1872 |
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2173 | 2163 |
2174 if (IsNewPictureId(vp9)) { | 2164 if (IsNewPictureId(vp9)) { |
2175 EXPECT_EQ(0, vp9.spatial_idx); | 2165 EXPECT_EQ(0, vp9.spatial_idx); |
2176 EXPECT_EQ(num_spatial_layers_ - 1, last_vp9_.spatial_idx); | 2166 EXPECT_EQ(num_spatial_layers_ - 1, last_vp9_.spatial_idx); |
2177 } | 2167 } |
2178 | 2168 |
2179 VerifyFixedTemporalLayerStructure(vp9, | 2169 VerifyFixedTemporalLayerStructure(vp9, |
2180 l_field_ ? num_temporal_layers_ : 0); | 2170 l_field_ ? num_temporal_layers_ : 0); |
2181 | 2171 |
2182 if (frames_sent_ > kNumFramesToSend) | 2172 if (frames_sent_ > kNumFramesToSend) |
2183 observation_complete_->Set(); | 2173 observation_complete_.Set(); |
2184 } | 2174 } |
2185 const uint8_t num_temporal_layers_; | 2175 const uint8_t num_temporal_layers_; |
2186 const uint8_t num_spatial_layers_; | 2176 const uint8_t num_spatial_layers_; |
2187 const bool l_field_; | 2177 const bool l_field_; |
2188 } test(num_temporal_layers, num_spatial_layers); | 2178 } test(num_temporal_layers, num_spatial_layers); |
2189 | 2179 |
2190 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2180 RunBaseTest(&test, FakeNetworkPipe::Config()); |
2191 } | 2181 } |
2192 | 2182 |
2193 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) { | 2183 TEST_F(VideoSendStreamTest, Vp9FlexModeRefCount) { |
2194 class FlexibleMode : public Vp9HeaderObserver { | 2184 class FlexibleMode : public Vp9HeaderObserver { |
2195 void ModifyConfigsHook( | 2185 void ModifyConfigsHook( |
2196 VideoSendStream::Config* send_config, | 2186 VideoSendStream::Config* send_config, |
2197 std::vector<VideoReceiveStream::Config>* receive_configs, | 2187 std::vector<VideoReceiveStream::Config>* receive_configs, |
2198 VideoEncoderConfig* encoder_config) override { | 2188 VideoEncoderConfig* encoder_config) override { |
2199 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 2189 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; |
2200 vp9_settings_.flexibleMode = true; | 2190 vp9_settings_.flexibleMode = true; |
2201 vp9_settings_.numberOfTemporalLayers = 1; | 2191 vp9_settings_.numberOfTemporalLayers = 1; |
2202 vp9_settings_.numberOfSpatialLayers = 2; | 2192 vp9_settings_.numberOfSpatialLayers = 2; |
2203 } | 2193 } |
2204 | 2194 |
2205 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { | 2195 void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override { |
2206 EXPECT_TRUE(vp9_header.flexible_mode); | 2196 EXPECT_TRUE(vp9_header.flexible_mode); |
2207 EXPECT_EQ(kNoTl0PicIdx, vp9_header.tl0_pic_idx); | 2197 EXPECT_EQ(kNoTl0PicIdx, vp9_header.tl0_pic_idx); |
2208 if (vp9_header.inter_pic_predicted) { | 2198 if (vp9_header.inter_pic_predicted) { |
2209 EXPECT_GT(vp9_header.num_ref_pics, 0u); | 2199 EXPECT_GT(vp9_header.num_ref_pics, 0u); |
2210 observation_complete_->Set(); | 2200 observation_complete_.Set(); |
2211 } | 2201 } |
2212 } | 2202 } |
2213 } test; | 2203 } test; |
2214 | 2204 |
2215 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2205 RunBaseTest(&test, FakeNetworkPipe::Config()); |
2216 } | 2206 } |
2217 | 2207 |
2218 } // namespace webrtc | 2208 } // namespace webrtc |
OLD | NEW |