| 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 <functional> | 10 #include <functional> |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 static const int kTOFExtensionId = 4; | 95 static const int kTOFExtensionId = 4; |
| 96 static const int kASTExtensionId = 5; | 96 static const int kASTExtensionId = 5; |
| 97 | 97 |
| 98 class BitrateEstimatorTest : public test::CallTest { | 98 class BitrateEstimatorTest : public test::CallTest { |
| 99 public: | 99 public: |
| 100 BitrateEstimatorTest() : receive_config_(nullptr) {} | 100 BitrateEstimatorTest() : receive_config_(nullptr) {} |
| 101 | 101 |
| 102 virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); } | 102 virtual ~BitrateEstimatorTest() { EXPECT_TRUE(streams_.empty()); } |
| 103 | 103 |
| 104 virtual void SetUp() { | 104 virtual void SetUp() { |
| 105 Call::Config config(event_log_.get()); | 105 task_queue_.SendTask([this]() { |
| 106 receiver_call_.reset(Call::Create(config)); | 106 Call::Config config(event_log_.get()); |
| 107 sender_call_.reset(Call::Create(config)); | 107 receiver_call_.reset(Call::Create(config)); |
| 108 sender_call_.reset(Call::Create(config)); |
| 108 | 109 |
| 109 send_transport_.reset( | 110 send_transport_.reset(new test::DirectTransport( |
| 110 new test::DirectTransport(sender_call_.get(), payload_type_map_)); | 111 &task_queue_, sender_call_.get(), payload_type_map_)); |
| 111 send_transport_->SetReceiver(receiver_call_->Receiver()); | 112 send_transport_->SetReceiver(receiver_call_->Receiver()); |
| 112 receive_transport_.reset( | 113 receive_transport_.reset(new test::DirectTransport( |
| 113 new test::DirectTransport(receiver_call_.get(), payload_type_map_)); | 114 &task_queue_, receiver_call_.get(), payload_type_map_)); |
| 114 receive_transport_->SetReceiver(sender_call_->Receiver()); | 115 receive_transport_->SetReceiver(sender_call_->Receiver()); |
| 115 | 116 |
| 116 video_send_config_ = VideoSendStream::Config(send_transport_.get()); | 117 video_send_config_ = VideoSendStream::Config(send_transport_.get()); |
| 117 video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]); | 118 video_send_config_.rtp.ssrcs.push_back(kVideoSendSsrcs[0]); |
| 118 // Encoders will be set separately per stream. | 119 // Encoders will be set separately per stream. |
| 119 video_send_config_.encoder_settings.encoder = nullptr; | 120 video_send_config_.encoder_settings.encoder = nullptr; |
| 120 video_send_config_.encoder_settings.payload_name = "FAKE"; | 121 video_send_config_.encoder_settings.payload_name = "FAKE"; |
| 121 video_send_config_.encoder_settings.payload_type = | 122 video_send_config_.encoder_settings.payload_type = |
| 122 kFakeVideoSendPayloadType; | 123 kFakeVideoSendPayloadType; |
| 123 test::FillEncoderConfiguration(1, &video_encoder_config_); | 124 test::FillEncoderConfiguration(1, &video_encoder_config_); |
| 124 | 125 |
| 125 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); | 126 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); |
| 126 // receive_config_.decoders will be set by every stream separately. | 127 // receive_config_.decoders will be set by every stream separately. |
| 127 receive_config_.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[0]; | 128 receive_config_.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[0]; |
| 128 receive_config_.rtp.local_ssrc = kReceiverLocalVideoSsrc; | 129 receive_config_.rtp.local_ssrc = kReceiverLocalVideoSsrc; |
| 129 receive_config_.rtp.remb = true; | 130 receive_config_.rtp.remb = true; |
| 130 receive_config_.rtp.extensions.push_back( | 131 receive_config_.rtp.extensions.push_back( |
| 131 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 132 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
| 132 receive_config_.rtp.extensions.push_back( | 133 receive_config_.rtp.extensions.push_back( |
| 133 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); | 134 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); |
| 135 }); |
| 134 } | 136 } |
| 135 | 137 |
| 136 virtual void TearDown() { | 138 virtual void TearDown() { |
| 137 std::for_each(streams_.begin(), streams_.end(), | 139 task_queue_.SendTask([this]() { |
| 138 std::mem_fun(&Stream::StopSending)); | 140 std::for_each(streams_.begin(), streams_.end(), |
| 141 std::mem_fun(&Stream::StopSending)); |
| 139 | 142 |
| 140 send_transport_->StopSending(); | 143 while (!streams_.empty()) { |
| 141 receive_transport_->StopSending(); | 144 delete streams_.back(); |
| 145 streams_.pop_back(); |
| 146 } |
| 142 | 147 |
| 143 while (!streams_.empty()) { | 148 send_transport_.reset(); |
| 144 delete streams_.back(); | 149 receive_transport_.reset(); |
| 145 streams_.pop_back(); | |
| 146 } | |
| 147 | 150 |
| 148 receiver_call_.reset(); | 151 receiver_call_.reset(); |
| 149 sender_call_.reset(); | 152 sender_call_.reset(); |
| 153 }); |
| 150 } | 154 } |
| 151 | 155 |
| 152 protected: | 156 protected: |
| 153 friend class Stream; | 157 friend class Stream; |
| 154 | 158 |
| 155 class Stream { | 159 class Stream { |
| 156 public: | 160 public: |
| 157 explicit Stream(BitrateEstimatorTest* test) | 161 explicit Stream(BitrateEstimatorTest* test) |
| 158 : test_(test), | 162 : test_(test), |
| 159 is_sending_receiving_(false), | 163 is_sending_receiving_(false), |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 VideoReceiveStream::Config receive_config_; | 238 VideoReceiveStream::Config receive_config_; |
| 235 std::vector<Stream*> streams_; | 239 std::vector<Stream*> streams_; |
| 236 }; | 240 }; |
| 237 | 241 |
| 238 static const char* kAbsSendTimeLog = | 242 static const char* kAbsSendTimeLog = |
| 239 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; | 243 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; |
| 240 static const char* kSingleStreamLog = | 244 static const char* kSingleStreamLog = |
| 241 "RemoteBitrateEstimatorSingleStream: Instantiating."; | 245 "RemoteBitrateEstimatorSingleStream: Instantiating."; |
| 242 | 246 |
| 243 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { | 247 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { |
| 244 video_send_config_.rtp.extensions.push_back( | 248 task_queue_.SendTask([this]() { |
| 245 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 249 video_send_config_.rtp.extensions.push_back( |
| 246 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 250 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
| 247 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 251 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 248 streams_.push_back(new Stream(this)); | 252 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 253 streams_.push_back(new Stream(this)); |
| 254 }); |
| 249 EXPECT_TRUE(receiver_log_.Wait()); | 255 EXPECT_TRUE(receiver_log_.Wait()); |
| 250 } | 256 } |
| 251 | 257 |
| 252 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { | 258 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { |
| 253 video_send_config_.rtp.extensions.push_back( | 259 task_queue_.SendTask([this]() { |
| 254 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); | 260 video_send_config_.rtp.extensions.push_back( |
| 255 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 261 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId)); |
| 256 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 262 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 257 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 263 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 258 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 264 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 259 streams_.push_back(new Stream(this)); | 265 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 266 streams_.push_back(new Stream(this)); |
| 267 }); |
| 260 EXPECT_TRUE(receiver_log_.Wait()); | 268 EXPECT_TRUE(receiver_log_.Wait()); |
| 261 } | 269 } |
| 262 | 270 |
| 263 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { | 271 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { |
| 264 video_send_config_.rtp.extensions.push_back( | 272 task_queue_.SendTask([this]() { |
| 265 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 273 video_send_config_.rtp.extensions.push_back( |
| 266 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 274 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
| 267 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 275 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 268 streams_.push_back(new Stream(this)); | 276 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 277 streams_.push_back(new Stream(this)); |
| 278 }); |
| 269 EXPECT_TRUE(receiver_log_.Wait()); | 279 EXPECT_TRUE(receiver_log_.Wait()); |
| 270 | 280 |
| 271 video_send_config_.rtp.extensions[0] = | 281 task_queue_.SendTask([this]() { |
| 272 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); | 282 video_send_config_.rtp.extensions[0] = |
| 273 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 283 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); |
| 274 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 284 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 275 streams_.push_back(new Stream(this)); | 285 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 286 streams_.push_back(new Stream(this)); |
| 287 }); |
| 276 EXPECT_TRUE(receiver_log_.Wait()); | 288 EXPECT_TRUE(receiver_log_.Wait()); |
| 277 } | 289 } |
| 278 | 290 |
| 279 // This test is flaky. See webrtc:5790. | 291 // This test is flaky. See webrtc:5790. |
| 280 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) { | 292 TEST_F(BitrateEstimatorTest, DISABLED_SwitchesToASTThenBackToTOFForVideo) { |
| 281 video_send_config_.rtp.extensions.push_back( | 293 task_queue_.SendTask([this]() { |
| 282 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); | 294 video_send_config_.rtp.extensions.push_back( |
| 283 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 295 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId)); |
| 284 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 296 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 285 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 297 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 286 streams_.push_back(new Stream(this)); | 298 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 299 streams_.push_back(new Stream(this)); |
| 300 }); |
| 287 EXPECT_TRUE(receiver_log_.Wait()); | 301 EXPECT_TRUE(receiver_log_.Wait()); |
| 288 | 302 |
| 289 video_send_config_.rtp.extensions[0] = | 303 task_queue_.SendTask([this]() { |
| 290 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); | 304 video_send_config_.rtp.extensions[0] = |
| 291 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 305 RtpExtension(RtpExtension::kAbsSendTimeUri, kASTExtensionId); |
| 292 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 306 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 293 streams_.push_back(new Stream(this)); | 307 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 308 streams_.push_back(new Stream(this)); |
| 309 }); |
| 294 EXPECT_TRUE(receiver_log_.Wait()); | 310 EXPECT_TRUE(receiver_log_.Wait()); |
| 295 | 311 |
| 296 video_send_config_.rtp.extensions[0] = | 312 task_queue_.SendTask([this]() { |
| 297 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId); | 313 video_send_config_.rtp.extensions[0] = |
| 298 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 314 RtpExtension(RtpExtension::kTimestampOffsetUri, kTOFExtensionId); |
| 299 receiver_log_.PushExpectedLogLine( | 315 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 300 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); | 316 receiver_log_.PushExpectedLogLine( |
| 301 streams_.push_back(new Stream(this)); | 317 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); |
| 302 streams_[0]->StopSending(); | 318 streams_.push_back(new Stream(this)); |
| 303 streams_[1]->StopSending(); | 319 streams_[0]->StopSending(); |
| 320 streams_[1]->StopSending(); |
| 321 }); |
| 304 EXPECT_TRUE(receiver_log_.Wait()); | 322 EXPECT_TRUE(receiver_log_.Wait()); |
| 305 } | 323 } |
| 306 } // namespace webrtc | 324 } // namespace webrtc |
| OLD | NEW |