| 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> | 10 #include <algorithm> |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 | 47 |
| 48 namespace webrtc { | 48 namespace webrtc { |
| 49 | 49 |
| 50 static const int kSilenceTimeoutMs = 2000; | 50 static const int kSilenceTimeoutMs = 2000; |
| 51 | 51 |
| 52 class EndToEndTest : public test::CallTest { | 52 class EndToEndTest : public test::CallTest { |
| 53 public: | 53 public: |
| 54 EndToEndTest() {} | 54 EndToEndTest() {} |
| 55 | 55 |
| 56 virtual ~EndToEndTest() { | 56 virtual ~EndToEndTest() { |
| 57 EXPECT_EQ(nullptr, send_stream_); | 57 EXPECT_EQ(nullptr, video_send_stream_); |
| 58 EXPECT_TRUE(receive_streams_.empty()); | 58 EXPECT_TRUE(video_receive_streams_.empty()); |
| 59 } | 59 } |
| 60 | 60 |
| 61 protected: | 61 protected: |
| 62 class UnusedTransport : public Transport { | 62 class UnusedTransport : public Transport { |
| 63 private: | 63 private: |
| 64 bool SendRtp(const uint8_t* packet, | 64 bool SendRtp(const uint8_t* packet, |
| 65 size_t length, | 65 size_t length, |
| 66 const PacketOptions& options) override { | 66 const PacketOptions& options) override { |
| 67 ADD_FAILURE() << "Unexpected RTP sent."; | 67 ADD_FAILURE() << "Unexpected RTP sent."; |
| 68 return false; | 68 return false; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 85 | 85 |
| 86 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { | 86 TEST_F(EndToEndTest, ReceiverCanBeStartedTwice) { |
| 87 CreateCalls(Call::Config(), Call::Config()); | 87 CreateCalls(Call::Config(), Call::Config()); |
| 88 | 88 |
| 89 test::NullTransport transport; | 89 test::NullTransport transport; |
| 90 CreateSendConfig(1, &transport); | 90 CreateSendConfig(1, &transport); |
| 91 CreateMatchingReceiveConfigs(&transport); | 91 CreateMatchingReceiveConfigs(&transport); |
| 92 | 92 |
| 93 CreateStreams(); | 93 CreateStreams(); |
| 94 | 94 |
| 95 receive_streams_[0]->Start(); | 95 video_receive_streams_[0]->Start(); |
| 96 receive_streams_[0]->Start(); | 96 video_receive_streams_[0]->Start(); |
| 97 | 97 |
| 98 DestroyStreams(); | 98 DestroyStreams(); |
| 99 } | 99 } |
| 100 | 100 |
| 101 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) { | 101 TEST_F(EndToEndTest, ReceiverCanBeStoppedTwice) { |
| 102 CreateCalls(Call::Config(), Call::Config()); | 102 CreateCalls(Call::Config(), Call::Config()); |
| 103 | 103 |
| 104 test::NullTransport transport; | 104 test::NullTransport transport; |
| 105 CreateSendConfig(1, &transport); | 105 CreateSendConfig(1, &transport); |
| 106 CreateMatchingReceiveConfigs(&transport); | 106 CreateMatchingReceiveConfigs(&transport); |
| 107 | 107 |
| 108 CreateStreams(); | 108 CreateStreams(); |
| 109 | 109 |
| 110 receive_streams_[0]->Stop(); | 110 video_receive_streams_[0]->Stop(); |
| 111 receive_streams_[0]->Stop(); | 111 video_receive_streams_[0]->Stop(); |
| 112 | 112 |
| 113 DestroyStreams(); | 113 DestroyStreams(); |
| 114 } | 114 } |
| 115 | 115 |
| 116 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { | 116 TEST_F(EndToEndTest, RendersSingleDelayedFrame) { |
| 117 static const int kWidth = 320; | 117 static const int kWidth = 320; |
| 118 static const int kHeight = 240; | 118 static const int kHeight = 240; |
| 119 // This constant is chosen to be higher than the timeout in the video_render | 119 // This constant is chosen to be higher than the timeout in the video_render |
| 120 // module. This makes sure that frames aren't dropped if there are no other | 120 // module. This makes sure that frames aren't dropped if there are no other |
| 121 // frames in the queue. | 121 // frames in the queue. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 | 156 |
| 157 test::DirectTransport sender_transport(sender_call_.get()); | 157 test::DirectTransport sender_transport(sender_call_.get()); |
| 158 test::DirectTransport receiver_transport(receiver_call_.get()); | 158 test::DirectTransport receiver_transport(receiver_call_.get()); |
| 159 sender_transport.SetReceiver(receiver_call_->Receiver()); | 159 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 160 receiver_transport.SetReceiver(sender_call_->Receiver()); | 160 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 161 | 161 |
| 162 CreateSendConfig(1, &sender_transport); | 162 CreateSendConfig(1, &sender_transport); |
| 163 CreateMatchingReceiveConfigs(&receiver_transport); | 163 CreateMatchingReceiveConfigs(&receiver_transport); |
| 164 | 164 |
| 165 TestFrameCallback pre_render_callback; | 165 TestFrameCallback pre_render_callback; |
| 166 receive_configs_[0].pre_render_callback = &pre_render_callback; | 166 video_receive_configs_[0].pre_render_callback = &pre_render_callback; |
| 167 receive_configs_[0].renderer = &renderer; | 167 video_receive_configs_[0].renderer = &renderer; |
| 168 | 168 |
| 169 CreateStreams(); | 169 CreateStreams(); |
| 170 Start(); | 170 Start(); |
| 171 | 171 |
| 172 // Create frames that are smaller than the send width/height, this is done to | 172 // Create frames that are smaller than the send width/height, this is done to |
| 173 // check that the callbacks are done after processing video. | 173 // check that the callbacks are done after processing video. |
| 174 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 174 rtc::scoped_ptr<test::FrameGenerator> frame_generator( |
| 175 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight)); | 175 test::FrameGenerator::CreateChromaGenerator(kWidth, kHeight)); |
| 176 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); | 176 video_send_stream_->Input()->IncomingCapturedFrame( |
| 177 *frame_generator->NextFrame()); |
| 177 EXPECT_TRUE(pre_render_callback.Wait()) | 178 EXPECT_TRUE(pre_render_callback.Wait()) |
| 178 << "Timed out while waiting for pre-render callback."; | 179 << "Timed out while waiting for pre-render callback."; |
| 179 EXPECT_TRUE(renderer.Wait()) | 180 EXPECT_TRUE(renderer.Wait()) |
| 180 << "Timed out while waiting for the frame to render."; | 181 << "Timed out while waiting for the frame to render."; |
| 181 | 182 |
| 182 Stop(); | 183 Stop(); |
| 183 | 184 |
| 184 sender_transport.StopSending(); | 185 sender_transport.StopSending(); |
| 185 receiver_transport.StopSending(); | 186 receiver_transport.StopSending(); |
| 186 | 187 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 205 | 206 |
| 206 CreateCalls(Call::Config(), Call::Config()); | 207 CreateCalls(Call::Config(), Call::Config()); |
| 207 | 208 |
| 208 test::DirectTransport sender_transport(sender_call_.get()); | 209 test::DirectTransport sender_transport(sender_call_.get()); |
| 209 test::DirectTransport receiver_transport(receiver_call_.get()); | 210 test::DirectTransport receiver_transport(receiver_call_.get()); |
| 210 sender_transport.SetReceiver(receiver_call_->Receiver()); | 211 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 211 receiver_transport.SetReceiver(sender_call_->Receiver()); | 212 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 212 | 213 |
| 213 CreateSendConfig(1, &sender_transport); | 214 CreateSendConfig(1, &sender_transport); |
| 214 CreateMatchingReceiveConfigs(&receiver_transport); | 215 CreateMatchingReceiveConfigs(&receiver_transport); |
| 215 receive_configs_[0].renderer = &renderer; | 216 video_receive_configs_[0].renderer = &renderer; |
| 216 | 217 |
| 217 CreateStreams(); | 218 CreateStreams(); |
| 218 Start(); | 219 Start(); |
| 219 | 220 |
| 220 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 221 rtc::scoped_ptr<test::FrameGenerator> frame_generator( |
| 221 test::FrameGenerator::CreateChromaGenerator( | 222 test::FrameGenerator::CreateChromaGenerator( |
| 222 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); | 223 video_encoder_config_.streams[0].width, |
| 223 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); | 224 video_encoder_config_.streams[0].height)); |
| 225 video_send_stream_->Input()->IncomingCapturedFrame( |
| 226 *frame_generator->NextFrame()); |
| 224 | 227 |
| 225 EXPECT_TRUE(renderer.Wait()) | 228 EXPECT_TRUE(renderer.Wait()) |
| 226 << "Timed out while waiting for the frame to render."; | 229 << "Timed out while waiting for the frame to render."; |
| 227 | 230 |
| 228 Stop(); | 231 Stop(); |
| 229 | 232 |
| 230 sender_transport.StopSending(); | 233 sender_transport.StopSending(); |
| 231 receiver_transport.StopSending(); | 234 receiver_transport.StopSending(); |
| 232 | 235 |
| 233 DestroyStreams(); | 236 DestroyStreams(); |
| 234 } | 237 } |
| 235 | 238 |
| 236 TEST_F(EndToEndTest, SendsAndReceivesVP9) { | 239 TEST_F(EndToEndTest, SendsAndReceivesVP9) { |
| 237 class VP9Observer : public test::EndToEndTest, public VideoRenderer { | 240 class VP9Observer : public test::EndToEndTest, public VideoRenderer { |
| 238 public: | 241 public: |
| 239 VP9Observer() | 242 VP9Observer() |
| 240 : EndToEndTest(2 * kDefaultTimeoutMs), | 243 : EndToEndTest(2 * kDefaultTimeoutMs), |
| 241 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), | 244 encoder_(VideoEncoder::Create(VideoEncoder::kVp9)), |
| 242 decoder_(VP9Decoder::Create()), | 245 decoder_(VP9Decoder::Create()), |
| 243 frame_counter_(0) {} | 246 frame_counter_(0) {} |
| 244 | 247 |
| 245 void PerformTest() override { | 248 void PerformTest() override { |
| 246 EXPECT_TRUE(Wait()) | 249 EXPECT_TRUE(Wait()) |
| 247 << "Timed out while waiting for enough frames to be decoded."; | 250 << "Timed out while waiting for enough frames to be decoded."; |
| 248 } | 251 } |
| 249 | 252 |
| 250 void ModifyConfigs(VideoSendStream::Config* send_config, | 253 void ModifyVideoConfigs( |
| 251 std::vector<VideoReceiveStream::Config>* receive_configs, | 254 VideoSendStream::Config* send_config, |
| 252 VideoEncoderConfig* encoder_config) override { | 255 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 256 VideoEncoderConfig* encoder_config) override { |
| 253 send_config->encoder_settings.encoder = encoder_.get(); | 257 send_config->encoder_settings.encoder = encoder_.get(); |
| 254 send_config->encoder_settings.payload_name = "VP9"; | 258 send_config->encoder_settings.payload_name = "VP9"; |
| 255 send_config->encoder_settings.payload_type = 124; | 259 send_config->encoder_settings.payload_type = 124; |
| 256 encoder_config->streams[0].min_bitrate_bps = 50000; | 260 encoder_config->streams[0].min_bitrate_bps = 50000; |
| 257 encoder_config->streams[0].target_bitrate_bps = | 261 encoder_config->streams[0].target_bitrate_bps = |
| 258 encoder_config->streams[0].max_bitrate_bps = 2000000; | 262 encoder_config->streams[0].max_bitrate_bps = 2000000; |
| 259 | 263 |
| 260 (*receive_configs)[0].renderer = this; | 264 (*receive_configs)[0].renderer = this; |
| 261 (*receive_configs)[0].decoders.resize(1); | 265 (*receive_configs)[0].decoders.resize(1); |
| 262 (*receive_configs)[0].decoders[0].payload_type = | 266 (*receive_configs)[0].decoders[0].payload_type = |
| (...skipping 27 matching lines...) Expand all Loading... |
| 290 H264Observer() | 294 H264Observer() |
| 291 : EndToEndTest(2 * kDefaultTimeoutMs), | 295 : EndToEndTest(2 * kDefaultTimeoutMs), |
| 292 fake_encoder_(Clock::GetRealTimeClock()), | 296 fake_encoder_(Clock::GetRealTimeClock()), |
| 293 frame_counter_(0) {} | 297 frame_counter_(0) {} |
| 294 | 298 |
| 295 void PerformTest() override { | 299 void PerformTest() override { |
| 296 EXPECT_TRUE(Wait()) | 300 EXPECT_TRUE(Wait()) |
| 297 << "Timed out while waiting for enough frames to be decoded."; | 301 << "Timed out while waiting for enough frames to be decoded."; |
| 298 } | 302 } |
| 299 | 303 |
| 300 void ModifyConfigs(VideoSendStream::Config* send_config, | 304 void ModifyVideoConfigs( |
| 301 std::vector<VideoReceiveStream::Config>* receive_configs, | 305 VideoSendStream::Config* send_config, |
| 302 VideoEncoderConfig* encoder_config) override { | 306 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 307 VideoEncoderConfig* encoder_config) override { |
| 303 send_config->rtp.nack.rtp_history_ms = | 308 send_config->rtp.nack.rtp_history_ms = |
| 304 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 309 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 305 send_config->encoder_settings.encoder = &fake_encoder_; | 310 send_config->encoder_settings.encoder = &fake_encoder_; |
| 306 send_config->encoder_settings.payload_name = "H264"; | 311 send_config->encoder_settings.payload_name = "H264"; |
| 307 send_config->encoder_settings.payload_type = kFakeSendPayloadType; | 312 send_config->encoder_settings.payload_type = kFakeSendPayloadType; |
| 308 encoder_config->streams[0].min_bitrate_bps = 50000; | 313 encoder_config->streams[0].min_bitrate_bps = 50000; |
| 309 encoder_config->streams[0].target_bitrate_bps = | 314 encoder_config->streams[0].target_bitrate_bps = |
| 310 encoder_config->streams[0].max_bitrate_bps = 2000000; | 315 encoder_config->streams[0].max_bitrate_bps = 2000000; |
| 311 | 316 |
| 312 (*receive_configs)[0].renderer = this; | 317 (*receive_configs)[0].renderer = this; |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { | 427 while (packet_type != RTCPUtility::RTCPPacketTypes::kInvalid) { |
| 423 if (packet_type == RTCPUtility::RTCPPacketTypes::kRtpfbNack) { | 428 if (packet_type == RTCPUtility::RTCPPacketTypes::kRtpfbNack) { |
| 424 --nacks_left_; | 429 --nacks_left_; |
| 425 break; | 430 break; |
| 426 } | 431 } |
| 427 packet_type = parser.Iterate(); | 432 packet_type = parser.Iterate(); |
| 428 } | 433 } |
| 429 return SEND_PACKET; | 434 return SEND_PACKET; |
| 430 } | 435 } |
| 431 | 436 |
| 432 void ModifyConfigs(VideoSendStream::Config* send_config, | 437 void ModifyVideoConfigs( |
| 433 std::vector<VideoReceiveStream::Config>* receive_configs, | 438 VideoSendStream::Config* send_config, |
| 434 VideoEncoderConfig* encoder_config) override { | 439 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 440 VideoEncoderConfig* encoder_config) override { |
| 435 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 441 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 436 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 442 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 437 } | 443 } |
| 438 | 444 |
| 439 void PerformTest() override { | 445 void PerformTest() override { |
| 440 EXPECT_TRUE(Wait()) | 446 EXPECT_TRUE(Wait()) |
| 441 << "Timed out waiting for packets to be NACKed, retransmitted and " | 447 << "Timed out waiting for packets to be NACKed, retransmitted and " |
| 442 "rendered."; | 448 "rendered."; |
| 443 } | 449 } |
| 444 | 450 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 518 } | 524 } |
| 519 | 525 |
| 520 bool IsTextureSupported() const override { return false; } | 526 bool IsTextureSupported() const override { return false; } |
| 521 | 527 |
| 522 enum { | 528 enum { |
| 523 kFirstPacket, | 529 kFirstPacket, |
| 524 kDropEveryOtherPacketUntilFec, | 530 kDropEveryOtherPacketUntilFec, |
| 525 kDropNextMediaPacket, | 531 kDropNextMediaPacket, |
| 526 } state_; | 532 } state_; |
| 527 | 533 |
| 528 void ModifyConfigs(VideoSendStream::Config* send_config, | 534 void ModifyVideoConfigs( |
| 529 std::vector<VideoReceiveStream::Config>* receive_configs, | 535 VideoSendStream::Config* send_config, |
| 530 VideoEncoderConfig* encoder_config) override { | 536 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 537 VideoEncoderConfig* encoder_config) override { |
| 531 // TODO(pbos): Run this test with combined NACK/FEC enabled as well. | 538 // TODO(pbos): Run this test with combined NACK/FEC enabled as well. |
| 532 // int rtp_history_ms = 1000; | 539 // int rtp_history_ms = 1000; |
| 533 // (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms; | 540 // (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms; |
| 534 // send_config->rtp.nack.rtp_history_ms = rtp_history_ms; | 541 // send_config->rtp.nack.rtp_history_ms = rtp_history_ms; |
| 535 send_config->rtp.fec.red_payload_type = kRedPayloadType; | 542 send_config->rtp.fec.red_payload_type = kRedPayloadType; |
| 536 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 543 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 537 | 544 |
| 538 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; | 545 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; |
| 539 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 546 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 540 (*receive_configs)[0].renderer = this; | 547 (*receive_configs)[0].renderer = this; |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 | 641 |
| 635 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate | 642 // TODO(holmer): Investigate why we don't send FEC packets when the bitrate |
| 636 // is 10 kbps. | 643 // is 10 kbps. |
| 637 Call::Config GetSenderCallConfig() override { | 644 Call::Config GetSenderCallConfig() override { |
| 638 Call::Config config; | 645 Call::Config config; |
| 639 const int kMinBitrateBps = 30000; | 646 const int kMinBitrateBps = 30000; |
| 640 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; | 647 config.bitrate_config.min_bitrate_bps = kMinBitrateBps; |
| 641 return config; | 648 return config; |
| 642 } | 649 } |
| 643 | 650 |
| 644 void ModifyConfigs(VideoSendStream::Config* send_config, | 651 void ModifyVideoConfigs( |
| 645 std::vector<VideoReceiveStream::Config>* receive_configs, | 652 VideoSendStream::Config* send_config, |
| 646 VideoEncoderConfig* encoder_config) override { | 653 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 654 VideoEncoderConfig* encoder_config) override { |
| 647 // Configure hybrid NACK/FEC. | 655 // Configure hybrid NACK/FEC. |
| 648 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 656 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 649 send_config->rtp.fec.red_payload_type = kRedPayloadType; | 657 send_config->rtp.fec.red_payload_type = kRedPayloadType; |
| 650 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 658 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 651 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 659 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 652 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; | 660 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; |
| 653 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 661 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 654 } | 662 } |
| 655 | 663 |
| 656 void PerformTest() override { | 664 void PerformTest() override { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 } | 741 } |
| 734 | 742 |
| 735 void FrameCallback(VideoFrame* frame) override { | 743 void FrameCallback(VideoFrame* frame) override { |
| 736 rtc::CritScope lock(&crit_); | 744 rtc::CritScope lock(&crit_); |
| 737 if (frame->timestamp() == retransmitted_timestamp_) { | 745 if (frame->timestamp() == retransmitted_timestamp_) { |
| 738 EXPECT_TRUE(frame_retransmitted_); | 746 EXPECT_TRUE(frame_retransmitted_); |
| 739 observation_complete_.Set(); | 747 observation_complete_.Set(); |
| 740 } | 748 } |
| 741 } | 749 } |
| 742 | 750 |
| 743 void ModifyConfigs(VideoSendStream::Config* send_config, | 751 void ModifyVideoConfigs( |
| 744 std::vector<VideoReceiveStream::Config>* receive_configs, | 752 VideoSendStream::Config* send_config, |
| 745 VideoEncoderConfig* encoder_config) override { | 753 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 754 VideoEncoderConfig* encoder_config) override { |
| 746 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 755 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 747 (*receive_configs)[0].pre_render_callback = this; | 756 (*receive_configs)[0].pre_render_callback = this; |
| 748 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 757 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 749 | 758 |
| 750 if (payload_type_ == kRedPayloadType) { | 759 if (payload_type_ == kRedPayloadType) { |
| 751 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 760 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 752 send_config->rtp.fec.red_payload_type = kRedPayloadType; | 761 send_config->rtp.fec.red_payload_type = kRedPayloadType; |
| 753 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; | 762 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; |
| 754 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 763 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 755 } | 764 } |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 864 CreateCalls(Call::Config(), Call::Config()); | 873 CreateCalls(Call::Config(), Call::Config()); |
| 865 | 874 |
| 866 test::DirectTransport sender_transport(sender_call_.get()); | 875 test::DirectTransport sender_transport(sender_call_.get()); |
| 867 test::DirectTransport receiver_transport(receiver_call_.get()); | 876 test::DirectTransport receiver_transport(receiver_call_.get()); |
| 868 sender_transport.SetReceiver(receiver_call_->Receiver()); | 877 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 869 receiver_transport.SetReceiver(sender_call_->Receiver()); | 878 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 870 | 879 |
| 871 CreateSendConfig(1, &sender_transport); | 880 CreateSendConfig(1, &sender_transport); |
| 872 rtc::scoped_ptr<VideoEncoder> encoder( | 881 rtc::scoped_ptr<VideoEncoder> encoder( |
| 873 VideoEncoder::Create(VideoEncoder::kVp8)); | 882 VideoEncoder::Create(VideoEncoder::kVp8)); |
| 874 send_config_.encoder_settings.encoder = encoder.get(); | 883 video_send_config_.encoder_settings.encoder = encoder.get(); |
| 875 send_config_.encoder_settings.payload_name = "VP8"; | 884 video_send_config_.encoder_settings.payload_name = "VP8"; |
| 876 ASSERT_EQ(1u, encoder_config_.streams.size()) << "Test setup error."; | 885 ASSERT_EQ(1u, video_encoder_config_.streams.size()) << "Test setup error."; |
| 877 encoder_config_.streams[0].width = kWidth; | 886 video_encoder_config_.streams[0].width = kWidth; |
| 878 encoder_config_.streams[0].height = kHeight; | 887 video_encoder_config_.streams[0].height = kHeight; |
| 879 send_config_.pre_encode_callback = &pre_encode_callback; | 888 video_send_config_.pre_encode_callback = &pre_encode_callback; |
| 880 | 889 |
| 881 CreateMatchingReceiveConfigs(&receiver_transport); | 890 CreateMatchingReceiveConfigs(&receiver_transport); |
| 882 receive_configs_[0].pre_render_callback = &pre_render_callback; | 891 video_receive_configs_[0].pre_render_callback = &pre_render_callback; |
| 883 receive_configs_[0].renderer = &renderer; | 892 video_receive_configs_[0].renderer = &renderer; |
| 884 | 893 |
| 885 CreateStreams(); | 894 CreateStreams(); |
| 886 Start(); | 895 Start(); |
| 887 | 896 |
| 888 // Create frames that are smaller than the send width/height, this is done to | 897 // Create frames that are smaller than the send width/height, this is done to |
| 889 // check that the callbacks are done after processing video. | 898 // check that the callbacks are done after processing video. |
| 890 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 899 rtc::scoped_ptr<test::FrameGenerator> frame_generator( |
| 891 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); | 900 test::FrameGenerator::CreateChromaGenerator(kWidth / 2, kHeight / 2)); |
| 892 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); | 901 video_send_stream_->Input()->IncomingCapturedFrame( |
| 902 *frame_generator->NextFrame()); |
| 893 | 903 |
| 894 EXPECT_TRUE(pre_encode_callback.Wait()) | 904 EXPECT_TRUE(pre_encode_callback.Wait()) |
| 895 << "Timed out while waiting for pre-encode callback."; | 905 << "Timed out while waiting for pre-encode callback."; |
| 896 EXPECT_TRUE(pre_render_callback.Wait()) | 906 EXPECT_TRUE(pre_render_callback.Wait()) |
| 897 << "Timed out while waiting for pre-render callback."; | 907 << "Timed out while waiting for pre-render callback."; |
| 898 EXPECT_TRUE(renderer.Wait()) | 908 EXPECT_TRUE(renderer.Wait()) |
| 899 << "Timed out while waiting for the frame to render."; | 909 << "Timed out while waiting for the frame to render."; |
| 900 | 910 |
| 901 Stop(); | 911 Stop(); |
| 902 | 912 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 963 if (received_pli_ && | 973 if (received_pli_ && |
| 964 video_frame.timestamp() > highest_dropped_timestamp_) { | 974 video_frame.timestamp() > highest_dropped_timestamp_) { |
| 965 observation_complete_.Set(); | 975 observation_complete_.Set(); |
| 966 } | 976 } |
| 967 if (!received_pli_) | 977 if (!received_pli_) |
| 968 frames_to_drop_ = kPacketsToDrop; | 978 frames_to_drop_ = kPacketsToDrop; |
| 969 } | 979 } |
| 970 | 980 |
| 971 bool IsTextureSupported() const override { return false; } | 981 bool IsTextureSupported() const override { return false; } |
| 972 | 982 |
| 973 void ModifyConfigs(VideoSendStream::Config* send_config, | 983 void ModifyVideoConfigs( |
| 974 std::vector<VideoReceiveStream::Config>* receive_configs, | 984 VideoSendStream::Config* send_config, |
| 975 VideoEncoderConfig* encoder_config) override { | 985 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 986 VideoEncoderConfig* encoder_config) override { |
| 976 send_config->rtp.nack.rtp_history_ms = rtp_history_ms_; | 987 send_config->rtp.nack.rtp_history_ms = rtp_history_ms_; |
| 977 (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms_; | 988 (*receive_configs)[0].rtp.nack.rtp_history_ms = rtp_history_ms_; |
| 978 (*receive_configs)[0].renderer = this; | 989 (*receive_configs)[0].renderer = this; |
| 979 } | 990 } |
| 980 | 991 |
| 981 void PerformTest() override { | 992 void PerformTest() override { |
| 982 EXPECT_TRUE(Wait()) << "Timed out waiting for PLI to be " | 993 EXPECT_TRUE(Wait()) << "Timed out waiting for PLI to be " |
| 983 "received and a frame to be " | 994 "received and a frame to be " |
| 984 "rendered afterwards."; | 995 "rendered afterwards."; |
| 985 } | 996 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 send_transport.SetReceiver(&input_observer); | 1051 send_transport.SetReceiver(&input_observer); |
| 1041 receive_transport.SetReceiver(sender_call_->Receiver()); | 1052 receive_transport.SetReceiver(sender_call_->Receiver()); |
| 1042 | 1053 |
| 1043 CreateSendConfig(1, &send_transport); | 1054 CreateSendConfig(1, &send_transport); |
| 1044 CreateMatchingReceiveConfigs(&receive_transport); | 1055 CreateMatchingReceiveConfigs(&receive_transport); |
| 1045 | 1056 |
| 1046 CreateStreams(); | 1057 CreateStreams(); |
| 1047 CreateFrameGeneratorCapturer(); | 1058 CreateFrameGeneratorCapturer(); |
| 1048 Start(); | 1059 Start(); |
| 1049 | 1060 |
| 1050 receiver_call_->DestroyVideoReceiveStream(receive_streams_[0]); | 1061 receiver_call_->DestroyVideoReceiveStream(video_receive_streams_[0]); |
| 1051 receive_streams_.clear(); | 1062 video_receive_streams_.clear(); |
| 1052 | 1063 |
| 1053 // Wait() waits for a received packet. | 1064 // Wait() waits for a received packet. |
| 1054 EXPECT_TRUE(input_observer.Wait()); | 1065 EXPECT_TRUE(input_observer.Wait()); |
| 1055 | 1066 |
| 1056 Stop(); | 1067 Stop(); |
| 1057 | 1068 |
| 1058 DestroyStreams(); | 1069 DestroyStreams(); |
| 1059 | 1070 |
| 1060 send_transport.StopSending(); | 1071 send_transport.StopSending(); |
| 1061 receive_transport.StopSending(); | 1072 receive_transport.StopSending(); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1112 observation_complete_.Set(); | 1123 observation_complete_.Set(); |
| 1113 break; | 1124 break; |
| 1114 case RtcpMode::kOff: | 1125 case RtcpMode::kOff: |
| 1115 RTC_NOTREACHED(); | 1126 RTC_NOTREACHED(); |
| 1116 break; | 1127 break; |
| 1117 } | 1128 } |
| 1118 | 1129 |
| 1119 return SEND_PACKET; | 1130 return SEND_PACKET; |
| 1120 } | 1131 } |
| 1121 | 1132 |
| 1122 void ModifyConfigs(VideoSendStream::Config* send_config, | 1133 void ModifyVideoConfigs( |
| 1123 std::vector<VideoReceiveStream::Config>* receive_configs, | 1134 VideoSendStream::Config* send_config, |
| 1124 VideoEncoderConfig* encoder_config) override { | 1135 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1136 VideoEncoderConfig* encoder_config) override { |
| 1125 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1137 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 1126 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1138 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 1127 (*receive_configs)[0].rtp.rtcp_mode = rtcp_mode_; | 1139 (*receive_configs)[0].rtp.rtcp_mode = rtcp_mode_; |
| 1128 } | 1140 } |
| 1129 | 1141 |
| 1130 void PerformTest() override { | 1142 void PerformTest() override { |
| 1131 EXPECT_TRUE(Wait()) | 1143 EXPECT_TRUE(Wait()) |
| 1132 << (rtcp_mode_ == RtcpMode::kCompound | 1144 << (rtcp_mode_ == RtcpMode::kCompound |
| 1133 ? "Timed out before observing enough compound packets." | 1145 ? "Timed out before observing enough compound packets." |
| 1134 : "Timed out before receiving a non-compound RTCP packet."); | 1146 : "Timed out before receiving a non-compound RTCP packet."); |
| (...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1643 | 1655 |
| 1644 CreateCalls(Call::Config(), Call::Config()); | 1656 CreateCalls(Call::Config(), Call::Config()); |
| 1645 | 1657 |
| 1646 test::DirectTransport sender_transport(sender_call_.get()); | 1658 test::DirectTransport sender_transport(sender_call_.get()); |
| 1647 test::DirectTransport receiver_transport(receiver_call_.get()); | 1659 test::DirectTransport receiver_transport(receiver_call_.get()); |
| 1648 sender_transport.SetReceiver(receiver_call_->Receiver()); | 1660 sender_transport.SetReceiver(receiver_call_->Receiver()); |
| 1649 receiver_transport.SetReceiver(sender_call_->Receiver()); | 1661 receiver_transport.SetReceiver(sender_call_->Receiver()); |
| 1650 | 1662 |
| 1651 CreateSendConfig(1, &sender_transport); | 1663 CreateSendConfig(1, &sender_transport); |
| 1652 CreateMatchingReceiveConfigs(&receiver_transport); | 1664 CreateMatchingReceiveConfigs(&receiver_transport); |
| 1653 send_config_.post_encode_callback = &post_encode_observer; | 1665 video_send_config_.post_encode_callback = &post_encode_observer; |
| 1654 receive_configs_[0].pre_decode_callback = &pre_decode_observer; | 1666 video_receive_configs_[0].pre_decode_callback = &pre_decode_observer; |
| 1655 | 1667 |
| 1656 CreateStreams(); | 1668 CreateStreams(); |
| 1657 Start(); | 1669 Start(); |
| 1658 | 1670 |
| 1659 rtc::scoped_ptr<test::FrameGenerator> frame_generator( | 1671 rtc::scoped_ptr<test::FrameGenerator> frame_generator( |
| 1660 test::FrameGenerator::CreateChromaGenerator( | 1672 test::FrameGenerator::CreateChromaGenerator( |
| 1661 encoder_config_.streams[0].width, encoder_config_.streams[0].height)); | 1673 video_encoder_config_.streams[0].width, |
| 1662 send_stream_->Input()->IncomingCapturedFrame(*frame_generator->NextFrame()); | 1674 video_encoder_config_.streams[0].height)); |
| 1675 video_send_stream_->Input()->IncomingCapturedFrame( |
| 1676 *frame_generator->NextFrame()); |
| 1663 | 1677 |
| 1664 EXPECT_TRUE(post_encode_observer.Wait()) | 1678 EXPECT_TRUE(post_encode_observer.Wait()) |
| 1665 << "Timed out while waiting for send-side encoded-frame callback."; | 1679 << "Timed out while waiting for send-side encoded-frame callback."; |
| 1666 | 1680 |
| 1667 EXPECT_TRUE(pre_decode_observer.Wait()) | 1681 EXPECT_TRUE(pre_decode_observer.Wait()) |
| 1668 << "Timed out while waiting for pre-decode encoded-frame callback."; | 1682 << "Timed out while waiting for pre-decode encoded-frame callback."; |
| 1669 | 1683 |
| 1670 post_encode_observer.ExpectEqualFrames(pre_decode_observer); | 1684 post_encode_observer.ExpectEqualFrames(pre_decode_observer); |
| 1671 | 1685 |
| 1672 Stop(); | 1686 Stop(); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1805 stats.substreams.begin(); it != stats.substreams.end(); ++it) { | 1819 stats.substreams.begin(); it != stats.substreams.end(); ++it) { |
| 1806 const VideoSendStream::StreamStats& stream_stats = it->second; | 1820 const VideoSendStream::StreamStats& stream_stats = it->second; |
| 1807 send_stream_nack_packets += | 1821 send_stream_nack_packets += |
| 1808 stream_stats.rtcp_packet_type_counts.nack_packets; | 1822 stream_stats.rtcp_packet_type_counts.nack_packets; |
| 1809 } | 1823 } |
| 1810 for (size_t i = 0; i < receive_streams_.size(); ++i) { | 1824 for (size_t i = 0; i < receive_streams_.size(); ++i) { |
| 1811 VideoReceiveStream::Stats stats = receive_streams_[i]->GetStats(); | 1825 VideoReceiveStream::Stats stats = receive_streams_[i]->GetStats(); |
| 1812 receive_stream_nack_packets += | 1826 receive_stream_nack_packets += |
| 1813 stats.rtcp_packet_type_counts.nack_packets; | 1827 stats.rtcp_packet_type_counts.nack_packets; |
| 1814 } | 1828 } |
| 1815 if (send_stream_nack_packets >= 1 && receive_stream_nack_packets >= 1) { | 1829 if (send_stream_nack_packets >= 1 && |
| 1830 receive_stream_nack_packets >= 1) { |
| 1816 // NACK packet sent on receive stream and received on sent stream. | 1831 // NACK packet sent on receive stream and received on sent stream. |
| 1817 if (MinMetricRunTimePassed()) | 1832 if (MinMetricRunTimePassed()) |
| 1818 observation_complete_.Set(); | 1833 observation_complete_.Set(); |
| 1819 } | 1834 } |
| 1820 } | 1835 } |
| 1821 | 1836 |
| 1822 bool MinMetricRunTimePassed() { | 1837 bool MinMetricRunTimePassed() { |
| 1823 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); | 1838 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); |
| 1824 if (start_runtime_ms_ == -1) { | 1839 if (start_runtime_ms_ == -1) { |
| 1825 start_runtime_ms_ = now; | 1840 start_runtime_ms_ = now; |
| 1826 return false; | 1841 return false; |
| 1827 } | 1842 } |
| 1828 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; | 1843 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; |
| 1829 return elapsed_sec > metrics::kMinRunTimeInSeconds; | 1844 return elapsed_sec > metrics::kMinRunTimeInSeconds; |
| 1830 } | 1845 } |
| 1831 | 1846 |
| 1832 void ModifyConfigs(VideoSendStream::Config* send_config, | 1847 void ModifyVideoConfigs( |
| 1833 std::vector<VideoReceiveStream::Config>* receive_configs, | 1848 VideoSendStream::Config* send_config, |
| 1834 VideoEncoderConfig* encoder_config) override { | 1849 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1850 VideoEncoderConfig* encoder_config) override { |
| 1835 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1851 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 1836 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1852 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 1837 } | 1853 } |
| 1838 | 1854 |
| 1839 void OnStreamsCreated( | 1855 void OnVideoStreamsCreated( |
| 1840 VideoSendStream* send_stream, | 1856 VideoSendStream* send_stream, |
| 1841 const std::vector<VideoReceiveStream*>& receive_streams) override { | 1857 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 1842 send_stream_ = send_stream; | 1858 send_stream_ = send_stream; |
| 1843 receive_streams_ = receive_streams; | 1859 receive_streams_ = receive_streams; |
| 1844 } | 1860 } |
| 1845 | 1861 |
| 1846 void PerformTest() override { | 1862 void PerformTest() override { |
| 1847 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed."; | 1863 EXPECT_TRUE(Wait()) << "Timed out waiting for packet to be NACKed."; |
| 1848 } | 1864 } |
| 1849 | 1865 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1900 bool MinMetricRunTimePassed() { | 1916 bool MinMetricRunTimePassed() { |
| 1901 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); | 1917 int64_t now = Clock::GetRealTimeClock()->TimeInMilliseconds(); |
| 1902 if (start_runtime_ms_ == -1) { | 1918 if (start_runtime_ms_ == -1) { |
| 1903 start_runtime_ms_ = now; | 1919 start_runtime_ms_ = now; |
| 1904 return false; | 1920 return false; |
| 1905 } | 1921 } |
| 1906 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; | 1922 int64_t elapsed_sec = (now - start_runtime_ms_) / 1000; |
| 1907 return elapsed_sec > metrics::kMinRunTimeInSeconds * 2; | 1923 return elapsed_sec > metrics::kMinRunTimeInSeconds * 2; |
| 1908 } | 1924 } |
| 1909 | 1925 |
| 1910 void ModifyConfigs(VideoSendStream::Config* send_config, | 1926 void ModifyVideoConfigs( |
| 1911 std::vector<VideoReceiveStream::Config>* receive_configs, | 1927 VideoSendStream::Config* send_config, |
| 1912 VideoEncoderConfig* encoder_config) override { | 1928 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 1929 VideoEncoderConfig* encoder_config) override { |
| 1913 // NACK | 1930 // NACK |
| 1914 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1931 send_config->rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 1915 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; | 1932 (*receive_configs)[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs; |
| 1916 // FEC | 1933 // FEC |
| 1917 if (use_red_) { | 1934 if (use_red_) { |
| 1918 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 1935 send_config->rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 1919 send_config->rtp.fec.red_payload_type = kRedPayloadType; | 1936 send_config->rtp.fec.red_payload_type = kRedPayloadType; |
| 1920 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; | 1937 (*receive_configs)[0].rtp.fec.red_payload_type = kRedPayloadType; |
| 1921 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; | 1938 (*receive_configs)[0].rtp.fec.ulpfec_payload_type = kUlpfecPayloadType; |
| 1922 } | 1939 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1995 "WebRTC.Video.ReceivedPacketsLostInPercent")); | 2012 "WebRTC.Video.ReceivedPacketsLostInPercent")); |
| 1996 | 2013 |
| 1997 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "InputWidthInPixels")); | 2014 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "InputWidthInPixels")); |
| 1998 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "InputHeightInPixels")); | 2015 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "InputHeightInPixels")); |
| 1999 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "SentWidthInPixels")); | 2016 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "SentWidthInPixels")); |
| 2000 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "SentHeightInPixels")); | 2017 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "SentHeightInPixels")); |
| 2001 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.ReceivedWidthInPixels")); | 2018 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.ReceivedWidthInPixels")); |
| 2002 EXPECT_EQ(1, | 2019 EXPECT_EQ(1, |
| 2003 test::NumHistogramSamples("WebRTC.Video.ReceivedHeightInPixels")); | 2020 test::NumHistogramSamples("WebRTC.Video.ReceivedHeightInPixels")); |
| 2004 | 2021 |
| 2005 EXPECT_EQ(static_cast<int>(encoder_config_.streams[0].width), | 2022 EXPECT_EQ(static_cast<int>(video_encoder_config_.streams[0].width), |
| 2006 test::LastHistogramSample(video_prefix + "InputWidthInPixels")); | 2023 test::LastHistogramSample(video_prefix + "InputWidthInPixels")); |
| 2007 EXPECT_EQ(static_cast<int>(encoder_config_.streams[0].height), | 2024 EXPECT_EQ(static_cast<int>(video_encoder_config_.streams[0].height), |
| 2008 test::LastHistogramSample(video_prefix + "InputHeightInPixels")); | 2025 test::LastHistogramSample(video_prefix + "InputHeightInPixels")); |
| 2009 EXPECT_EQ(static_cast<int>(encoder_config_.streams[0].width), | 2026 EXPECT_EQ(static_cast<int>(video_encoder_config_.streams[0].width), |
| 2010 test::LastHistogramSample(video_prefix + "SentWidthInPixels")); | 2027 test::LastHistogramSample(video_prefix + "SentWidthInPixels")); |
| 2011 EXPECT_EQ(static_cast<int>(encoder_config_.streams[0].height), | 2028 EXPECT_EQ(static_cast<int>(video_encoder_config_.streams[0].height), |
| 2012 test::LastHistogramSample(video_prefix + "SentHeightInPixels")); | 2029 test::LastHistogramSample(video_prefix + "SentHeightInPixels")); |
| 2013 EXPECT_EQ(static_cast<int>(encoder_config_.streams[0].width), | 2030 EXPECT_EQ(static_cast<int>(video_encoder_config_.streams[0].width), |
| 2014 test::LastHistogramSample("WebRTC.Video.ReceivedWidthInPixels")); | 2031 test::LastHistogramSample("WebRTC.Video.ReceivedWidthInPixels")); |
| 2015 EXPECT_EQ(static_cast<int>(encoder_config_.streams[0].height), | 2032 EXPECT_EQ(static_cast<int>(video_encoder_config_.streams[0].height), |
| 2016 test::LastHistogramSample("WebRTC.Video.ReceivedHeightInPixels")); | 2033 test::LastHistogramSample("WebRTC.Video.ReceivedHeightInPixels")); |
| 2017 | 2034 |
| 2018 EXPECT_EQ(1, | 2035 EXPECT_EQ(1, |
| 2019 test::NumHistogramSamples(video_prefix + "InputFramesPerSecond")); | 2036 test::NumHistogramSamples(video_prefix + "InputFramesPerSecond")); |
| 2020 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "SentFramesPerSecond")); | 2037 EXPECT_EQ(1, test::NumHistogramSamples(video_prefix + "SentFramesPerSecond")); |
| 2021 EXPECT_EQ(1, test::NumHistogramSamples( | 2038 EXPECT_EQ(1, test::NumHistogramSamples( |
| 2022 "WebRTC.Video.DecodedFramesPerSecond")); | 2039 "WebRTC.Video.DecodedFramesPerSecond")); |
| 2023 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.RenderFramesPerSecond")); | 2040 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.RenderFramesPerSecond")); |
| 2024 | 2041 |
| 2025 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.OnewayDelayInMs")); | 2042 EXPECT_EQ(1, test::NumHistogramSamples("WebRTC.Video.OnewayDelayInMs")); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2145 EXPECT_GT(sent_rtcp_dlrr_, 0); | 2162 EXPECT_GT(sent_rtcp_dlrr_, 0); |
| 2146 } else { | 2163 } else { |
| 2147 EXPECT_EQ(0, sent_rtcp_rrtr_); | 2164 EXPECT_EQ(0, sent_rtcp_rrtr_); |
| 2148 EXPECT_EQ(0, sent_rtcp_dlrr_); | 2165 EXPECT_EQ(0, sent_rtcp_dlrr_); |
| 2149 } | 2166 } |
| 2150 observation_complete_.Set(); | 2167 observation_complete_.Set(); |
| 2151 } | 2168 } |
| 2152 return SEND_PACKET; | 2169 return SEND_PACKET; |
| 2153 } | 2170 } |
| 2154 | 2171 |
| 2155 void ModifyConfigs(VideoSendStream::Config* send_config, | 2172 void ModifyVideoConfigs( |
| 2156 std::vector<VideoReceiveStream::Config>* receive_configs, | 2173 VideoSendStream::Config* send_config, |
| 2157 VideoEncoderConfig* encoder_config) override { | 2174 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2175 VideoEncoderConfig* encoder_config) override { |
| 2158 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; | 2176 (*receive_configs)[0].rtp.rtcp_mode = RtcpMode::kReducedSize; |
| 2159 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = | 2177 (*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = |
| 2160 enable_rrtr_; | 2178 enable_rrtr_; |
| 2161 } | 2179 } |
| 2162 | 2180 |
| 2163 void PerformTest() override { | 2181 void PerformTest() override { |
| 2164 EXPECT_TRUE(Wait()) | 2182 EXPECT_TRUE(Wait()) |
| 2165 << "Timed out while waiting for RTCP SR/RR packets to be sent."; | 2183 << "Timed out while waiting for RTCP SR/RR packets to be sent."; |
| 2166 } | 2184 } |
| 2167 | 2185 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2214 } | 2232 } |
| 2215 | 2233 |
| 2216 if (ssrcs_to_observe_ == 0) | 2234 if (ssrcs_to_observe_ == 0) |
| 2217 observation_complete_.Set(); | 2235 observation_complete_.Set(); |
| 2218 | 2236 |
| 2219 return SEND_PACKET; | 2237 return SEND_PACKET; |
| 2220 } | 2238 } |
| 2221 | 2239 |
| 2222 size_t GetNumStreams() const override { return num_ssrcs_; } | 2240 size_t GetNumStreams() const override { return num_ssrcs_; } |
| 2223 | 2241 |
| 2224 void ModifyConfigs(VideoSendStream::Config* send_config, | 2242 void ModifyVideoConfigs( |
| 2225 std::vector<VideoReceiveStream::Config>* receive_configs, | 2243 VideoSendStream::Config* send_config, |
| 2226 VideoEncoderConfig* encoder_config) override { | 2244 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2245 VideoEncoderConfig* encoder_config) override { |
| 2227 if (num_ssrcs_ > 1) { | 2246 if (num_ssrcs_ > 1) { |
| 2228 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. | 2247 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. |
| 2229 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 2248 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { |
| 2230 encoder_config->streams[i].min_bitrate_bps = 10000; | 2249 encoder_config->streams[i].min_bitrate_bps = 10000; |
| 2231 encoder_config->streams[i].target_bitrate_bps = 15000; | 2250 encoder_config->streams[i].target_bitrate_bps = 15000; |
| 2232 encoder_config->streams[i].max_bitrate_bps = 20000; | 2251 encoder_config->streams[i].max_bitrate_bps = 20000; |
| 2233 } | 2252 } |
| 2234 } | 2253 } |
| 2235 | 2254 |
| 2236 encoder_config_all_streams_ = *encoder_config; | 2255 video_encoder_config_all_streams_ = *encoder_config; |
| 2237 if (send_single_ssrc_first_) | 2256 if (send_single_ssrc_first_) |
| 2238 encoder_config->streams.resize(1); | 2257 encoder_config->streams.resize(1); |
| 2239 } | 2258 } |
| 2240 | 2259 |
| 2241 void OnStreamsCreated( | 2260 void OnVideoStreamsCreated( |
| 2242 VideoSendStream* send_stream, | 2261 VideoSendStream* send_stream, |
| 2243 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2262 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 2244 send_stream_ = send_stream; | 2263 send_stream_ = send_stream; |
| 2245 } | 2264 } |
| 2246 | 2265 |
| 2247 void PerformTest() override { | 2266 void PerformTest() override { |
| 2248 EXPECT_TRUE(Wait()) << "Timed out while waiting for " | 2267 EXPECT_TRUE(Wait()) << "Timed out while waiting for " |
| 2249 << (send_single_ssrc_first_ ? "first SSRC." | 2268 << (send_single_ssrc_first_ ? "first SSRC." |
| 2250 : "SSRCs."); | 2269 : "SSRCs."); |
| 2251 | 2270 |
| 2252 if (send_single_ssrc_first_) { | 2271 if (send_single_ssrc_first_) { |
| 2253 // Set full simulcast and continue with the rest of the SSRCs. | 2272 // Set full simulcast and continue with the rest of the SSRCs. |
| 2254 send_stream_->ReconfigureVideoEncoder(encoder_config_all_streams_); | 2273 send_stream_->ReconfigureVideoEncoder( |
| 2274 video_encoder_config_all_streams_); |
| 2255 EXPECT_TRUE(Wait()) << "Timed out while waiting on additional SSRCs."; | 2275 EXPECT_TRUE(Wait()) << "Timed out while waiting on additional SSRCs."; |
| 2256 } | 2276 } |
| 2257 } | 2277 } |
| 2258 | 2278 |
| 2259 private: | 2279 private: |
| 2260 std::map<uint32_t, bool> valid_ssrcs_; | 2280 std::map<uint32_t, bool> valid_ssrcs_; |
| 2261 std::map<uint32_t, bool> is_observed_; | 2281 std::map<uint32_t, bool> is_observed_; |
| 2262 | 2282 |
| 2263 const size_t num_ssrcs_; | 2283 const size_t num_ssrcs_; |
| 2264 const bool send_single_ssrc_first_; | 2284 const bool send_single_ssrc_first_; |
| 2265 | 2285 |
| 2266 size_t ssrcs_to_observe_; | 2286 size_t ssrcs_to_observe_; |
| 2267 bool expect_single_ssrc_; | 2287 bool expect_single_ssrc_; |
| 2268 | 2288 |
| 2269 VideoSendStream* send_stream_; | 2289 VideoSendStream* send_stream_; |
| 2270 VideoEncoderConfig encoder_config_all_streams_; | 2290 VideoEncoderConfig video_encoder_config_all_streams_; |
| 2271 } test(kSendSsrcs, num_ssrcs, send_single_ssrc_first); | 2291 } test(kSendSsrcs, num_ssrcs, send_single_ssrc_first); |
| 2272 | 2292 |
| 2273 RunBaseTest(&test, FakeNetworkPipe::Config()); | 2293 RunBaseTest(&test, FakeNetworkPipe::Config()); |
| 2274 } | 2294 } |
| 2275 | 2295 |
| 2276 TEST_F(EndToEndTest, ReportsSetEncoderRates) { | 2296 TEST_F(EndToEndTest, ReportsSetEncoderRates) { |
| 2277 class EncoderRateStatsTest : public test::EndToEndTest, | 2297 class EncoderRateStatsTest : public test::EndToEndTest, |
| 2278 public test::FakeEncoder { | 2298 public test::FakeEncoder { |
| 2279 public: | 2299 public: |
| 2280 EncoderRateStatsTest() | 2300 EncoderRateStatsTest() |
| 2281 : EndToEndTest(kDefaultTimeoutMs), | 2301 : EndToEndTest(kDefaultTimeoutMs), |
| 2282 FakeEncoder(Clock::GetRealTimeClock()), | 2302 FakeEncoder(Clock::GetRealTimeClock()), |
| 2283 send_stream_(nullptr), | 2303 send_stream_(nullptr), |
| 2284 bitrate_kbps_(0) {} | 2304 bitrate_kbps_(0) {} |
| 2285 | 2305 |
| 2286 void OnStreamsCreated( | 2306 void OnVideoStreamsCreated( |
| 2287 VideoSendStream* send_stream, | 2307 VideoSendStream* send_stream, |
| 2288 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2308 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 2289 send_stream_ = send_stream; | 2309 send_stream_ = send_stream; |
| 2290 } | 2310 } |
| 2291 | 2311 |
| 2292 void ModifyConfigs(VideoSendStream::Config* send_config, | 2312 void ModifyVideoConfigs( |
| 2293 std::vector<VideoReceiveStream::Config>* receive_configs, | 2313 VideoSendStream::Config* send_config, |
| 2294 VideoEncoderConfig* encoder_config) override { | 2314 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2315 VideoEncoderConfig* encoder_config) override { |
| 2295 send_config->encoder_settings.encoder = this; | 2316 send_config->encoder_settings.encoder = this; |
| 2296 } | 2317 } |
| 2297 | 2318 |
| 2298 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { | 2319 int32_t SetRates(uint32_t new_target_bitrate, uint32_t framerate) override { |
| 2299 // Make sure not to trigger on any default zero bitrates. | 2320 // Make sure not to trigger on any default zero bitrates. |
| 2300 if (new_target_bitrate == 0) | 2321 if (new_target_bitrate == 0) |
| 2301 return 0; | 2322 return 0; |
| 2302 rtc::CritScope lock(&crit_); | 2323 rtc::CritScope lock(&crit_); |
| 2303 bitrate_kbps_ = new_target_bitrate; | 2324 bitrate_kbps_ = new_target_bitrate; |
| 2304 observation_complete_.Set(); | 2325 observation_complete_.Set(); |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2509 } | 2530 } |
| 2510 return true; | 2531 return true; |
| 2511 } | 2532 } |
| 2512 | 2533 |
| 2513 Call::Config GetSenderCallConfig() override { | 2534 Call::Config GetSenderCallConfig() override { |
| 2514 Call::Config config = EndToEndTest::GetSenderCallConfig(); | 2535 Call::Config config = EndToEndTest::GetSenderCallConfig(); |
| 2515 config.bitrate_config.start_bitrate_bps = kStartBitrateBps; | 2536 config.bitrate_config.start_bitrate_bps = kStartBitrateBps; |
| 2516 return config; | 2537 return config; |
| 2517 } | 2538 } |
| 2518 | 2539 |
| 2519 void ModifyConfigs(VideoSendStream::Config* send_config, | 2540 void ModifyVideoConfigs( |
| 2520 std::vector<VideoReceiveStream::Config>* receive_configs, | 2541 VideoSendStream::Config* send_config, |
| 2521 VideoEncoderConfig* encoder_config) override { | 2542 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2543 VideoEncoderConfig* encoder_config) override { |
| 2522 send_config->pre_encode_callback = this; // Used to inject delay. | 2544 send_config->pre_encode_callback = this; // Used to inject delay. |
| 2523 expected_cname_ = send_config->rtp.c_name = "SomeCName"; | 2545 expected_cname_ = send_config->rtp.c_name = "SomeCName"; |
| 2524 | 2546 |
| 2525 const std::vector<uint32_t>& ssrcs = send_config->rtp.ssrcs; | 2547 const std::vector<uint32_t>& ssrcs = send_config->rtp.ssrcs; |
| 2526 for (size_t i = 0; i < ssrcs.size(); ++i) { | 2548 for (size_t i = 0; i < ssrcs.size(); ++i) { |
| 2527 expected_send_ssrcs_.insert(ssrcs[i]); | 2549 expected_send_ssrcs_.insert(ssrcs[i]); |
| 2528 expected_receive_ssrcs_.push_back( | 2550 expected_receive_ssrcs_.push_back( |
| 2529 (*receive_configs)[i].rtp.remote_ssrc); | 2551 (*receive_configs)[i].rtp.remote_ssrc); |
| 2530 (*receive_configs)[i].render_delay_ms = kExpectedRenderDelayMs; | 2552 (*receive_configs)[i].render_delay_ms = kExpectedRenderDelayMs; |
| 2531 } | 2553 } |
| 2532 } | 2554 } |
| 2533 | 2555 |
| 2534 size_t GetNumStreams() const override { return kNumSsrcs; } | 2556 size_t GetNumStreams() const override { return kNumSsrcs; } |
| 2535 | 2557 |
| 2536 void OnStreamsCreated( | 2558 void OnVideoStreamsCreated( |
| 2537 VideoSendStream* send_stream, | 2559 VideoSendStream* send_stream, |
| 2538 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2560 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 2539 send_stream_ = send_stream; | 2561 send_stream_ = send_stream; |
| 2540 receive_streams_ = receive_streams; | 2562 receive_streams_ = receive_streams; |
| 2541 } | 2563 } |
| 2542 | 2564 |
| 2543 void PerformTest() override { | 2565 void PerformTest() override { |
| 2544 Clock* clock = Clock::GetRealTimeClock(); | 2566 Clock* clock = Clock::GetRealTimeClock(); |
| 2545 int64_t now = clock->TimeInMilliseconds(); | 2567 int64_t now = clock->TimeInMilliseconds(); |
| 2546 int64_t stop_time = now + test::CallTest::kLongTimeoutMs; | 2568 int64_t stop_time = now + test::CallTest::kLongTimeoutMs; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2611 TEST_F(EndToEndTest, TestReceivedRtpPacketStats) { | 2633 TEST_F(EndToEndTest, TestReceivedRtpPacketStats) { |
| 2612 static const size_t kNumRtpPacketsToSend = 5; | 2634 static const size_t kNumRtpPacketsToSend = 5; |
| 2613 class ReceivedRtpStatsObserver : public test::EndToEndTest { | 2635 class ReceivedRtpStatsObserver : public test::EndToEndTest { |
| 2614 public: | 2636 public: |
| 2615 ReceivedRtpStatsObserver() | 2637 ReceivedRtpStatsObserver() |
| 2616 : EndToEndTest(kDefaultTimeoutMs), | 2638 : EndToEndTest(kDefaultTimeoutMs), |
| 2617 receive_stream_(nullptr), | 2639 receive_stream_(nullptr), |
| 2618 sent_rtp_(0) {} | 2640 sent_rtp_(0) {} |
| 2619 | 2641 |
| 2620 private: | 2642 private: |
| 2621 void OnStreamsCreated( | 2643 void OnVideoStreamsCreated( |
| 2622 VideoSendStream* send_stream, | 2644 VideoSendStream* send_stream, |
| 2623 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2645 const std::vector<VideoReceiveStream*>& receive_streams) override { |
| 2624 receive_stream_ = receive_streams[0]; | 2646 receive_stream_ = receive_streams[0]; |
| 2625 } | 2647 } |
| 2626 | 2648 |
| 2627 Action OnSendRtp(const uint8_t* packet, size_t length) override { | 2649 Action OnSendRtp(const uint8_t* packet, size_t length) override { |
| 2628 if (sent_rtp_ >= kNumRtpPacketsToSend) { | 2650 if (sent_rtp_ >= kNumRtpPacketsToSend) { |
| 2629 VideoReceiveStream::Stats stats = receive_stream_->GetStats(); | 2651 VideoReceiveStream::Stats stats = receive_stream_->GetStats(); |
| 2630 if (kNumRtpPacketsToSend == stats.rtp_stats.transmitted.packets) { | 2652 if (kNumRtpPacketsToSend == stats.rtp_stats.transmitted.packets) { |
| 2631 observation_complete_.Set(); | 2653 observation_complete_.Set(); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2687 observed_redundant_retransmission_[header.ssrc] = true; | 2709 observed_redundant_retransmission_[header.ssrc] = true; |
| 2688 if (--ssrcs_to_observe_ == 0) | 2710 if (--ssrcs_to_observe_ == 0) |
| 2689 observation_complete_.Set(); | 2711 observation_complete_.Set(); |
| 2690 } | 2712 } |
| 2691 | 2713 |
| 2692 return SEND_PACKET; | 2714 return SEND_PACKET; |
| 2693 } | 2715 } |
| 2694 | 2716 |
| 2695 size_t GetNumStreams() const override { return kNumSsrcs; } | 2717 size_t GetNumStreams() const override { return kNumSsrcs; } |
| 2696 | 2718 |
| 2697 void ModifyConfigs(VideoSendStream::Config* send_config, | 2719 void ModifyVideoConfigs( |
| 2698 std::vector<VideoReceiveStream::Config>* receive_configs, | 2720 VideoSendStream::Config* send_config, |
| 2699 VideoEncoderConfig* encoder_config) override { | 2721 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 2722 VideoEncoderConfig* encoder_config) override { |
| 2700 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. | 2723 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. |
| 2701 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 2724 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { |
| 2702 encoder_config->streams[i].min_bitrate_bps = 10000; | 2725 encoder_config->streams[i].min_bitrate_bps = 10000; |
| 2703 encoder_config->streams[i].target_bitrate_bps = 15000; | 2726 encoder_config->streams[i].target_bitrate_bps = 15000; |
| 2704 encoder_config->streams[i].max_bitrate_bps = 20000; | 2727 encoder_config->streams[i].max_bitrate_bps = 20000; |
| 2705 } | 2728 } |
| 2706 | 2729 |
| 2707 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; | 2730 send_config->rtp.rtx.payload_type = kSendRtxPayloadType; |
| 2708 | 2731 |
| 2709 for (size_t i = 0; i < kNumSsrcs; ++i) | 2732 for (size_t i = 0; i < kNumSsrcs; ++i) |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2827 test::PacketTransport receive_transport(nullptr, &observer, | 2850 test::PacketTransport receive_transport(nullptr, &observer, |
| 2828 test::PacketTransport::kReceiver, | 2851 test::PacketTransport::kReceiver, |
| 2829 FakeNetworkPipe::Config()); | 2852 FakeNetworkPipe::Config()); |
| 2830 send_transport.SetReceiver(receiver_call_->Receiver()); | 2853 send_transport.SetReceiver(receiver_call_->Receiver()); |
| 2831 receive_transport.SetReceiver(sender_call_->Receiver()); | 2854 receive_transport.SetReceiver(sender_call_->Receiver()); |
| 2832 | 2855 |
| 2833 CreateSendConfig(kNumSsrcs, &send_transport); | 2856 CreateSendConfig(kNumSsrcs, &send_transport); |
| 2834 | 2857 |
| 2835 if (use_rtx) { | 2858 if (use_rtx) { |
| 2836 for (size_t i = 0; i < kNumSsrcs; ++i) { | 2859 for (size_t i = 0; i < kNumSsrcs; ++i) { |
| 2837 send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); | 2860 video_send_config_.rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[i]); |
| 2838 } | 2861 } |
| 2839 send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; | 2862 video_send_config_.rtp.rtx.payload_type = kSendRtxPayloadType; |
| 2840 } | 2863 } |
| 2841 | 2864 |
| 2842 // Lower bitrates so that all streams send initially. | 2865 // Lower bitrates so that all streams send initially. |
| 2843 for (size_t i = 0; i < encoder_config_.streams.size(); ++i) { | 2866 for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) { |
| 2844 encoder_config_.streams[i].min_bitrate_bps = 10000; | 2867 video_encoder_config_.streams[i].min_bitrate_bps = 10000; |
| 2845 encoder_config_.streams[i].target_bitrate_bps = 15000; | 2868 video_encoder_config_.streams[i].target_bitrate_bps = 15000; |
| 2846 encoder_config_.streams[i].max_bitrate_bps = 20000; | 2869 video_encoder_config_.streams[i].max_bitrate_bps = 20000; |
| 2847 } | 2870 } |
| 2848 | 2871 |
| 2849 // Use the same total bitrates when sending a single stream to avoid lowering | 2872 // Use the same total bitrates when sending a single stream to avoid lowering |
| 2850 // the bitrate estimate and requiring a subsequent rampup. | 2873 // the bitrate estimate and requiring a subsequent rampup. |
| 2851 VideoEncoderConfig one_stream = encoder_config_; | 2874 VideoEncoderConfig one_stream = video_encoder_config_; |
| 2852 one_stream.streams.resize(1); | 2875 one_stream.streams.resize(1); |
| 2853 for (size_t i = 1; i < encoder_config_.streams.size(); ++i) { | 2876 for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) { |
| 2854 one_stream.streams.front().min_bitrate_bps += | 2877 one_stream.streams.front().min_bitrate_bps += |
| 2855 encoder_config_.streams[i].min_bitrate_bps; | 2878 video_encoder_config_.streams[i].min_bitrate_bps; |
| 2856 one_stream.streams.front().target_bitrate_bps += | 2879 one_stream.streams.front().target_bitrate_bps += |
| 2857 encoder_config_.streams[i].target_bitrate_bps; | 2880 video_encoder_config_.streams[i].target_bitrate_bps; |
| 2858 one_stream.streams.front().max_bitrate_bps += | 2881 one_stream.streams.front().max_bitrate_bps += |
| 2859 encoder_config_.streams[i].max_bitrate_bps; | 2882 video_encoder_config_.streams[i].max_bitrate_bps; |
| 2860 } | 2883 } |
| 2861 | 2884 |
| 2862 CreateMatchingReceiveConfigs(&receive_transport); | 2885 CreateMatchingReceiveConfigs(&receive_transport); |
| 2863 | 2886 |
| 2864 CreateStreams(); | 2887 CreateStreams(); |
| 2865 CreateFrameGeneratorCapturer(); | 2888 CreateFrameGeneratorCapturer(); |
| 2866 | 2889 |
| 2867 Start(); | 2890 Start(); |
| 2868 EXPECT_TRUE(observer.Wait()) | 2891 EXPECT_TRUE(observer.Wait()) |
| 2869 << "Timed out waiting for all SSRCs to send packets."; | 2892 << "Timed out waiting for all SSRCs to send packets."; |
| 2870 | 2893 |
| 2871 // Test stream resetting more than once to make sure that the state doesn't | 2894 // Test stream resetting more than once to make sure that the state doesn't |
| 2872 // get set once (this could be due to using std::map::insert for instance). | 2895 // get set once (this could be due to using std::map::insert for instance). |
| 2873 for (size_t i = 0; i < 3; ++i) { | 2896 for (size_t i = 0; i < 3; ++i) { |
| 2874 frame_generator_capturer_->Stop(); | 2897 frame_generator_capturer_->Stop(); |
| 2875 sender_call_->DestroyVideoSendStream(send_stream_); | 2898 sender_call_->DestroyVideoSendStream(video_send_stream_); |
| 2876 | 2899 |
| 2877 // Re-create VideoSendStream with only one stream. | 2900 // Re-create VideoSendStream with only one stream. |
| 2878 send_stream_ = | 2901 video_send_stream_ = |
| 2879 sender_call_->CreateVideoSendStream(send_config_, one_stream); | 2902 sender_call_->CreateVideoSendStream(video_send_config_, one_stream); |
| 2880 send_stream_->Start(); | 2903 video_send_stream_->Start(); |
| 2881 CreateFrameGeneratorCapturer(); | 2904 CreateFrameGeneratorCapturer(); |
| 2882 frame_generator_capturer_->Start(); | 2905 frame_generator_capturer_->Start(); |
| 2883 | 2906 |
| 2884 observer.ResetExpectedSsrcs(1); | 2907 observer.ResetExpectedSsrcs(1); |
| 2885 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; | 2908 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; |
| 2886 | 2909 |
| 2887 // Reconfigure back to use all streams. | 2910 // Reconfigure back to use all streams. |
| 2888 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 2911 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
| 2889 observer.ResetExpectedSsrcs(kNumSsrcs); | 2912 observer.ResetExpectedSsrcs(kNumSsrcs); |
| 2890 EXPECT_TRUE(observer.Wait()) | 2913 EXPECT_TRUE(observer.Wait()) |
| 2891 << "Timed out waiting for all SSRCs to send packets."; | 2914 << "Timed out waiting for all SSRCs to send packets."; |
| 2892 | 2915 |
| 2893 // Reconfigure down to one stream. | 2916 // Reconfigure down to one stream. |
| 2894 send_stream_->ReconfigureVideoEncoder(one_stream); | 2917 video_send_stream_->ReconfigureVideoEncoder(one_stream); |
| 2895 observer.ResetExpectedSsrcs(1); | 2918 observer.ResetExpectedSsrcs(1); |
| 2896 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; | 2919 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; |
| 2897 | 2920 |
| 2898 // Reconfigure back to use all streams. | 2921 // Reconfigure back to use all streams. |
| 2899 send_stream_->ReconfigureVideoEncoder(encoder_config_); | 2922 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); |
| 2900 observer.ResetExpectedSsrcs(kNumSsrcs); | 2923 observer.ResetExpectedSsrcs(kNumSsrcs); |
| 2901 EXPECT_TRUE(observer.Wait()) | 2924 EXPECT_TRUE(observer.Wait()) |
| 2902 << "Timed out waiting for all SSRCs to send packets."; | 2925 << "Timed out waiting for all SSRCs to send packets."; |
| 2903 } | 2926 } |
| 2904 | 2927 |
| 2905 send_transport.StopSending(); | 2928 send_transport.StopSending(); |
| 2906 receive_transport.StopSending(); | 2929 receive_transport.StopSending(); |
| 2907 | 2930 |
| 2908 Stop(); | 2931 Stop(); |
| 2909 DestroyStreams(); | 2932 DestroyStreams(); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2966 ++receiver_rtcp_; | 2989 ++receiver_rtcp_; |
| 2967 packet_event_.Set(); | 2990 packet_event_.Set(); |
| 2968 return SEND_PACKET; | 2991 return SEND_PACKET; |
| 2969 } | 2992 } |
| 2970 | 2993 |
| 2971 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { | 2994 void OnCallsCreated(Call* sender_call, Call* receiver_call) override { |
| 2972 sender_call_ = sender_call; | 2995 sender_call_ = sender_call; |
| 2973 receiver_call_ = receiver_call; | 2996 receiver_call_ = receiver_call; |
| 2974 } | 2997 } |
| 2975 | 2998 |
| 2976 void ModifyConfigs(VideoSendStream::Config* send_config, | 2999 void ModifyVideoConfigs( |
| 2977 std::vector<VideoReceiveStream::Config>* receive_configs, | 3000 VideoSendStream::Config* send_config, |
| 2978 VideoEncoderConfig* encoder_config) override { | 3001 std::vector<VideoReceiveStream::Config>* receive_configs, |
| 3002 VideoEncoderConfig* encoder_config) override { |
| 2979 send_config->encoder_settings.encoder = this; | 3003 send_config->encoder_settings.encoder = this; |
| 2980 } | 3004 } |
| 2981 | 3005 |
| 2982 void PerformTest() override { | 3006 void PerformTest() override { |
| 2983 EXPECT_TRUE(encoded_frames_.Wait(kDefaultTimeoutMs)) | 3007 EXPECT_TRUE(encoded_frames_.Wait(kDefaultTimeoutMs)) |
| 2984 << "No frames received by the encoder."; | 3008 << "No frames received by the encoder."; |
| 2985 // Wait for packets from both sender/receiver. | 3009 // Wait for packets from both sender/receiver. |
| 2986 WaitForPacketsOrSilence(false, false); | 3010 WaitForPacketsOrSilence(false, false); |
| 2987 | 3011 |
| 2988 // Sender-side network down. | 3012 // Sender-side network down. |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3142 input_image, codec_specific_info, frame_types); | 3166 input_image, codec_specific_info, frame_types); |
| 3143 } | 3167 } |
| 3144 }; | 3168 }; |
| 3145 | 3169 |
| 3146 CreateSenderCall(Call::Config()); | 3170 CreateSenderCall(Call::Config()); |
| 3147 sender_call_->SignalNetworkState(kNetworkDown); | 3171 sender_call_->SignalNetworkState(kNetworkDown); |
| 3148 | 3172 |
| 3149 UnusedTransport transport; | 3173 UnusedTransport transport; |
| 3150 CreateSendConfig(1, &transport); | 3174 CreateSendConfig(1, &transport); |
| 3151 UnusedEncoder unused_encoder; | 3175 UnusedEncoder unused_encoder; |
| 3152 send_config_.encoder_settings.encoder = &unused_encoder; | 3176 video_send_config_.encoder_settings.encoder = &unused_encoder; |
| 3153 CreateStreams(); | 3177 CreateStreams(); |
| 3154 CreateFrameGeneratorCapturer(); | 3178 CreateFrameGeneratorCapturer(); |
| 3155 | 3179 |
| 3156 Start(); | 3180 Start(); |
| 3157 SleepMs(kSilenceTimeoutMs); | 3181 SleepMs(kSilenceTimeoutMs); |
| 3158 Stop(); | 3182 Stop(); |
| 3159 | 3183 |
| 3160 DestroyStreams(); | 3184 DestroyStreams(); |
| 3161 } | 3185 } |
| 3162 | 3186 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3220 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) | 3244 EXPECT_TRUE(default_receive_config.rtp.rtx.empty()) |
| 3221 << "Enabling RTX requires rtpmap: rtx negotiation."; | 3245 << "Enabling RTX requires rtpmap: rtx negotiation."; |
| 3222 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) | 3246 EXPECT_TRUE(default_receive_config.rtp.extensions.empty()) |
| 3223 << "Enabling RTP extensions require negotiation."; | 3247 << "Enabling RTP extensions require negotiation."; |
| 3224 | 3248 |
| 3225 VerifyEmptyNackConfig(default_receive_config.rtp.nack); | 3249 VerifyEmptyNackConfig(default_receive_config.rtp.nack); |
| 3226 VerifyEmptyFecConfig(default_receive_config.rtp.fec); | 3250 VerifyEmptyFecConfig(default_receive_config.rtp.fec); |
| 3227 } | 3251 } |
| 3228 | 3252 |
| 3229 } // namespace webrtc | 3253 } // namespace webrtc |
| OLD | NEW |