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 1266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1277 encoder_config.streams = test::CreateVideoStreams(1); | 1277 encoder_config.streams = test::CreateVideoStreams(1); |
1278 VideoStream* stream = &encoder_config.streams[0]; | 1278 VideoStream* stream = &encoder_config.streams[0]; |
1279 stream->width = width; | 1279 stream->width = width; |
1280 stream->height = height; | 1280 stream->height = height; |
1281 stream->max_framerate = 5; | 1281 stream->max_framerate = 5; |
1282 stream->min_bitrate_bps = stream->target_bitrate_bps = | 1282 stream->min_bitrate_bps = stream->target_bitrate_bps = |
1283 stream->max_bitrate_bps = 100000; | 1283 stream->max_bitrate_bps = 100000; |
1284 | 1284 |
1285 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); | 1285 UpdateSendConfig(i, &send_config, &encoder_config, &frame_generators[i]); |
1286 | 1286 |
1287 send_streams[i] = | 1287 send_streams[i] = sender_call->CreateVideoSendStream( |
1288 sender_call->CreateVideoSendStream(send_config, encoder_config); | 1288 send_config.Copy(), encoder_config.Copy()); |
1289 send_streams[i]->Start(); | 1289 send_streams[i]->Start(); |
1290 | 1290 |
1291 VideoReceiveStream::Config receive_config(receiver_transport.get()); | 1291 VideoReceiveStream::Config receive_config(receiver_transport.get()); |
1292 receive_config.rtp.remote_ssrc = ssrc; | 1292 receive_config.rtp.remote_ssrc = ssrc; |
1293 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalVideoSsrc; | 1293 receive_config.rtp.local_ssrc = test::CallTest::kReceiverLocalVideoSsrc; |
1294 VideoReceiveStream::Decoder decoder = | 1294 VideoReceiveStream::Decoder decoder = |
1295 test::CreateMatchingDecoder(send_config.encoder_settings); | 1295 test::CreateMatchingDecoder(send_config.encoder_settings); |
1296 allocated_decoders.push_back( | 1296 allocated_decoders.push_back( |
1297 std::unique_ptr<VideoDecoder>(decoder.decoder)); | 1297 std::unique_ptr<VideoDecoder>(decoder.decoder)); |
1298 receive_config.decoders.push_back(decoder); | 1298 receive_config.decoders.push_back(decoder); |
(...skipping 1183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2482 VideoEncoderConfig* encoder_config) override { | 2482 VideoEncoderConfig* encoder_config) override { |
2483 if (num_ssrcs_ > 1) { | 2483 if (num_ssrcs_ > 1) { |
2484 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. | 2484 // Set low simulcast bitrates to not have to wait for bandwidth ramp-up. |
2485 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { | 2485 for (size_t i = 0; i < encoder_config->streams.size(); ++i) { |
2486 encoder_config->streams[i].min_bitrate_bps = 10000; | 2486 encoder_config->streams[i].min_bitrate_bps = 10000; |
2487 encoder_config->streams[i].target_bitrate_bps = 15000; | 2487 encoder_config->streams[i].target_bitrate_bps = 15000; |
2488 encoder_config->streams[i].max_bitrate_bps = 20000; | 2488 encoder_config->streams[i].max_bitrate_bps = 20000; |
2489 } | 2489 } |
2490 } | 2490 } |
2491 | 2491 |
2492 video_encoder_config_all_streams_ = *encoder_config; | 2492 video_encoder_config_all_streams_ = encoder_config->Copy(); |
2493 if (send_single_ssrc_first_) | 2493 if (send_single_ssrc_first_) |
2494 encoder_config->streams.resize(1); | 2494 encoder_config->streams.resize(1); |
2495 } | 2495 } |
2496 | 2496 |
2497 void OnVideoStreamsCreated( | 2497 void OnVideoStreamsCreated( |
2498 VideoSendStream* send_stream, | 2498 VideoSendStream* send_stream, |
2499 const std::vector<VideoReceiveStream*>& receive_streams) override { | 2499 const std::vector<VideoReceiveStream*>& receive_streams) override { |
2500 send_stream_ = send_stream; | 2500 send_stream_ = send_stream; |
2501 } | 2501 } |
2502 | 2502 |
2503 void PerformTest() override { | 2503 void PerformTest() override { |
2504 EXPECT_TRUE(Wait()) << "Timed out while waiting for " | 2504 EXPECT_TRUE(Wait()) << "Timed out while waiting for " |
2505 << (send_single_ssrc_first_ ? "first SSRC." | 2505 << (send_single_ssrc_first_ ? "first SSRC." |
2506 : "SSRCs."); | 2506 : "SSRCs."); |
2507 | 2507 |
2508 if (send_single_ssrc_first_) { | 2508 if (send_single_ssrc_first_) { |
2509 // Set full simulcast and continue with the rest of the SSRCs. | 2509 // Set full simulcast and continue with the rest of the SSRCs. |
2510 send_stream_->ReconfigureVideoEncoder( | 2510 send_stream_->ReconfigureVideoEncoder( |
2511 video_encoder_config_all_streams_); | 2511 std::move(video_encoder_config_all_streams_)); |
2512 EXPECT_TRUE(Wait()) << "Timed out while waiting on additional SSRCs."; | 2512 EXPECT_TRUE(Wait()) << "Timed out while waiting on additional SSRCs."; |
2513 } | 2513 } |
2514 } | 2514 } |
2515 | 2515 |
2516 private: | 2516 private: |
2517 std::map<uint32_t, bool> valid_ssrcs_; | 2517 std::map<uint32_t, bool> valid_ssrcs_; |
2518 std::map<uint32_t, bool> is_observed_; | 2518 std::map<uint32_t, bool> is_observed_; |
2519 | 2519 |
2520 const size_t num_ssrcs_; | 2520 const size_t num_ssrcs_; |
2521 const bool send_single_ssrc_first_; | 2521 const bool send_single_ssrc_first_; |
(...skipping 674 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3196 | 3196 |
3197 // Lower bitrates so that all streams send initially. | 3197 // Lower bitrates so that all streams send initially. |
3198 for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) { | 3198 for (size_t i = 0; i < video_encoder_config_.streams.size(); ++i) { |
3199 video_encoder_config_.streams[i].min_bitrate_bps = 10000; | 3199 video_encoder_config_.streams[i].min_bitrate_bps = 10000; |
3200 video_encoder_config_.streams[i].target_bitrate_bps = 15000; | 3200 video_encoder_config_.streams[i].target_bitrate_bps = 15000; |
3201 video_encoder_config_.streams[i].max_bitrate_bps = 20000; | 3201 video_encoder_config_.streams[i].max_bitrate_bps = 20000; |
3202 } | 3202 } |
3203 | 3203 |
3204 // Use the same total bitrates when sending a single stream to avoid lowering | 3204 // Use the same total bitrates when sending a single stream to avoid lowering |
3205 // the bitrate estimate and requiring a subsequent rampup. | 3205 // the bitrate estimate and requiring a subsequent rampup. |
3206 VideoEncoderConfig one_stream = video_encoder_config_; | 3206 VideoEncoderConfig one_stream = video_encoder_config_.Copy(); |
3207 one_stream.streams.resize(1); | 3207 one_stream.streams.resize(1); |
3208 for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) { | 3208 for (size_t i = 1; i < video_encoder_config_.streams.size(); ++i) { |
3209 one_stream.streams.front().min_bitrate_bps += | 3209 one_stream.streams.front().min_bitrate_bps += |
3210 video_encoder_config_.streams[i].min_bitrate_bps; | 3210 video_encoder_config_.streams[i].min_bitrate_bps; |
3211 one_stream.streams.front().target_bitrate_bps += | 3211 one_stream.streams.front().target_bitrate_bps += |
3212 video_encoder_config_.streams[i].target_bitrate_bps; | 3212 video_encoder_config_.streams[i].target_bitrate_bps; |
3213 one_stream.streams.front().max_bitrate_bps += | 3213 one_stream.streams.front().max_bitrate_bps += |
3214 video_encoder_config_.streams[i].max_bitrate_bps; | 3214 video_encoder_config_.streams[i].max_bitrate_bps; |
3215 } | 3215 } |
3216 | 3216 |
3217 CreateMatchingReceiveConfigs(&receive_transport); | 3217 CreateMatchingReceiveConfigs(&receive_transport); |
3218 | 3218 |
3219 CreateVideoStreams(); | 3219 CreateVideoStreams(); |
3220 CreateFrameGeneratorCapturer(); | 3220 CreateFrameGeneratorCapturer(); |
3221 | 3221 |
3222 Start(); | 3222 Start(); |
3223 EXPECT_TRUE(observer.Wait()) | 3223 EXPECT_TRUE(observer.Wait()) |
3224 << "Timed out waiting for all SSRCs to send packets."; | 3224 << "Timed out waiting for all SSRCs to send packets."; |
3225 | 3225 |
3226 // Test stream resetting more than once to make sure that the state doesn't | 3226 // Test stream resetting more than once to make sure that the state doesn't |
3227 // get set once (this could be due to using std::map::insert for instance). | 3227 // get set once (this could be due to using std::map::insert for instance). |
3228 for (size_t i = 0; i < 3; ++i) { | 3228 for (size_t i = 0; i < 3; ++i) { |
3229 frame_generator_capturer_->Stop(); | 3229 frame_generator_capturer_->Stop(); |
3230 sender_call_->DestroyVideoSendStream(video_send_stream_); | 3230 sender_call_->DestroyVideoSendStream(video_send_stream_); |
3231 | 3231 |
3232 // Re-create VideoSendStream with only one stream. | 3232 // Re-create VideoSendStream with only one stream. |
3233 video_send_stream_ = | 3233 video_send_stream_ = sender_call_->CreateVideoSendStream( |
3234 sender_call_->CreateVideoSendStream(video_send_config_, one_stream); | 3234 video_send_config_.Copy(), one_stream.Copy()); |
3235 video_send_stream_->Start(); | 3235 video_send_stream_->Start(); |
3236 if (provoke_rtcpsr_before_rtp) { | 3236 if (provoke_rtcpsr_before_rtp) { |
3237 // Rapid Resync Request forces sending RTCP Sender Report back. | 3237 // Rapid Resync Request forces sending RTCP Sender Report back. |
3238 // Using this request speeds up this test because then there is no need | 3238 // Using this request speeds up this test because then there is no need |
3239 // to wait for a second for periodic Sender Report. | 3239 // to wait for a second for periodic Sender Report. |
3240 rtcp::RapidResyncRequest force_send_sr_back_request; | 3240 rtcp::RapidResyncRequest force_send_sr_back_request; |
3241 rtc::Buffer packet = force_send_sr_back_request.Build(); | 3241 rtc::Buffer packet = force_send_sr_back_request.Build(); |
3242 static_cast<webrtc::test::DirectTransport&>(receive_transport) | 3242 static_cast<webrtc::test::DirectTransport&>(receive_transport) |
3243 .SendRtcp(packet.data(), packet.size()); | 3243 .SendRtcp(packet.data(), packet.size()); |
3244 } | 3244 } |
3245 CreateFrameGeneratorCapturer(); | 3245 CreateFrameGeneratorCapturer(); |
3246 frame_generator_capturer_->Start(); | 3246 frame_generator_capturer_->Start(); |
3247 | 3247 |
3248 observer.ResetExpectedSsrcs(1); | 3248 observer.ResetExpectedSsrcs(1); |
3249 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; | 3249 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; |
3250 | 3250 |
3251 // Reconfigure back to use all streams. | 3251 // Reconfigure back to use all streams. |
3252 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); | 3252 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); |
3253 observer.ResetExpectedSsrcs(kNumSsrcs); | 3253 observer.ResetExpectedSsrcs(kNumSsrcs); |
3254 EXPECT_TRUE(observer.Wait()) | 3254 EXPECT_TRUE(observer.Wait()) |
3255 << "Timed out waiting for all SSRCs to send packets."; | 3255 << "Timed out waiting for all SSRCs to send packets."; |
3256 | 3256 |
3257 // Reconfigure down to one stream. | 3257 // Reconfigure down to one stream. |
3258 video_send_stream_->ReconfigureVideoEncoder(one_stream); | 3258 video_send_stream_->ReconfigureVideoEncoder(one_stream.Copy()); |
3259 observer.ResetExpectedSsrcs(1); | 3259 observer.ResetExpectedSsrcs(1); |
3260 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; | 3260 EXPECT_TRUE(observer.Wait()) << "Timed out waiting for single RTP packet."; |
3261 | 3261 |
3262 // Reconfigure back to use all streams. | 3262 // Reconfigure back to use all streams. |
3263 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_); | 3263 video_send_stream_->ReconfigureVideoEncoder(video_encoder_config_.Copy()); |
3264 observer.ResetExpectedSsrcs(kNumSsrcs); | 3264 observer.ResetExpectedSsrcs(kNumSsrcs); |
3265 EXPECT_TRUE(observer.Wait()) | 3265 EXPECT_TRUE(observer.Wait()) |
3266 << "Timed out waiting for all SSRCs to send packets."; | 3266 << "Timed out waiting for all SSRCs to send packets."; |
3267 } | 3267 } |
3268 | 3268 |
3269 send_transport.StopSending(); | 3269 send_transport.StopSending(); |
3270 receive_transport.StopSending(); | 3270 receive_transport.StopSending(); |
3271 | 3271 |
3272 Stop(); | 3272 Stop(); |
3273 DestroyStreams(); | 3273 DestroyStreams(); |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3734 private: | 3734 private: |
3735 bool video_observed_; | 3735 bool video_observed_; |
3736 bool audio_observed_; | 3736 bool audio_observed_; |
3737 SequenceNumberUnwrapper unwrapper_; | 3737 SequenceNumberUnwrapper unwrapper_; |
3738 std::set<int64_t> received_packet_ids_; | 3738 std::set<int64_t> received_packet_ids_; |
3739 } test; | 3739 } test; |
3740 | 3740 |
3741 RunBaseTest(&test); | 3741 RunBaseTest(&test); |
3742 } | 3742 } |
3743 } // namespace webrtc | 3743 } // namespace webrtc |
OLD | NEW |