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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 VideoEncoderConfig* encoder_config) override { | 113 VideoEncoderConfig* encoder_config) override { |
114 send_config->rtp.c_name = kCName; | 114 send_config->rtp.c_name = kCName; |
115 } | 115 } |
116 | 116 |
117 void PerformTest() override { | 117 void PerformTest() override { |
118 EXPECT_EQ(kEventSignaled, Wait()) | 118 EXPECT_EQ(kEventSignaled, Wait()) |
119 << "Timed out while waiting for RTCP with CNAME."; | 119 << "Timed out while waiting for RTCP with CNAME."; |
120 } | 120 } |
121 } test; | 121 } test; |
122 | 122 |
123 RunBaseTest(&test); | 123 RunBaseTest(&test, FakeNetworkPipe::Config()); |
124 } | 124 } |
125 | 125 |
126 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { | 126 TEST_F(VideoSendStreamTest, SupportsAbsoluteSendTime) { |
127 static const uint8_t kAbsSendTimeExtensionId = 13; | 127 static const uint8_t kAbsSendTimeExtensionId = 13; |
128 class AbsoluteSendTimeObserver : public test::SendTest { | 128 class AbsoluteSendTimeObserver : public test::SendTest { |
129 public: | 129 public: |
130 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) { | 130 AbsoluteSendTimeObserver() : SendTest(kDefaultTimeoutMs) { |
131 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( | 131 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
132 kRtpExtensionAbsoluteSendTime, kAbsSendTimeExtensionId)); | 132 kRtpExtensionAbsoluteSendTime, kAbsSendTimeExtensionId)); |
133 } | 133 } |
(...skipping 18 matching lines...) Expand all Loading... |
152 send_config->rtp.extensions.push_back( | 152 send_config->rtp.extensions.push_back( |
153 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId)); | 153 RtpExtension(RtpExtension::kAbsSendTime, kAbsSendTimeExtensionId)); |
154 } | 154 } |
155 | 155 |
156 void PerformTest() override { | 156 void PerformTest() override { |
157 EXPECT_EQ(kEventSignaled, Wait()) | 157 EXPECT_EQ(kEventSignaled, Wait()) |
158 << "Timed out while waiting for single RTP packet."; | 158 << "Timed out while waiting for single RTP packet."; |
159 } | 159 } |
160 } test; | 160 } test; |
161 | 161 |
162 RunBaseTest(&test); | 162 RunBaseTest(&test, FakeNetworkPipe::Config()); |
163 } | 163 } |
164 | 164 |
165 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { | 165 TEST_F(VideoSendStreamTest, SupportsTransmissionTimeOffset) { |
166 static const uint8_t kTOffsetExtensionId = 13; | 166 static const uint8_t kTOffsetExtensionId = 13; |
167 static const int kEncodeDelayMs = 5; | 167 static const int kEncodeDelayMs = 5; |
168 class TransmissionTimeOffsetObserver : public test::SendTest { | 168 class TransmissionTimeOffsetObserver : public test::SendTest { |
169 public: | 169 public: |
170 TransmissionTimeOffsetObserver() | 170 TransmissionTimeOffsetObserver() |
171 : SendTest(kDefaultTimeoutMs), | 171 : SendTest(kDefaultTimeoutMs), |
172 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) { | 172 encoder_(Clock::GetRealTimeClock(), kEncodeDelayMs) { |
(...skipping 24 matching lines...) Expand all Loading... |
197 } | 197 } |
198 | 198 |
199 void PerformTest() override { | 199 void PerformTest() override { |
200 EXPECT_EQ(kEventSignaled, Wait()) | 200 EXPECT_EQ(kEventSignaled, Wait()) |
201 << "Timed out while waiting for a single RTP packet."; | 201 << "Timed out while waiting for a single RTP packet."; |
202 } | 202 } |
203 | 203 |
204 test::DelayedEncoder encoder_; | 204 test::DelayedEncoder encoder_; |
205 } test; | 205 } test; |
206 | 206 |
207 RunBaseTest(&test); | 207 RunBaseTest(&test, FakeNetworkPipe::Config()); |
208 } | 208 } |
209 | 209 |
210 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { | 210 TEST_F(VideoSendStreamTest, SupportsTransportWideSequenceNumbers) { |
211 static const uint8_t kExtensionId = 13; | 211 static const uint8_t kExtensionId = 13; |
212 class TransportWideSequenceNumberObserver : public test::SendTest { | 212 class TransportWideSequenceNumberObserver : public test::SendTest { |
213 public: | 213 public: |
214 TransportWideSequenceNumberObserver() | 214 TransportWideSequenceNumberObserver() |
215 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) { | 215 : SendTest(kDefaultTimeoutMs), encoder_(Clock::GetRealTimeClock()) { |
216 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( | 216 EXPECT_TRUE(parser_->RegisterRtpHeaderExtension( |
217 kRtpExtensionTransportSequenceNumber, kExtensionId)); | 217 kRtpExtensionTransportSequenceNumber, kExtensionId)); |
(...skipping 22 matching lines...) Expand all Loading... |
240 } | 240 } |
241 | 241 |
242 void PerformTest() override { | 242 void PerformTest() override { |
243 EXPECT_EQ(kEventSignaled, Wait()) | 243 EXPECT_EQ(kEventSignaled, Wait()) |
244 << "Timed out while waiting for a single RTP packet."; | 244 << "Timed out while waiting for a single RTP packet."; |
245 } | 245 } |
246 | 246 |
247 test::FakeEncoder encoder_; | 247 test::FakeEncoder encoder_; |
248 } test; | 248 } test; |
249 | 249 |
250 RunBaseTest(&test); | 250 RunBaseTest(&test, FakeNetworkPipe::Config()); |
251 } | 251 } |
252 | 252 |
253 class FakeReceiveStatistics : public NullReceiveStatistics { | 253 class FakeReceiveStatistics : public NullReceiveStatistics { |
254 public: | 254 public: |
255 FakeReceiveStatistics(uint32_t send_ssrc, | 255 FakeReceiveStatistics(uint32_t send_ssrc, |
256 uint32_t last_sequence_number, | 256 uint32_t last_sequence_number, |
257 uint32_t cumulative_lost, | 257 uint32_t cumulative_lost, |
258 uint8_t fraction_lost) | 258 uint8_t fraction_lost) |
259 : lossy_stats_(new LossyStatistician(last_sequence_number, | 259 : lossy_stats_(new LossyStatistician(last_sequence_number, |
260 cumulative_lost, | 260 cumulative_lost, |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 | 304 |
305 rtc::scoped_ptr<LossyStatistician> lossy_stats_; | 305 rtc::scoped_ptr<LossyStatistician> lossy_stats_; |
306 StatisticianMap stats_map_; | 306 StatisticianMap stats_map_; |
307 }; | 307 }; |
308 | 308 |
309 TEST_F(VideoSendStreamTest, SupportsFec) { | 309 TEST_F(VideoSendStreamTest, SupportsFec) { |
310 class FecObserver : public test::SendTest { | 310 class FecObserver : public test::SendTest { |
311 public: | 311 public: |
312 FecObserver() | 312 FecObserver() |
313 : SendTest(kDefaultTimeoutMs), | 313 : SendTest(kDefaultTimeoutMs), |
314 transport_adapter_(SendTransport()), | |
315 send_count_(0), | 314 send_count_(0), |
316 received_media_(false), | 315 received_media_(false), |
317 received_fec_(false) { | 316 received_fec_(false) { |
318 transport_adapter_.Enable(); | |
319 } | 317 } |
320 | 318 |
321 private: | 319 private: |
322 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 320 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
323 RTPHeader header; | 321 RTPHeader header; |
324 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 322 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
325 | 323 |
326 // Send lossy receive reports to trigger FEC enabling. | 324 // Send lossy receive reports to trigger FEC enabling. |
327 if (send_count_++ % 2 != 0) { | 325 if (send_count_++ % 2 != 0) { |
328 // Receive statistics reporting having lost 50% of the packets. | 326 // Receive statistics reporting having lost 50% of the packets. |
329 FakeReceiveStatistics lossy_receive_stats( | 327 FakeReceiveStatistics lossy_receive_stats( |
330 kSendSsrcs[0], header.sequenceNumber, send_count_ / 2, 127); | 328 kSendSsrcs[0], header.sequenceNumber, send_count_ / 2, 127); |
331 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), | 329 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), |
332 &lossy_receive_stats, nullptr, | 330 &lossy_receive_stats, nullptr, |
333 &transport_adapter_); | 331 transport_adapter_.get()); |
334 | 332 |
335 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); | 333 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
336 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); | 334 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
337 | 335 |
338 RTCPSender::FeedbackState feedback_state; | 336 RTCPSender::FeedbackState feedback_state; |
339 | 337 |
340 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); | 338 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); |
341 } | 339 } |
342 | 340 |
343 int encapsulated_payload_type = -1; | 341 int encapsulated_payload_type = -1; |
(...skipping 16 matching lines...) Expand all Loading... |
360 | 358 |
361 if (received_media_ && received_fec_) | 359 if (received_media_ && received_fec_) |
362 observation_complete_->Set(); | 360 observation_complete_->Set(); |
363 | 361 |
364 return SEND_PACKET; | 362 return SEND_PACKET; |
365 } | 363 } |
366 | 364 |
367 void ModifyConfigs(VideoSendStream::Config* send_config, | 365 void ModifyConfigs(VideoSendStream::Config* send_config, |
368 std::vector<VideoReceiveStream::Config>* receive_configs, | 366 std::vector<VideoReceiveStream::Config>* receive_configs, |
369 VideoEncoderConfig* encoder_config) override { | 367 VideoEncoderConfig* encoder_config) override { |
| 368 transport_adapter_.reset( |
| 369 new internal::TransportAdapter(send_config->send_transport)); |
| 370 transport_adapter_->Enable(); |
370 send_config->rtp.fec.red_payload_type = kRedPayloadType; | 371 send_config->rtp.fec.red_payload_type = kRedPayloadType; |
371 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 372 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
372 } | 373 } |
373 | 374 |
374 void PerformTest() override { | 375 void PerformTest() override { |
375 EXPECT_TRUE(Wait()) << "Timed out waiting for FEC and media packets."; | 376 EXPECT_TRUE(Wait()) << "Timed out waiting for FEC and media packets."; |
376 } | 377 } |
377 | 378 |
378 internal::TransportAdapter transport_adapter_; | 379 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
379 int send_count_; | 380 int send_count_; |
380 bool received_media_; | 381 bool received_media_; |
381 bool received_fec_; | 382 bool received_fec_; |
382 } test; | 383 } test; |
383 | 384 |
384 RunBaseTest(&test); | 385 RunBaseTest(&test, FakeNetworkPipe::Config()); |
385 } | 386 } |
386 | 387 |
387 void VideoSendStreamTest::TestNackRetransmission( | 388 void VideoSendStreamTest::TestNackRetransmission( |
388 uint32_t retransmit_ssrc, | 389 uint32_t retransmit_ssrc, |
389 uint8_t retransmit_payload_type) { | 390 uint8_t retransmit_payload_type) { |
390 class NackObserver : public test::SendTest { | 391 class NackObserver : public test::SendTest { |
391 public: | 392 public: |
392 explicit NackObserver(uint32_t retransmit_ssrc, | 393 explicit NackObserver(uint32_t retransmit_ssrc, |
393 uint8_t retransmit_payload_type) | 394 uint8_t retransmit_payload_type) |
394 : SendTest(kDefaultTimeoutMs), | 395 : SendTest(kDefaultTimeoutMs), |
395 transport_adapter_(SendTransport()), | |
396 send_count_(0), | 396 send_count_(0), |
397 retransmit_ssrc_(retransmit_ssrc), | 397 retransmit_ssrc_(retransmit_ssrc), |
398 retransmit_payload_type_(retransmit_payload_type), | 398 retransmit_payload_type_(retransmit_payload_type), |
399 nacked_sequence_number_(-1) { | 399 nacked_sequence_number_(-1) { |
400 transport_adapter_.Enable(); | |
401 } | 400 } |
402 | 401 |
403 private: | 402 private: |
404 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 403 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
405 RTPHeader header; | 404 RTPHeader header; |
406 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 405 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
407 | 406 |
408 // Nack second packet after receiving the third one. | 407 // Nack second packet after receiving the third one. |
409 if (++send_count_ == 3) { | 408 if (++send_count_ == 3) { |
410 uint16_t nack_sequence_number = header.sequenceNumber - 1; | 409 uint16_t nack_sequence_number = header.sequenceNumber - 1; |
411 nacked_sequence_number_ = nack_sequence_number; | 410 nacked_sequence_number_ = nack_sequence_number; |
412 NullReceiveStatistics null_stats; | 411 NullReceiveStatistics null_stats; |
413 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &null_stats, | 412 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &null_stats, |
414 nullptr, &transport_adapter_); | 413 nullptr, transport_adapter_.get()); |
415 | 414 |
416 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); | 415 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
417 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); | 416 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
418 | 417 |
419 RTCPSender::FeedbackState feedback_state; | 418 RTCPSender::FeedbackState feedback_state; |
420 | 419 |
421 EXPECT_EQ(0, | 420 EXPECT_EQ(0, |
422 rtcp_sender.SendRTCP( | 421 rtcp_sender.SendRTCP( |
423 feedback_state, kRtcpNack, 1, &nack_sequence_number)); | 422 feedback_state, kRtcpNack, 1, &nack_sequence_number)); |
424 } | 423 } |
(...skipping 13 matching lines...) Expand all Loading... |
438 EXPECT_EQ(retransmit_payload_type_, header.payloadType); | 437 EXPECT_EQ(retransmit_payload_type_, header.payloadType); |
439 observation_complete_->Set(); | 438 observation_complete_->Set(); |
440 } | 439 } |
441 | 440 |
442 return SEND_PACKET; | 441 return SEND_PACKET; |
443 } | 442 } |
444 | 443 |
445 void ModifyConfigs(VideoSendStream::Config* send_config, | 444 void ModifyConfigs(VideoSendStream::Config* send_config, |
446 std::vector<VideoReceiveStream::Config>* receive_configs, | 445 std::vector<VideoReceiveStream::Config>* receive_configs, |
447 VideoEncoderConfig* encoder_config) override { | 446 VideoEncoderConfig* encoder_config) override { |
| 447 transport_adapter_.reset( |
| 448 new internal::TransportAdapter(send_config->send_transport)); |
| 449 transport_adapter_->Enable(); |
448 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 450 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
449 send_config->rtp.rtx.payload_type = retransmit_payload_type_; | 451 send_config->rtp.rtx.payload_type = retransmit_payload_type_; |
450 if (retransmit_ssrc_ != kSendSsrcs[0]) | 452 if (retransmit_ssrc_ != kSendSsrcs[0]) |
451 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); | 453 send_config->rtp.rtx.ssrcs.push_back(retransmit_ssrc_); |
452 } | 454 } |
453 | 455 |
454 void PerformTest() override { | 456 void PerformTest() override { |
455 EXPECT_EQ(kEventSignaled, Wait()) | 457 EXPECT_EQ(kEventSignaled, Wait()) |
456 << "Timed out while waiting for NACK retransmission."; | 458 << "Timed out while waiting for NACK retransmission."; |
457 } | 459 } |
458 | 460 |
459 internal::TransportAdapter transport_adapter_; | 461 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
460 int send_count_; | 462 int send_count_; |
461 uint32_t retransmit_ssrc_; | 463 uint32_t retransmit_ssrc_; |
462 uint8_t retransmit_payload_type_; | 464 uint8_t retransmit_payload_type_; |
463 int nacked_sequence_number_; | 465 int nacked_sequence_number_; |
464 } test(retransmit_ssrc, retransmit_payload_type); | 466 } test(retransmit_ssrc, retransmit_payload_type); |
465 | 467 |
466 RunBaseTest(&test); | 468 RunBaseTest(&test, FakeNetworkPipe::Config()); |
467 } | 469 } |
468 | 470 |
469 TEST_F(VideoSendStreamTest, RetransmitsNack) { | 471 TEST_F(VideoSendStreamTest, RetransmitsNack) { |
470 // Normal NACKs should use the send SSRC. | 472 // Normal NACKs should use the send SSRC. |
471 TestNackRetransmission(kSendSsrcs[0], kFakeSendPayloadType); | 473 TestNackRetransmission(kSendSsrcs[0], kFakeSendPayloadType); |
472 } | 474 } |
473 | 475 |
474 TEST_F(VideoSendStreamTest, RetransmitsNackOverRtx) { | 476 TEST_F(VideoSendStreamTest, RetransmitsNackOverRtx) { |
475 // NACKs over RTX should use a separate SSRC. | 477 // NACKs over RTX should use a separate SSRC. |
476 TestNackRetransmission(kSendRtxSsrcs[0], kSendRtxPayloadType); | 478 TestNackRetransmission(kSendRtxSsrcs[0], kSendRtxPayloadType); |
(...skipping 12 matching lines...) Expand all Loading... |
489 // arrive for each frame size, from start_size to stop_size. | 491 // arrive for each frame size, from start_size to stop_size. |
490 class FrameFragmentationTest : public test::SendTest, | 492 class FrameFragmentationTest : public test::SendTest, |
491 public EncodedFrameObserver { | 493 public EncodedFrameObserver { |
492 public: | 494 public: |
493 FrameFragmentationTest(size_t max_packet_size, | 495 FrameFragmentationTest(size_t max_packet_size, |
494 size_t start_size, | 496 size_t start_size, |
495 size_t stop_size, | 497 size_t stop_size, |
496 bool test_generic_packetization, | 498 bool test_generic_packetization, |
497 bool use_fec) | 499 bool use_fec) |
498 : SendTest(kLongTimeoutMs), | 500 : SendTest(kLongTimeoutMs), |
499 transport_adapter_(SendTransport()), | |
500 encoder_(stop), | 501 encoder_(stop), |
501 max_packet_size_(max_packet_size), | 502 max_packet_size_(max_packet_size), |
502 stop_size_(stop_size), | 503 stop_size_(stop_size), |
503 test_generic_packetization_(test_generic_packetization), | 504 test_generic_packetization_(test_generic_packetization), |
504 use_fec_(use_fec), | 505 use_fec_(use_fec), |
505 packet_count_(0), | 506 packet_count_(0), |
506 accumulated_size_(0), | 507 accumulated_size_(0), |
507 accumulated_payload_(0), | 508 accumulated_payload_(0), |
508 fec_packet_received_(false), | 509 fec_packet_received_(false), |
509 current_size_rtp_(start_size), | 510 current_size_rtp_(start_size), |
510 current_size_frame_(static_cast<int32_t>(start_size)) { | 511 current_size_frame_(static_cast<int32_t>(start_size)) { |
511 // Fragmentation required, this test doesn't make sense without it. | 512 // Fragmentation required, this test doesn't make sense without it. |
512 encoder_.SetFrameSize(start_size); | 513 encoder_.SetFrameSize(start_size); |
513 RTC_DCHECK_GT(stop_size, max_packet_size); | 514 RTC_DCHECK_GT(stop_size, max_packet_size); |
514 transport_adapter_.Enable(); | |
515 } | 515 } |
516 | 516 |
517 private: | 517 private: |
518 Action OnSendRtp(const uint8_t* packet, size_t size) override { | 518 Action OnSendRtp(const uint8_t* packet, size_t size) override { |
519 size_t length = size; | 519 size_t length = size; |
520 RTPHeader header; | 520 RTPHeader header; |
521 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 521 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
522 | 522 |
523 EXPECT_LE(length, max_packet_size_); | 523 EXPECT_LE(length, max_packet_size_); |
524 | 524 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 } | 591 } |
592 | 592 |
593 void TriggerLossReport(const RTPHeader& header) { | 593 void TriggerLossReport(const RTPHeader& header) { |
594 // Send lossy receive reports to trigger FEC enabling. | 594 // Send lossy receive reports to trigger FEC enabling. |
595 if (packet_count_++ % 2 != 0) { | 595 if (packet_count_++ % 2 != 0) { |
596 // Receive statistics reporting having lost 50% of the packets. | 596 // Receive statistics reporting having lost 50% of the packets. |
597 FakeReceiveStatistics lossy_receive_stats( | 597 FakeReceiveStatistics lossy_receive_stats( |
598 kSendSsrcs[0], header.sequenceNumber, packet_count_ / 2, 127); | 598 kSendSsrcs[0], header.sequenceNumber, packet_count_ / 2, 127); |
599 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), | 599 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), |
600 &lossy_receive_stats, nullptr, | 600 &lossy_receive_stats, nullptr, |
601 &transport_adapter_); | 601 transport_adapter_.get()); |
602 | 602 |
603 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); | 603 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
604 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); | 604 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
605 | 605 |
606 RTCPSender::FeedbackState feedback_state; | 606 RTCPSender::FeedbackState feedback_state; |
607 | 607 |
608 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); | 608 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); |
609 } | 609 } |
610 } | 610 } |
611 | 611 |
(...skipping 10 matching lines...) Expand all Loading... |
622 Call::Config GetSenderCallConfig() override { | 622 Call::Config GetSenderCallConfig() override { |
623 Call::Config config; | 623 Call::Config config; |
624 const int kMinBitrateBps = 30000; | 624 const int kMinBitrateBps = 30000; |
625 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; | 625 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; |
626 return config; | 626 return config; |
627 } | 627 } |
628 | 628 |
629 void ModifyConfigs(VideoSendStream::Config* send_config, | 629 void ModifyConfigs(VideoSendStream::Config* send_config, |
630 std::vector<VideoReceiveStream::Config>* receive_configs, | 630 std::vector<VideoReceiveStream::Config>* receive_configs, |
631 VideoEncoderConfig* encoder_config) override { | 631 VideoEncoderConfig* encoder_config) override { |
| 632 transport_adapter_.reset( |
| 633 new internal::TransportAdapter(send_config->send_transport)); |
| 634 transport_adapter_->Enable(); |
632 if (use_fec_) { | 635 if (use_fec_) { |
633 send_config->rtp.fec.red_payload_type = kRedPayloadType; | 636 send_config->rtp.fec.red_payload_type = kRedPayloadType; |
634 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 637 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
635 } | 638 } |
636 | 639 |
637 if (!test_generic_packetization_) | 640 if (!test_generic_packetization_) |
638 send_config->encoder_settings.payload_name = "VP8"; | 641 send_config->encoder_settings.payload_name = "VP8"; |
639 | 642 |
640 send_config->encoder_settings.encoder = &encoder_; | 643 send_config->encoder_settings.encoder = &encoder_; |
641 send_config->rtp.max_packet_size = kMaxPacketSize; | 644 send_config->rtp.max_packet_size = kMaxPacketSize; |
642 send_config->post_encode_callback = this; | 645 send_config->post_encode_callback = this; |
643 | 646 |
644 // Make sure there is at least one extension header, to make the RTP | 647 // Make sure there is at least one extension header, to make the RTP |
645 // header larger than the base length of 12 bytes. | 648 // header larger than the base length of 12 bytes. |
646 EXPECT_FALSE(send_config->rtp.extensions.empty()); | 649 EXPECT_FALSE(send_config->rtp.extensions.empty()); |
647 } | 650 } |
648 | 651 |
649 void PerformTest() override { | 652 void PerformTest() override { |
650 EXPECT_EQ(kEventSignaled, Wait()) | 653 EXPECT_EQ(kEventSignaled, Wait()) |
651 << "Timed out while observing incoming RTP packets."; | 654 << "Timed out while observing incoming RTP packets."; |
652 } | 655 } |
653 | 656 |
654 internal::TransportAdapter transport_adapter_; | 657 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
655 test::ConfigurableFrameSizeEncoder encoder_; | 658 test::ConfigurableFrameSizeEncoder encoder_; |
656 | 659 |
657 const size_t max_packet_size_; | 660 const size_t max_packet_size_; |
658 const size_t stop_size_; | 661 const size_t stop_size_; |
659 const bool test_generic_packetization_; | 662 const bool test_generic_packetization_; |
660 const bool use_fec_; | 663 const bool use_fec_; |
661 | 664 |
662 uint32_t packet_count_; | 665 uint32_t packet_count_; |
663 size_t accumulated_size_; | 666 size_t accumulated_size_; |
664 size_t accumulated_payload_; | 667 size_t accumulated_payload_; |
665 bool fec_packet_received_; | 668 bool fec_packet_received_; |
666 | 669 |
667 size_t current_size_rtp_; | 670 size_t current_size_rtp_; |
668 Atomic32 current_size_frame_; | 671 Atomic32 current_size_frame_; |
669 }; | 672 }; |
670 | 673 |
671 // Don't auto increment if FEC is used; continue sending frame size until | 674 // Don't auto increment if FEC is used; continue sending frame size until |
672 // a FEC packet has been received. | 675 // a FEC packet has been received. |
673 FrameFragmentationTest test( | 676 FrameFragmentationTest test( |
674 kMaxPacketSize, start, stop, format == kGeneric, with_fec); | 677 kMaxPacketSize, start, stop, format == kGeneric, with_fec); |
675 | 678 |
676 RunBaseTest(&test); | 679 RunBaseTest(&test, FakeNetworkPipe::Config()); |
677 } | 680 } |
678 | 681 |
679 // TODO(sprang): Is there any way of speeding up these tests? | 682 // TODO(sprang): Is there any way of speeding up these tests? |
680 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSize) { | 683 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSize) { |
681 TestPacketFragmentationSize(kGeneric, false); | 684 TestPacketFragmentationSize(kGeneric, false); |
682 } | 685 } |
683 | 686 |
684 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSizeWithFec) { | 687 TEST_F(VideoSendStreamTest, FragmentsGenericAccordingToMaxPacketSizeWithFec) { |
685 TestPacketFragmentationSize(kGeneric, true); | 688 TestPacketFragmentationSize(kGeneric, true); |
686 } | 689 } |
(...skipping 15 matching lines...) Expand all Loading... |
702 // 4. Signal a high REMB and then wait for the RTP stream to start again. | 705 // 4. Signal a high REMB and then wait for the RTP stream to start again. |
703 // When the stream is detected again, and the stats show that the stream | 706 // When the stream is detected again, and the stats show that the stream |
704 // is no longer suspended, the test ends. | 707 // is no longer suspended, the test ends. |
705 TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { | 708 TEST_F(VideoSendStreamTest, SuspendBelowMinBitrate) { |
706 static const int kSuspendTimeFrames = 60; // Suspend for 2 seconds @ 30 fps. | 709 static const int kSuspendTimeFrames = 60; // Suspend for 2 seconds @ 30 fps. |
707 | 710 |
708 class RembObserver : public test::SendTest, public I420FrameCallback { | 711 class RembObserver : public test::SendTest, public I420FrameCallback { |
709 public: | 712 public: |
710 RembObserver() | 713 RembObserver() |
711 : SendTest(kDefaultTimeoutMs), | 714 : SendTest(kDefaultTimeoutMs), |
712 transport_adapter_(&transport_), | |
713 clock_(Clock::GetRealTimeClock()), | 715 clock_(Clock::GetRealTimeClock()), |
714 test_state_(kBeforeSuspend), | 716 test_state_(kBeforeSuspend), |
715 rtp_count_(0), | 717 rtp_count_(0), |
716 last_sequence_number_(0), | 718 last_sequence_number_(0), |
717 suspended_frame_count_(0), | 719 suspended_frame_count_(0), |
718 low_remb_bps_(0), | 720 low_remb_bps_(0), |
719 high_remb_bps_(0) { | 721 high_remb_bps_(0) { |
720 transport_adapter_.Enable(); | |
721 } | 722 } |
722 | 723 |
723 private: | 724 private: |
724 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | |
725 // Receive statistics reporting having lost 0% of the packets. | |
726 // This is needed for the send-side bitrate controller to work properly. | |
727 rtc::CritScope lock(&crit_); | |
728 SendRtcpFeedback(0); // REMB is only sent if value is > 0. | |
729 return SEND_PACKET; | |
730 } | |
731 | |
732 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 725 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
733 rtc::CritScope lock(&crit_); | 726 rtc::CritScope lock(&crit_); |
734 ++rtp_count_; | 727 ++rtp_count_; |
735 RTPHeader header; | 728 RTPHeader header; |
736 EXPECT_TRUE(parser_->Parse(packet, length, &header)); | 729 EXPECT_TRUE(parser_->Parse(packet, length, &header)); |
737 last_sequence_number_ = header.sequenceNumber; | 730 last_sequence_number_ = header.sequenceNumber; |
738 | 731 |
739 if (test_state_ == kBeforeSuspend) { | 732 if (test_state_ == kBeforeSuspend) { |
740 // The stream has started. Try to suspend it. | 733 // The stream has started. Try to suspend it. |
741 SendRtcpFeedback(low_remb_bps_); | 734 SendRtcpFeedback(low_remb_bps_); |
742 test_state_ = kDuringSuspend; | 735 test_state_ = kDuringSuspend; |
743 } else if (test_state_ == kDuringSuspend) { | 736 } else if (test_state_ == kDuringSuspend) { |
744 if (header.paddingLength == 0) { | 737 if (header.paddingLength == 0) { |
745 // Received non-padding packet during suspension period. Reset the | 738 // Received non-padding packet during suspension period. Reset the |
746 // counter. | 739 // counter. |
747 suspended_frame_count_ = 0; | 740 suspended_frame_count_ = 0; |
748 } | 741 } |
| 742 SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
749 } else if (test_state_ == kWaitingForPacket) { | 743 } else if (test_state_ == kWaitingForPacket) { |
750 if (header.paddingLength == 0) { | 744 if (header.paddingLength == 0) { |
751 // Non-padding packet observed. Test is almost complete. Will just | 745 // Non-padding packet observed. Test is almost complete. Will just |
752 // have to wait for the stats to change. | 746 // have to wait for the stats to change. |
753 test_state_ = kWaitingForStats; | 747 test_state_ = kWaitingForStats; |
754 } | 748 } |
| 749 SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
755 } else if (test_state_ == kWaitingForStats) { | 750 } else if (test_state_ == kWaitingForStats) { |
756 VideoSendStream::Stats stats = stream_->GetStats(); | 751 VideoSendStream::Stats stats = stream_->GetStats(); |
757 if (stats.suspended == false) { | 752 if (stats.suspended == false) { |
758 // Stats flipped to false. Test is complete. | 753 // Stats flipped to false. Test is complete. |
759 observation_complete_->Set(); | 754 observation_complete_->Set(); |
760 } | 755 } |
| 756 SendRtcpFeedback(0); // REMB is only sent if value is > 0. |
761 } | 757 } |
762 | 758 |
763 return SEND_PACKET; | 759 return SEND_PACKET; |
764 } | 760 } |
765 | 761 |
766 // This method implements the I420FrameCallback. | 762 // This method implements the I420FrameCallback. |
767 void FrameCallback(VideoFrame* video_frame) override { | 763 void FrameCallback(VideoFrame* video_frame) override { |
768 rtc::CritScope lock(&crit_); | 764 rtc::CritScope lock(&crit_); |
769 if (test_state_ == kDuringSuspend && | 765 if (test_state_ == kDuringSuspend && |
770 ++suspended_frame_count_ > kSuspendTimeFrames) { | 766 ++suspended_frame_count_ > kSuspendTimeFrames) { |
771 VideoSendStream::Stats stats = stream_->GetStats(); | 767 VideoSendStream::Stats stats = stream_->GetStats(); |
772 EXPECT_TRUE(stats.suspended); | 768 EXPECT_TRUE(stats.suspended); |
773 SendRtcpFeedback(high_remb_bps_); | 769 SendRtcpFeedback(high_remb_bps_); |
774 test_state_ = kWaitingForPacket; | 770 test_state_ = kWaitingForPacket; |
775 } | 771 } |
776 } | 772 } |
777 | 773 |
778 void set_low_remb_bps(int value) { | 774 void set_low_remb_bps(int value) { |
779 rtc::CritScope lock(&crit_); | 775 rtc::CritScope lock(&crit_); |
780 low_remb_bps_ = value; | 776 low_remb_bps_ = value; |
781 } | 777 } |
782 | 778 |
783 void set_high_remb_bps(int value) { | 779 void set_high_remb_bps(int value) { |
784 rtc::CritScope lock(&crit_); | 780 rtc::CritScope lock(&crit_); |
785 high_remb_bps_ = value; | 781 high_remb_bps_ = value; |
786 } | 782 } |
787 | 783 |
788 void SetReceivers(PacketReceiver* send_transport_receiver, | |
789 PacketReceiver* receive_transport_receiver) override { | |
790 transport_.SetReceiver(send_transport_receiver); | |
791 } | |
792 | |
793 void OnStreamsCreated( | 784 void OnStreamsCreated( |
794 VideoSendStream* send_stream, | 785 VideoSendStream* send_stream, |
795 const std::vector<VideoReceiveStream*>& receive_streams) override { | 786 const std::vector<VideoReceiveStream*>& receive_streams) override { |
796 stream_ = send_stream; | 787 stream_ = send_stream; |
797 } | 788 } |
798 | 789 |
799 void ModifyConfigs(VideoSendStream::Config* send_config, | 790 void ModifyConfigs(VideoSendStream::Config* send_config, |
800 std::vector<VideoReceiveStream::Config>* receive_configs, | 791 std::vector<VideoReceiveStream::Config>* receive_configs, |
801 VideoEncoderConfig* encoder_config) override { | 792 VideoEncoderConfig* encoder_config) override { |
| 793 transport_adapter_.reset( |
| 794 new internal::TransportAdapter(send_config->send_transport)); |
| 795 transport_adapter_->Enable(); |
802 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 796 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
803 send_config->pre_encode_callback = this; | 797 send_config->pre_encode_callback = this; |
804 send_config->suspend_below_min_bitrate = true; | 798 send_config->suspend_below_min_bitrate = true; |
805 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; | 799 int min_bitrate_bps = encoder_config->streams[0].min_bitrate_bps; |
806 set_low_remb_bps(min_bitrate_bps - 10000); | 800 set_low_remb_bps(min_bitrate_bps - 10000); |
807 int threshold_window = std::max(min_bitrate_bps / 10, 10000); | 801 int threshold_window = std::max(min_bitrate_bps / 10, 10000); |
808 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, | 802 ASSERT_GT(encoder_config->streams[0].max_bitrate_bps, |
809 min_bitrate_bps + threshold_window + 5000); | 803 min_bitrate_bps + threshold_window + 5000); |
810 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); | 804 set_high_remb_bps(min_bitrate_bps + threshold_window + 5000); |
811 } | 805 } |
812 | 806 |
813 void PerformTest() override { | 807 void PerformTest() override { |
814 EXPECT_EQ(kEventSignaled, Wait()) | 808 EXPECT_EQ(kEventSignaled, Wait()) |
815 << "Timed out during suspend-below-min-bitrate test."; | 809 << "Timed out during suspend-below-min-bitrate test."; |
816 transport_.StopSending(); | |
817 } | 810 } |
818 | 811 |
819 enum TestState { | 812 enum TestState { |
820 kBeforeSuspend, | 813 kBeforeSuspend, |
821 kDuringSuspend, | 814 kDuringSuspend, |
822 kWaitingForPacket, | 815 kWaitingForPacket, |
823 kWaitingForStats | 816 kWaitingForStats |
824 }; | 817 }; |
825 | 818 |
826 virtual void SendRtcpFeedback(int remb_value) | 819 virtual void SendRtcpFeedback(int remb_value) |
827 EXCLUSIVE_LOCKS_REQUIRED(crit_) { | 820 EXCLUSIVE_LOCKS_REQUIRED(crit_) { |
828 FakeReceiveStatistics receive_stats( | 821 FakeReceiveStatistics receive_stats( |
829 kSendSsrcs[0], last_sequence_number_, rtp_count_, 0); | 822 kSendSsrcs[0], last_sequence_number_, rtp_count_, 0); |
830 RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr, | 823 RTCPSender rtcp_sender(false, clock_, &receive_stats, nullptr, |
831 &transport_adapter_); | 824 transport_adapter_.get()); |
832 | 825 |
833 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); | 826 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
834 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); | 827 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
835 if (remb_value > 0) { | 828 if (remb_value > 0) { |
836 rtcp_sender.SetREMBStatus(true); | 829 rtcp_sender.SetREMBStatus(true); |
837 rtcp_sender.SetREMBData(remb_value, std::vector<uint32_t>()); | 830 rtcp_sender.SetREMBData(remb_value, std::vector<uint32_t>()); |
838 } | 831 } |
839 RTCPSender::FeedbackState feedback_state; | 832 RTCPSender::FeedbackState feedback_state; |
840 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); | 833 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); |
841 } | 834 } |
842 | 835 |
843 internal::TransportAdapter transport_adapter_; | 836 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
844 test::DirectTransport transport_; | |
845 Clock* const clock_; | 837 Clock* const clock_; |
846 VideoSendStream* stream_; | 838 VideoSendStream* stream_; |
847 | 839 |
848 rtc::CriticalSection crit_; | 840 rtc::CriticalSection crit_; |
849 TestState test_state_ GUARDED_BY(crit_); | 841 TestState test_state_ GUARDED_BY(crit_); |
850 int rtp_count_ GUARDED_BY(crit_); | 842 int rtp_count_ GUARDED_BY(crit_); |
851 int last_sequence_number_ GUARDED_BY(crit_); | 843 int last_sequence_number_ GUARDED_BY(crit_); |
852 int suspended_frame_count_ GUARDED_BY(crit_); | 844 int suspended_frame_count_ GUARDED_BY(crit_); |
853 int low_remb_bps_ GUARDED_BY(crit_); | 845 int low_remb_bps_ GUARDED_BY(crit_); |
854 int high_remb_bps_ GUARDED_BY(crit_); | 846 int high_remb_bps_ GUARDED_BY(crit_); |
855 } test; | 847 } test; |
856 | 848 |
857 RunBaseTest(&test); | 849 RunBaseTest(&test, FakeNetworkPipe::Config()); |
858 } | 850 } |
859 | 851 |
860 TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { | 852 TEST_F(VideoSendStreamTest, NoPaddingWhenVideoIsMuted) { |
861 class NoPaddingWhenVideoIsMuted : public test::SendTest { | 853 class NoPaddingWhenVideoIsMuted : public test::SendTest { |
862 public: | 854 public: |
863 NoPaddingWhenVideoIsMuted() | 855 NoPaddingWhenVideoIsMuted() |
864 : SendTest(kDefaultTimeoutMs), | 856 : SendTest(kDefaultTimeoutMs), |
865 clock_(Clock::GetRealTimeClock()), | 857 clock_(Clock::GetRealTimeClock()), |
866 transport_adapter_(ReceiveTransport()), | |
867 last_packet_time_ms_(-1), | 858 last_packet_time_ms_(-1), |
868 capturer_(nullptr) { | 859 capturer_(nullptr) { |
869 transport_adapter_.Enable(); | |
870 } | 860 } |
871 | 861 |
872 private: | 862 private: |
873 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 863 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
874 rtc::CritScope lock(&crit_); | 864 rtc::CritScope lock(&crit_); |
875 last_packet_time_ms_ = clock_->TimeInMilliseconds(); | 865 last_packet_time_ms_ = clock_->TimeInMilliseconds(); |
876 capturer_->Stop(); | 866 capturer_->Stop(); |
877 return SEND_PACKET; | 867 return SEND_PACKET; |
878 } | 868 } |
879 | 869 |
880 Action OnSendRtcp(const uint8_t* packet, size_t length) override { | 870 Action OnSendRtcp(const uint8_t* packet, size_t length) override { |
881 rtc::CritScope lock(&crit_); | 871 rtc::CritScope lock(&crit_); |
882 const int kVideoMutedThresholdMs = 10000; | 872 const int kVideoMutedThresholdMs = 10000; |
883 if (last_packet_time_ms_ > 0 && | 873 if (last_packet_time_ms_ > 0 && |
884 clock_->TimeInMilliseconds() - last_packet_time_ms_ > | 874 clock_->TimeInMilliseconds() - last_packet_time_ms_ > |
885 kVideoMutedThresholdMs) | 875 kVideoMutedThresholdMs) |
886 observation_complete_->Set(); | 876 observation_complete_->Set(); |
887 // Receive statistics reporting having lost 50% of the packets. | 877 // Receive statistics reporting having lost 50% of the packets. |
888 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); | 878 FakeReceiveStatistics receive_stats(kSendSsrcs[0], 1, 1, 0); |
889 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, | 879 RTCPSender rtcp_sender(false, Clock::GetRealTimeClock(), &receive_stats, |
890 nullptr, &transport_adapter_); | 880 nullptr, transport_adapter_.get()); |
891 | 881 |
892 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); | 882 rtcp_sender.SetRTCPStatus(RtcpMode::kReducedSize); |
893 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); | 883 rtcp_sender.SetRemoteSSRC(kSendSsrcs[0]); |
894 | 884 |
895 RTCPSender::FeedbackState feedback_state; | 885 RTCPSender::FeedbackState feedback_state; |
896 | 886 |
897 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); | 887 EXPECT_EQ(0, rtcp_sender.SendRTCP(feedback_state, kRtcpRr)); |
898 return SEND_PACKET; | 888 return SEND_PACKET; |
899 } | 889 } |
900 | 890 |
901 void SetReceivers(PacketReceiver* send_transport_receiver, | 891 void OnTransportsCreated( |
902 PacketReceiver* receive_transport_receiver) override { | 892 test::PacketTransport* send_transport, |
903 RtpRtcpObserver::SetReceivers(send_transport_receiver, | 893 test::PacketTransport* receive_transport) override { |
904 send_transport_receiver); | 894 transport_adapter_.reset( |
| 895 new internal::TransportAdapter(receive_transport)); |
| 896 transport_adapter_->Enable(); |
905 } | 897 } |
906 | 898 |
907 size_t GetNumStreams() const override { return 3; } | 899 size_t GetNumStreams() const override { return 3; } |
908 | 900 |
909 virtual void OnFrameGeneratorCapturerCreated( | 901 virtual void OnFrameGeneratorCapturerCreated( |
910 test::FrameGeneratorCapturer* frame_generator_capturer) { | 902 test::FrameGeneratorCapturer* frame_generator_capturer) { |
911 rtc::CritScope lock(&crit_); | 903 rtc::CritScope lock(&crit_); |
912 capturer_ = frame_generator_capturer; | 904 capturer_ = frame_generator_capturer; |
913 } | 905 } |
914 | 906 |
915 void PerformTest() override { | 907 void PerformTest() override { |
916 EXPECT_EQ(kEventSignaled, Wait()) | 908 EXPECT_EQ(kEventSignaled, Wait()) |
917 << "Timed out while waiting for RTP packets to stop being sent."; | 909 << "Timed out while waiting for RTP packets to stop being sent."; |
918 } | 910 } |
919 | 911 |
920 Clock* const clock_; | 912 Clock* const clock_; |
921 internal::TransportAdapter transport_adapter_; | 913 rtc::scoped_ptr<internal::TransportAdapter> transport_adapter_; |
922 rtc::CriticalSection crit_; | 914 rtc::CriticalSection crit_; |
923 int64_t last_packet_time_ms_ GUARDED_BY(crit_); | 915 int64_t last_packet_time_ms_ GUARDED_BY(crit_); |
924 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); | 916 test::FrameGeneratorCapturer* capturer_ GUARDED_BY(crit_); |
925 } test; | 917 } test; |
926 | 918 |
927 RunBaseTest(&test); | 919 RunBaseTest(&test, FakeNetworkPipe::Config()); |
928 } | 920 } |
929 | 921 |
930 // This test first observes "high" bitrate use at which point it sends a REMB to | 922 // This test first observes "high" bitrate use at which point it sends a REMB to |
931 // indicate that it should be lowered significantly. The test then observes that | 923 // indicate that it should be lowered significantly. The test then observes that |
932 // the bitrate observed is sinking well below the min-transmit-bitrate threshold | 924 // the bitrate observed is sinking well below the min-transmit-bitrate threshold |
933 // to verify that the min-transmit bitrate respects incoming REMB. | 925 // to verify that the min-transmit bitrate respects incoming REMB. |
934 // | 926 // |
935 // Note that the test starts at "high" bitrate and does not ramp up to "higher" | 927 // Note that the test starts at "high" bitrate and does not ramp up to "higher" |
936 // bitrate since no receiver block or remb is sent in the initial phase. | 928 // bitrate since no receiver block or remb is sent in the initial phase. |
937 TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { | 929 TEST_F(VideoSendStreamTest, MinTransmitBitrateRespectsRemb) { |
938 static const int kMinTransmitBitrateBps = 400000; | 930 static const int kMinTransmitBitrateBps = 400000; |
939 static const int kHighBitrateBps = 150000; | 931 static const int kHighBitrateBps = 150000; |
940 static const int kRembBitrateBps = 80000; | 932 static const int kRembBitrateBps = 80000; |
941 static const int kRembRespectedBitrateBps = 100000; | 933 static const int kRembRespectedBitrateBps = 100000; |
942 class BitrateObserver : public test::SendTest, public PacketReceiver { | 934 class BitrateObserver : public test::SendTest { |
943 public: | 935 public: |
944 BitrateObserver() | 936 BitrateObserver() |
945 : SendTest(kDefaultTimeoutMs), | 937 : SendTest(kDefaultTimeoutMs), |
946 feedback_transport_(ReceiveTransport()), | |
947 bitrate_capped_(false) { | 938 bitrate_capped_(false) { |
948 RtpRtcp::Configuration config; | |
949 feedback_transport_.Enable(); | |
950 config.outgoing_transport = &feedback_transport_; | |
951 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); | |
952 rtp_rtcp_->SetREMBStatus(true); | |
953 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); | |
954 } | |
955 | |
956 void OnStreamsCreated( | |
957 VideoSendStream* send_stream, | |
958 const std::vector<VideoReceiveStream*>& receive_streams) override { | |
959 stream_ = send_stream; | |
960 } | 939 } |
961 | 940 |
962 private: | 941 private: |
963 DeliveryStatus DeliverPacket(MediaType media_type, | 942 virtual Action OnSendRtp(const uint8_t* packet, size_t length) { |
964 const uint8_t* packet, | |
965 size_t length, | |
966 const PacketTime& packet_time) override { | |
967 EXPECT_TRUE(media_type == MediaType::ANY || | |
968 media_type == MediaType::VIDEO); | |
969 if (RtpHeaderParser::IsRtcp(packet, length)) | 943 if (RtpHeaderParser::IsRtcp(packet, length)) |
970 return DELIVERY_OK; | 944 return DROP_PACKET; |
971 | 945 |
972 RTPHeader header; | 946 RTPHeader header; |
973 if (!parser_->Parse(packet, length, &header)) | 947 if (!parser_->Parse(packet, length, &header)) |
974 return DELIVERY_PACKET_ERROR; | 948 return DROP_PACKET; |
975 RTC_DCHECK(stream_ != nullptr); | 949 RTC_DCHECK(stream_ != nullptr); |
976 VideoSendStream::Stats stats = stream_->GetStats(); | 950 VideoSendStream::Stats stats = stream_->GetStats(); |
977 if (!stats.substreams.empty()) { | 951 if (!stats.substreams.empty()) { |
978 EXPECT_EQ(1u, stats.substreams.size()); | 952 EXPECT_EQ(1u, stats.substreams.size()); |
979 int total_bitrate_bps = | 953 int total_bitrate_bps = |
980 stats.substreams.begin()->second.total_bitrate_bps; | 954 stats.substreams.begin()->second.total_bitrate_bps; |
981 test::PrintResult("bitrate_stats_", | 955 test::PrintResult("bitrate_stats_", |
982 "min_transmit_bitrate_low_remb", | 956 "min_transmit_bitrate_low_remb", |
983 "bitrate_bps", | 957 "bitrate_bps", |
984 static_cast<size_t>(total_bitrate_bps), | 958 static_cast<size_t>(total_bitrate_bps), |
985 "bps", | 959 "bps", |
986 false); | 960 false); |
987 if (total_bitrate_bps > kHighBitrateBps) { | 961 if (total_bitrate_bps > kHighBitrateBps) { |
988 rtp_rtcp_->SetREMBData(kRembBitrateBps, | 962 rtp_rtcp_->SetREMBData(kRembBitrateBps, |
989 std::vector<uint32_t>(1, header.ssrc)); | 963 std::vector<uint32_t>(1, header.ssrc)); |
990 rtp_rtcp_->Process(); | 964 rtp_rtcp_->Process(); |
991 bitrate_capped_ = true; | 965 bitrate_capped_ = true; |
992 } else if (bitrate_capped_ && | 966 } else if (bitrate_capped_ && |
993 total_bitrate_bps < kRembRespectedBitrateBps) { | 967 total_bitrate_bps < kRembRespectedBitrateBps) { |
994 observation_complete_->Set(); | 968 observation_complete_->Set(); |
995 } | 969 } |
996 } | 970 } |
997 return DELIVERY_OK; | 971 // Packets don't have to be delivered since the test is the receiver. |
| 972 return DROP_PACKET; |
998 } | 973 } |
999 | 974 |
1000 void SetReceivers(PacketReceiver* send_transport_receiver, | 975 void OnStreamsCreated( |
1001 PacketReceiver* receive_transport_receiver) override { | 976 VideoSendStream* send_stream, |
1002 RtpRtcpObserver::SetReceivers(this, send_transport_receiver); | 977 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 978 stream_ = send_stream; |
| 979 RtpRtcp::Configuration config; |
| 980 config.outgoing_transport = feedback_transport_.get(); |
| 981 rtp_rtcp_.reset(RtpRtcp::CreateRtpRtcp(config)); |
| 982 rtp_rtcp_->SetREMBStatus(true); |
| 983 rtp_rtcp_->SetRTCPStatus(RtcpMode::kReducedSize); |
1003 } | 984 } |
1004 | 985 |
1005 void ModifyConfigs(VideoSendStream::Config* send_config, | 986 void ModifyConfigs(VideoSendStream::Config* send_config, |
1006 std::vector<VideoReceiveStream::Config>* receive_configs, | 987 std::vector<VideoReceiveStream::Config>* receive_configs, |
1007 VideoEncoderConfig* encoder_config) override { | 988 VideoEncoderConfig* encoder_config) override { |
| 989 feedback_transport_.reset( |
| 990 new internal::TransportAdapter(send_config->send_transport)); |
| 991 feedback_transport_->Enable(); |
1008 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; | 992 encoder_config->min_transmit_bitrate_bps = kMinTransmitBitrateBps; |
1009 } | 993 } |
1010 | 994 |
1011 void PerformTest() override { | 995 void PerformTest() override { |
1012 EXPECT_EQ(kEventSignaled, Wait()) | 996 EXPECT_EQ(kEventSignaled, Wait()) |
1013 << "Timeout while waiting for low bitrate stats after REMB."; | 997 << "Timeout while waiting for low bitrate stats after REMB."; |
1014 } | 998 } |
1015 | 999 |
1016 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; | 1000 rtc::scoped_ptr<RtpRtcp> rtp_rtcp_; |
1017 internal::TransportAdapter feedback_transport_; | 1001 rtc::scoped_ptr<internal::TransportAdapter> feedback_transport_; |
1018 VideoSendStream* stream_; | 1002 VideoSendStream* stream_; |
1019 bool bitrate_capped_; | 1003 bool bitrate_capped_; |
1020 } test; | 1004 } test; |
1021 | 1005 |
1022 RunBaseTest(&test); | 1006 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1023 } | 1007 } |
1024 | 1008 |
1025 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { | 1009 TEST_F(VideoSendStreamTest, CanReconfigureToUseStartBitrateAbovePreviousMax) { |
1026 class StartBitrateObserver : public test::FakeEncoder { | 1010 class StartBitrateObserver : public test::FakeEncoder { |
1027 public: | 1011 public: |
1028 StartBitrateObserver() | 1012 StartBitrateObserver() |
1029 : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {} | 1013 : FakeEncoder(Clock::GetRealTimeClock()), start_bitrate_kbps_(0) {} |
1030 int32_t InitEncode(const VideoCodec* config, | 1014 int32_t InitEncode(const VideoCodec* config, |
1031 int32_t number_of_cores, | 1015 int32_t number_of_cores, |
1032 size_t max_payload_size) override { | 1016 size_t max_payload_size) override { |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 | 1306 |
1323 rtc::CriticalSection crit_; | 1307 rtc::CriticalSection crit_; |
1324 VideoSendStream* stream_; | 1308 VideoSendStream* stream_; |
1325 bool initialized_ GUARDED_BY(crit_); | 1309 bool initialized_ GUARDED_BY(crit_); |
1326 bool callback_registered_ GUARDED_BY(crit_); | 1310 bool callback_registered_ GUARDED_BY(crit_); |
1327 size_t num_releases_ GUARDED_BY(crit_); | 1311 size_t num_releases_ GUARDED_BY(crit_); |
1328 bool released_ GUARDED_BY(crit_); | 1312 bool released_ GUARDED_BY(crit_); |
1329 VideoEncoderConfig encoder_config_; | 1313 VideoEncoderConfig encoder_config_; |
1330 } test_encoder; | 1314 } test_encoder; |
1331 | 1315 |
1332 RunBaseTest(&test_encoder); | 1316 RunBaseTest(&test_encoder, FakeNetworkPipe::Config()); |
1333 | 1317 |
1334 EXPECT_TRUE(test_encoder.IsReleased()); | 1318 EXPECT_TRUE(test_encoder.IsReleased()); |
1335 EXPECT_EQ(1u, test_encoder.num_releases()); | 1319 EXPECT_EQ(1u, test_encoder.num_releases()); |
1336 } | 1320 } |
1337 | 1321 |
1338 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { | 1322 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesCommonEncoderConfigValues) { |
1339 class VideoCodecConfigObserver : public test::SendTest, | 1323 class VideoCodecConfigObserver : public test::SendTest, |
1340 public test::FakeEncoder { | 1324 public test::FakeEncoder { |
1341 public: | 1325 public: |
1342 VideoCodecConfigObserver() | 1326 VideoCodecConfigObserver() |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1380 EXPECT_EQ(2u, num_initializations_) | 1364 EXPECT_EQ(2u, num_initializations_) |
1381 << "ReconfigureVideoEncoder did not reinitialize the encoder with " | 1365 << "ReconfigureVideoEncoder did not reinitialize the encoder with " |
1382 "new encoder settings."; | 1366 "new encoder settings."; |
1383 } | 1367 } |
1384 | 1368 |
1385 size_t num_initializations_; | 1369 size_t num_initializations_; |
1386 VideoSendStream* stream_; | 1370 VideoSendStream* stream_; |
1387 VideoEncoderConfig encoder_config_; | 1371 VideoEncoderConfig encoder_config_; |
1388 } test; | 1372 } test; |
1389 | 1373 |
1390 RunBaseTest(&test); | 1374 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1391 } | 1375 } |
1392 | 1376 |
1393 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; | 1377 static const size_t kVideoCodecConfigObserverNumberOfTemporalLayers = 4; |
1394 template <typename T> | 1378 template <typename T> |
1395 class VideoCodecConfigObserver : public test::SendTest, | 1379 class VideoCodecConfigObserver : public test::SendTest, |
1396 public test::FakeEncoder { | 1380 public test::FakeEncoder { |
1397 | 1381 |
1398 public: | 1382 public: |
1399 VideoCodecConfigObserver(VideoCodecType video_codec_type, | 1383 VideoCodecConfigObserver(VideoCodecType video_codec_type, |
1400 const char* codec_name) | 1384 const char* codec_name) |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1508 // reconfiguring the encoder and not match the set config. | 1492 // reconfiguring the encoder and not match the set config. |
1509 VideoCodecVP9 encoder_settings = encoder_settings_; | 1493 VideoCodecVP9 encoder_settings = encoder_settings_; |
1510 encoder_settings.numberOfTemporalLayers = | 1494 encoder_settings.numberOfTemporalLayers = |
1511 kVideoCodecConfigObserverNumberOfTemporalLayers; | 1495 kVideoCodecConfigObserverNumberOfTemporalLayers; |
1512 EXPECT_EQ(0, memcmp(&config.codecSpecific.VP9, &encoder_settings, | 1496 EXPECT_EQ(0, memcmp(&config.codecSpecific.VP9, &encoder_settings, |
1513 sizeof(encoder_settings_))); | 1497 sizeof(encoder_settings_))); |
1514 } | 1498 } |
1515 | 1499 |
1516 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) { | 1500 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp8Config) { |
1517 VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, "VP8"); | 1501 VideoCodecConfigObserver<VideoCodecVP8> test(kVideoCodecVP8, "VP8"); |
1518 RunBaseTest(&test); | 1502 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1519 } | 1503 } |
1520 | 1504 |
1521 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) { | 1505 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesVp9Config) { |
1522 VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, "VP9"); | 1506 VideoCodecConfigObserver<VideoCodecVP9> test(kVideoCodecVP9, "VP9"); |
1523 RunBaseTest(&test); | 1507 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1524 } | 1508 } |
1525 | 1509 |
1526 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesH264Config) { | 1510 TEST_F(VideoSendStreamTest, EncoderSetupPropagatesH264Config) { |
1527 VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, "H264"); | 1511 VideoCodecConfigObserver<VideoCodecH264> test(kVideoCodecH264, "H264"); |
1528 RunBaseTest(&test); | 1512 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1529 } | 1513 } |
1530 | 1514 |
1531 TEST_F(VideoSendStreamTest, RtcpSenderReportContainsMediaBytesSent) { | 1515 TEST_F(VideoSendStreamTest, RtcpSenderReportContainsMediaBytesSent) { |
1532 class RtcpSenderReportTest : public test::SendTest { | 1516 class RtcpSenderReportTest : public test::SendTest { |
1533 public: | 1517 public: |
1534 RtcpSenderReportTest() : SendTest(kDefaultTimeoutMs), | 1518 RtcpSenderReportTest() : SendTest(kDefaultTimeoutMs), |
1535 rtp_packets_sent_(0), | 1519 rtp_packets_sent_(0), |
1536 media_bytes_sent_(0) {} | 1520 media_bytes_sent_(0) {} |
1537 | 1521 |
1538 private: | 1522 private: |
(...skipping 29 matching lines...) Expand all Loading... |
1568 | 1552 |
1569 void PerformTest() override { | 1553 void PerformTest() override { |
1570 EXPECT_EQ(kEventSignaled, Wait()) | 1554 EXPECT_EQ(kEventSignaled, Wait()) |
1571 << "Timed out while waiting for RTCP sender report."; | 1555 << "Timed out while waiting for RTCP sender report."; |
1572 } | 1556 } |
1573 | 1557 |
1574 size_t rtp_packets_sent_; | 1558 size_t rtp_packets_sent_; |
1575 size_t media_bytes_sent_; | 1559 size_t media_bytes_sent_; |
1576 } test; | 1560 } test; |
1577 | 1561 |
1578 RunBaseTest(&test); | 1562 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1579 } | 1563 } |
1580 | 1564 |
1581 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { | 1565 TEST_F(VideoSendStreamTest, TranslatesTwoLayerScreencastToTargetBitrate) { |
1582 static const int kScreencastTargetBitrateKbps = 200; | 1566 static const int kScreencastTargetBitrateKbps = 200; |
1583 class ScreencastTargetBitrateTest : public test::SendTest, | 1567 class ScreencastTargetBitrateTest : public test::SendTest, |
1584 public test::FakeEncoder { | 1568 public test::FakeEncoder { |
1585 public: | 1569 public: |
1586 ScreencastTargetBitrateTest() | 1570 ScreencastTargetBitrateTest() |
1587 : SendTest(kDefaultTimeoutMs), | 1571 : SendTest(kDefaultTimeoutMs), |
1588 test::FakeEncoder(Clock::GetRealTimeClock()) {} | 1572 test::FakeEncoder(Clock::GetRealTimeClock()) {} |
(...skipping 19 matching lines...) Expand all Loading... |
1608 kScreencastTargetBitrateKbps * 1000); | 1592 kScreencastTargetBitrateKbps * 1000); |
1609 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; | 1593 encoder_config->content_type = VideoEncoderConfig::ContentType::kScreen; |
1610 } | 1594 } |
1611 | 1595 |
1612 void PerformTest() override { | 1596 void PerformTest() override { |
1613 EXPECT_EQ(kEventSignaled, Wait()) | 1597 EXPECT_EQ(kEventSignaled, Wait()) |
1614 << "Timed out while waiting for the encoder to be initialized."; | 1598 << "Timed out while waiting for the encoder to be initialized."; |
1615 } | 1599 } |
1616 } test; | 1600 } test; |
1617 | 1601 |
1618 RunBaseTest(&test); | 1602 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1619 } | 1603 } |
1620 | 1604 |
1621 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { | 1605 TEST_F(VideoSendStreamTest, ReconfigureBitratesSetsEncoderBitratesCorrectly) { |
1622 // These are chosen to be "kind of odd" to not be accidentally checked against | 1606 // These are chosen to be "kind of odd" to not be accidentally checked against |
1623 // default values. | 1607 // default values. |
1624 static const int kMinBitrateKbps = 137; | 1608 static const int kMinBitrateKbps = 137; |
1625 static const int kStartBitrateKbps = 345; | 1609 static const int kStartBitrateKbps = 345; |
1626 static const int kLowerMaxBitrateKbps = 312; | 1610 static const int kLowerMaxBitrateKbps = 312; |
1627 static const int kMaxBitrateKbps = 413; | 1611 static const int kMaxBitrateKbps = 413; |
1628 static const int kIncreasedStartBitrateKbps = 451; | 1612 static const int kIncreasedStartBitrateKbps = 451; |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1714 EXPECT_EQ(3, num_initializations_) | 1698 EXPECT_EQ(3, num_initializations_) |
1715 << "Encoder should have been reconfigured with the new value."; | 1699 << "Encoder should have been reconfigured with the new value."; |
1716 } | 1700 } |
1717 | 1701 |
1718 int num_initializations_; | 1702 int num_initializations_; |
1719 webrtc::Call* call_; | 1703 webrtc::Call* call_; |
1720 webrtc::VideoSendStream* send_stream_; | 1704 webrtc::VideoSendStream* send_stream_; |
1721 webrtc::VideoEncoderConfig encoder_config_; | 1705 webrtc::VideoEncoderConfig encoder_config_; |
1722 } test; | 1706 } test; |
1723 | 1707 |
1724 RunBaseTest(&test); | 1708 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1725 } | 1709 } |
1726 | 1710 |
1727 TEST_F(VideoSendStreamTest, ReportsSentResolution) { | 1711 TEST_F(VideoSendStreamTest, ReportsSentResolution) { |
1728 static const size_t kNumStreams = 3; | 1712 static const size_t kNumStreams = 3; |
1729 // Unusual resolutions to make sure that they are the ones being reported. | 1713 // Unusual resolutions to make sure that they are the ones being reported. |
1730 static const struct { | 1714 static const struct { |
1731 int width; | 1715 int width; |
1732 int height; | 1716 int height; |
1733 } kEncodedResolution[kNumStreams] = { | 1717 } kEncodedResolution[kNumStreams] = { |
1734 {241, 181}, {300, 121}, {121, 221}}; | 1718 {241, 181}, {300, 121}, {121, 221}}; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1793 | 1777 |
1794 void OnStreamsCreated( | 1778 void OnStreamsCreated( |
1795 VideoSendStream* send_stream, | 1779 VideoSendStream* send_stream, |
1796 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1780 const std::vector<VideoReceiveStream*>& receive_streams) override { |
1797 send_stream_ = send_stream; | 1781 send_stream_ = send_stream; |
1798 } | 1782 } |
1799 | 1783 |
1800 VideoSendStream* send_stream_; | 1784 VideoSendStream* send_stream_; |
1801 } test; | 1785 } test; |
1802 | 1786 |
1803 RunBaseTest(&test); | 1787 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1804 } | 1788 } |
1805 | 1789 |
1806 class VP9HeaderObeserver : public test::SendTest { | 1790 class VP9HeaderObeserver : public test::SendTest { |
1807 public: | 1791 public: |
1808 VP9HeaderObeserver() | 1792 VP9HeaderObeserver() |
1809 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), | 1793 : SendTest(VideoSendStreamTest::kDefaultTimeoutMs), |
1810 vp9_encoder_(VP9Encoder::Create()), | 1794 vp9_encoder_(VP9Encoder::Create()), |
1811 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()) {} | 1795 vp9_settings_(VideoEncoder::GetDefaultVp9Settings()) {} |
1812 | 1796 |
1813 virtual void ModifyConfigsHook( | 1797 virtual void ModifyConfigsHook( |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1873 }; | 1857 }; |
1874 | 1858 |
1875 TEST_F(VideoSendStreamTest, VP9NoFlexMode) { | 1859 TEST_F(VideoSendStreamTest, VP9NoFlexMode) { |
1876 class NoFlexibleMode : public VP9HeaderObeserver { | 1860 class NoFlexibleMode : public VP9HeaderObeserver { |
1877 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { | 1861 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { |
1878 EXPECT_FALSE(vp9videoHeader->flexible_mode); | 1862 EXPECT_FALSE(vp9videoHeader->flexible_mode); |
1879 observation_complete_->Set(); | 1863 observation_complete_->Set(); |
1880 } | 1864 } |
1881 } test; | 1865 } test; |
1882 | 1866 |
1883 RunBaseTest(&test); | 1867 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1884 } | 1868 } |
1885 | 1869 |
1886 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { | 1870 TEST_F(VideoSendStreamTest, DISABLED_VP9FlexMode) { |
1887 class FlexibleMode : public VP9HeaderObeserver { | 1871 class FlexibleMode : public VP9HeaderObeserver { |
1888 void ModifyConfigsHook( | 1872 void ModifyConfigsHook( |
1889 VideoSendStream::Config* send_config, | 1873 VideoSendStream::Config* send_config, |
1890 std::vector<VideoReceiveStream::Config>* receive_configs, | 1874 std::vector<VideoReceiveStream::Config>* receive_configs, |
1891 VideoEncoderConfig* encoder_config) override { | 1875 VideoEncoderConfig* encoder_config) override { |
1892 vp9_settings_.flexibleMode = true; | 1876 vp9_settings_.flexibleMode = true; |
1893 } | 1877 } |
1894 | 1878 |
1895 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { | 1879 void InspectHeader(RTPVideoHeaderVP9* vp9videoHeader) override { |
1896 EXPECT_TRUE(vp9videoHeader->flexible_mode); | 1880 EXPECT_TRUE(vp9videoHeader->flexible_mode); |
1897 observation_complete_->Set(); | 1881 observation_complete_->Set(); |
1898 } | 1882 } |
1899 | 1883 |
1900 } test; | 1884 } test; |
1901 | 1885 |
1902 RunBaseTest(&test); | 1886 RunBaseTest(&test, FakeNetworkPipe::Config()); |
1903 } | 1887 } |
1904 | 1888 |
1905 } // namespace webrtc | 1889 } // namespace webrtc |
OLD | NEW |