| 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 Call::Config config; | 112 Call::Config config; |
| 113 config.audio_state = AudioState::Create(audio_state_config); | 113 config.audio_state = AudioState::Create(audio_state_config); |
| 114 receiver_call_.reset(Call::Create(config)); | 114 receiver_call_.reset(Call::Create(config)); |
| 115 sender_call_.reset(Call::Create(config)); | 115 sender_call_.reset(Call::Create(config)); |
| 116 | 116 |
| 117 send_transport_.reset(new test::DirectTransport(sender_call_.get())); | 117 send_transport_.reset(new test::DirectTransport(sender_call_.get())); |
| 118 send_transport_->SetReceiver(receiver_call_->Receiver()); | 118 send_transport_->SetReceiver(receiver_call_->Receiver()); |
| 119 receive_transport_.reset(new test::DirectTransport(receiver_call_.get())); | 119 receive_transport_.reset(new test::DirectTransport(receiver_call_.get())); |
| 120 receive_transport_->SetReceiver(sender_call_->Receiver()); | 120 receive_transport_->SetReceiver(sender_call_->Receiver()); |
| 121 | 121 |
| 122 send_config_ = VideoSendStream::Config(send_transport_.get()); | 122 video_send_config_ = VideoSendStream::Config(send_transport_.get()); |
| 123 send_config_.rtp.ssrcs.push_back(kSendSsrcs[0]); | 123 video_send_config_.rtp.ssrcs.push_back(kSendSsrcs[0]); |
| 124 // Encoders will be set separately per stream. | 124 // Encoders will be set separately per stream. |
| 125 send_config_.encoder_settings.encoder = nullptr; | 125 video_send_config_.encoder_settings.encoder = nullptr; |
| 126 send_config_.encoder_settings.payload_name = "FAKE"; | 126 video_send_config_.encoder_settings.payload_name = "FAKE"; |
| 127 send_config_.encoder_settings.payload_type = kFakeSendPayloadType; | 127 video_send_config_.encoder_settings.payload_type = kFakeSendPayloadType; |
| 128 encoder_config_.streams = test::CreateVideoStreams(1); | 128 video_encoder_config_.streams = test::CreateVideoStreams(1); |
| 129 | 129 |
| 130 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); | 130 receive_config_ = VideoReceiveStream::Config(receive_transport_.get()); |
| 131 // receive_config_.decoders will be set by every stream separately. | 131 // receive_config_.decoders will be set by every stream separately. |
| 132 receive_config_.rtp.remote_ssrc = send_config_.rtp.ssrcs[0]; | 132 receive_config_.rtp.remote_ssrc = video_send_config_.rtp.ssrcs[0]; |
| 133 receive_config_.rtp.local_ssrc = kReceiverLocalSsrc; | 133 receive_config_.rtp.local_ssrc = kReceiverLocalSsrc; |
| 134 receive_config_.rtp.remb = true; | 134 receive_config_.rtp.remb = true; |
| 135 receive_config_.rtp.extensions.push_back( | 135 receive_config_.rtp.extensions.push_back( |
| 136 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 136 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
| 137 receive_config_.rtp.extensions.push_back( | 137 receive_config_.rtp.extensions.push_back( |
| 138 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 138 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 139 } | 139 } |
| 140 | 140 |
| 141 virtual void TearDown() { | 141 virtual void TearDown() { |
| 142 std::for_each(streams_.begin(), streams_.end(), | 142 std::for_each(streams_.begin(), streams_.end(), |
| (...skipping 18 matching lines...) Expand all Loading... |
| 161 public: | 161 public: |
| 162 Stream(BitrateEstimatorTest* test, bool receive_audio) | 162 Stream(BitrateEstimatorTest* test, bool receive_audio) |
| 163 : test_(test), | 163 : test_(test), |
| 164 is_sending_receiving_(false), | 164 is_sending_receiving_(false), |
| 165 send_stream_(nullptr), | 165 send_stream_(nullptr), |
| 166 audio_receive_stream_(nullptr), | 166 audio_receive_stream_(nullptr), |
| 167 video_receive_stream_(nullptr), | 167 video_receive_stream_(nullptr), |
| 168 frame_generator_capturer_(), | 168 frame_generator_capturer_(), |
| 169 fake_encoder_(Clock::GetRealTimeClock()), | 169 fake_encoder_(Clock::GetRealTimeClock()), |
| 170 fake_decoder_() { | 170 fake_decoder_() { |
| 171 test_->send_config_.rtp.ssrcs[0]++; | 171 test_->video_send_config_.rtp.ssrcs[0]++; |
| 172 test_->send_config_.encoder_settings.encoder = &fake_encoder_; | 172 test_->video_send_config_.encoder_settings.encoder = &fake_encoder_; |
| 173 send_stream_ = test_->sender_call_->CreateVideoSendStream( | 173 send_stream_ = test_->sender_call_->CreateVideoSendStream( |
| 174 test_->send_config_, test_->encoder_config_); | 174 test_->video_send_config_, test_->video_encoder_config_); |
| 175 RTC_DCHECK_EQ(1u, test_->encoder_config_.streams.size()); | 175 RTC_DCHECK_EQ(1u, test_->video_encoder_config_.streams.size()); |
| 176 frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create( | 176 frame_generator_capturer_.reset(test::FrameGeneratorCapturer::Create( |
| 177 send_stream_->Input(), test_->encoder_config_.streams[0].width, | 177 send_stream_->Input(), test_->video_encoder_config_.streams[0].width, |
| 178 test_->encoder_config_.streams[0].height, 30, | 178 test_->video_encoder_config_.streams[0].height, 30, |
| 179 Clock::GetRealTimeClock())); | 179 Clock::GetRealTimeClock())); |
| 180 send_stream_->Start(); | 180 send_stream_->Start(); |
| 181 frame_generator_capturer_->Start(); | 181 frame_generator_capturer_->Start(); |
| 182 | 182 |
| 183 if (receive_audio) { | 183 if (receive_audio) { |
| 184 AudioReceiveStream::Config receive_config; | 184 AudioReceiveStream::Config receive_config; |
| 185 receive_config.rtp.remote_ssrc = test_->send_config_.rtp.ssrcs[0]; | 185 receive_config.rtp.remote_ssrc = test_->video_send_config_.rtp.ssrcs[0]; |
| 186 // Bogus non-default id to prevent hitting a RTC_DCHECK when creating | 186 // Bogus non-default id to prevent hitting a RTC_DCHECK when creating |
| 187 // the AudioReceiveStream. Every receive stream has to correspond to | 187 // the AudioReceiveStream. Every receive stream has to correspond to |
| 188 // an underlying channel id. | 188 // an underlying channel id. |
| 189 receive_config.voe_channel_id = 0; | 189 receive_config.voe_channel_id = 0; |
| 190 receive_config.rtp.extensions.push_back( | 190 receive_config.rtp.extensions.push_back( |
| 191 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 191 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 192 receive_config.combined_audio_video_bwe = true; | 192 receive_config.combined_audio_video_bwe = true; |
| 193 audio_receive_stream_ = | 193 audio_receive_stream_ = |
| 194 test_->receiver_call_->CreateAudioReceiveStream(receive_config); | 194 test_->receiver_call_->CreateAudioReceiveStream(receive_config); |
| 195 } else { | 195 } else { |
| 196 VideoReceiveStream::Decoder decoder; | 196 VideoReceiveStream::Decoder decoder; |
| 197 decoder.decoder = &fake_decoder_; | 197 decoder.decoder = &fake_decoder_; |
| 198 decoder.payload_type = | 198 decoder.payload_type = |
| 199 test_->send_config_.encoder_settings.payload_type; | 199 test_->video_send_config_.encoder_settings.payload_type; |
| 200 decoder.payload_name = | 200 decoder.payload_name = |
| 201 test_->send_config_.encoder_settings.payload_name; | 201 test_->video_send_config_.encoder_settings.payload_name; |
| 202 test_->receive_config_.decoders.clear(); | 202 test_->receive_config_.decoders.clear(); |
| 203 test_->receive_config_.decoders.push_back(decoder); | 203 test_->receive_config_.decoders.push_back(decoder); |
| 204 test_->receive_config_.rtp.remote_ssrc = | 204 test_->receive_config_.rtp.remote_ssrc = |
| 205 test_->send_config_.rtp.ssrcs[0]; | 205 test_->video_send_config_.rtp.ssrcs[0]; |
| 206 test_->receive_config_.rtp.local_ssrc++; | 206 test_->receive_config_.rtp.local_ssrc++; |
| 207 video_receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream( | 207 video_receive_stream_ = test_->receiver_call_->CreateVideoReceiveStream( |
| 208 test_->receive_config_); | 208 test_->receive_config_); |
| 209 video_receive_stream_->Start(); | 209 video_receive_stream_->Start(); |
| 210 } | 210 } |
| 211 is_sending_receiving_ = true; | 211 is_sending_receiving_ = true; |
| 212 } | 212 } |
| 213 | 213 |
| 214 ~Stream() { | 214 ~Stream() { |
| 215 EXPECT_FALSE(is_sending_receiving_); | 215 EXPECT_FALSE(is_sending_receiving_); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 VideoReceiveStream::Config receive_config_; | 257 VideoReceiveStream::Config receive_config_; |
| 258 std::vector<Stream*> streams_; | 258 std::vector<Stream*> streams_; |
| 259 }; | 259 }; |
| 260 | 260 |
| 261 static const char* kAbsSendTimeLog = | 261 static const char* kAbsSendTimeLog = |
| 262 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; | 262 "RemoteBitrateEstimatorAbsSendTime: Instantiating."; |
| 263 static const char* kSingleStreamLog = | 263 static const char* kSingleStreamLog = |
| 264 "RemoteBitrateEstimatorSingleStream: Instantiating."; | 264 "RemoteBitrateEstimatorSingleStream: Instantiating."; |
| 265 | 265 |
| 266 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { | 266 TEST_F(BitrateEstimatorTest, InstantiatesTOFPerDefaultForVideo) { |
| 267 send_config_.rtp.extensions.push_back( | 267 video_send_config_.rtp.extensions.push_back( |
| 268 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 268 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
| 269 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 269 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 270 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 270 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 271 streams_.push_back(new Stream(this, false)); | 271 streams_.push_back(new Stream(this, false)); |
| 272 EXPECT_TRUE(receiver_log_.Wait()); | 272 EXPECT_TRUE(receiver_log_.Wait()); |
| 273 } | 273 } |
| 274 | 274 |
| 275 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { | 275 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForAudio) { |
| 276 send_config_.rtp.extensions.push_back( | 276 video_send_config_.rtp.extensions.push_back( |
| 277 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 277 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 278 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 278 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 279 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 279 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 280 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 280 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 281 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 281 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 282 streams_.push_back(new Stream(this, true)); | 282 streams_.push_back(new Stream(this, true)); |
| 283 EXPECT_TRUE(receiver_log_.Wait()); | 283 EXPECT_TRUE(receiver_log_.Wait()); |
| 284 } | 284 } |
| 285 | 285 |
| 286 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { | 286 TEST_F(BitrateEstimatorTest, ImmediatelySwitchToASTForVideo) { |
| 287 send_config_.rtp.extensions.push_back( | 287 video_send_config_.rtp.extensions.push_back( |
| 288 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 288 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 289 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 289 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 290 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 290 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 291 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 291 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 292 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 292 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 293 streams_.push_back(new Stream(this, false)); | 293 streams_.push_back(new Stream(this, false)); |
| 294 EXPECT_TRUE(receiver_log_.Wait()); | 294 EXPECT_TRUE(receiver_log_.Wait()); |
| 295 } | 295 } |
| 296 | 296 |
| 297 TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { | 297 TEST_F(BitrateEstimatorTest, SwitchesToASTForAudio) { |
| 298 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 298 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 299 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 299 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 300 streams_.push_back(new Stream(this, true)); | 300 streams_.push_back(new Stream(this, true)); |
| 301 EXPECT_TRUE(receiver_log_.Wait()); | 301 EXPECT_TRUE(receiver_log_.Wait()); |
| 302 | 302 |
| 303 send_config_.rtp.extensions.push_back( | 303 video_send_config_.rtp.extensions.push_back( |
| 304 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); | 304 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId)); |
| 305 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 305 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 306 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 306 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 307 streams_.push_back(new Stream(this, true)); | 307 streams_.push_back(new Stream(this, true)); |
| 308 EXPECT_TRUE(receiver_log_.Wait()); | 308 EXPECT_TRUE(receiver_log_.Wait()); |
| 309 } | 309 } |
| 310 | 310 |
| 311 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { | 311 TEST_F(BitrateEstimatorTest, SwitchesToASTForVideo) { |
| 312 send_config_.rtp.extensions.push_back( | 312 video_send_config_.rtp.extensions.push_back( |
| 313 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 313 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
| 314 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 314 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 315 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 315 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 316 streams_.push_back(new Stream(this, false)); | 316 streams_.push_back(new Stream(this, false)); |
| 317 EXPECT_TRUE(receiver_log_.Wait()); | 317 EXPECT_TRUE(receiver_log_.Wait()); |
| 318 | 318 |
| 319 send_config_.rtp.extensions[0] = | 319 video_send_config_.rtp.extensions[0] = |
| 320 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 320 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); |
| 321 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 321 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 322 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 322 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 323 streams_.push_back(new Stream(this, false)); | 323 streams_.push_back(new Stream(this, false)); |
| 324 EXPECT_TRUE(receiver_log_.Wait()); | 324 EXPECT_TRUE(receiver_log_.Wait()); |
| 325 } | 325 } |
| 326 | 326 |
| 327 TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { | 327 TEST_F(BitrateEstimatorTest, SwitchesToASTThenBackToTOFForVideo) { |
| 328 send_config_.rtp.extensions.push_back( | 328 video_send_config_.rtp.extensions.push_back( |
| 329 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); | 329 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId)); |
| 330 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 330 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 331 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 331 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 332 streams_.push_back(new Stream(this, false)); | 332 streams_.push_back(new Stream(this, false)); |
| 333 EXPECT_TRUE(receiver_log_.Wait()); | 333 EXPECT_TRUE(receiver_log_.Wait()); |
| 334 | 334 |
| 335 send_config_.rtp.extensions[0] = | 335 video_send_config_.rtp.extensions[0] = |
| 336 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); | 336 RtpExtension(RtpExtension::kAbsSendTime, kASTExtensionId); |
| 337 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); | 337 receiver_log_.PushExpectedLogLine("Switching to absolute send time RBE."); |
| 338 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); | 338 receiver_log_.PushExpectedLogLine(kAbsSendTimeLog); |
| 339 streams_.push_back(new Stream(this, false)); | 339 streams_.push_back(new Stream(this, false)); |
| 340 EXPECT_TRUE(receiver_log_.Wait()); | 340 EXPECT_TRUE(receiver_log_.Wait()); |
| 341 | 341 |
| 342 send_config_.rtp.extensions[0] = | 342 video_send_config_.rtp.extensions[0] = |
| 343 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); | 343 RtpExtension(RtpExtension::kTOffset, kTOFExtensionId); |
| 344 receiver_log_.PushExpectedLogLine( | 344 receiver_log_.PushExpectedLogLine( |
| 345 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); | 345 "WrappingBitrateEstimator: Switching to transmission time offset RBE."); |
| 346 receiver_log_.PushExpectedLogLine(kSingleStreamLog); | 346 receiver_log_.PushExpectedLogLine(kSingleStreamLog); |
| 347 streams_.push_back(new Stream(this, false)); | 347 streams_.push_back(new Stream(this, false)); |
| 348 streams_[0]->StopSending(); | 348 streams_[0]->StopSending(); |
| 349 streams_[1]->StopSending(); | 349 streams_[1]->StopSending(); |
| 350 EXPECT_TRUE(receiver_log_.Wait()); | 350 EXPECT_TRUE(receiver_log_.Wait()); |
| 351 } | 351 } |
| 352 } // namespace webrtc | 352 } // namespace webrtc |
| OLD | NEW |