OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 | 10 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 } | 125 } |
126 | 126 |
127 int32_t RegisterEncodeCompleteCallback( | 127 int32_t RegisterEncodeCompleteCallback( |
128 EncodedImageCallback* callback) /* override */ { | 128 EncodedImageCallback* callback) /* override */ { |
129 callback_ = callback; | 129 callback_ = callback; |
130 return 0; | 130 return 0; |
131 } | 131 } |
132 | 132 |
133 int32_t Release() /* override */ { return 0; } | 133 int32_t Release() /* override */ { return 0; } |
134 | 134 |
135 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) /* override */ { | 135 MOCK_METHOD2(SetRates, int32_t(uint32_t newBitRate, uint32_t frameRate)); |
136 return 0; | |
137 } | |
138 | |
139 MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); | 136 MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); |
140 | 137 |
141 bool SupportsNativeHandle() const /* override */ { | 138 bool SupportsNativeHandle() const /* override */ { |
142 return supports_native_handle_; | 139 return supports_native_handle_; |
143 } | 140 } |
144 | 141 |
145 virtual ~MockVideoEncoder() {} | 142 virtual ~MockVideoEncoder() {} |
146 | 143 |
147 const VideoCodec& codec() const { return codec_; } | 144 const VideoCodec& codec() const { return codec_; } |
148 | 145 |
(...skipping 19 matching lines...) Expand all Loading... |
168 EncodedImageCallback* callback_; | 165 EncodedImageCallback* callback_; |
169 }; | 166 }; |
170 | 167 |
171 class MockVideoEncoderFactory : public VideoEncoderFactory { | 168 class MockVideoEncoderFactory : public VideoEncoderFactory { |
172 public: | 169 public: |
173 VideoEncoder* Create() override { | 170 VideoEncoder* Create() override { |
174 MockVideoEncoder* encoder = new MockVideoEncoder(); | 171 MockVideoEncoder* encoder = new MockVideoEncoder(); |
175 const char* encoder_name = encoder_names_.empty() | 172 const char* encoder_name = encoder_names_.empty() |
176 ? "codec_implementation_name" | 173 ? "codec_implementation_name" |
177 : encoder_names_[encoders_.size()]; | 174 : encoder_names_[encoders_.size()]; |
178 ON_CALL(*encoder, ImplementationName()).WillByDefault(Return(encoder_name)); | 175 EXPECT_CALL(*encoder, ImplementationName()) |
| 176 .WillRepeatedly(Return(encoder_name)); |
179 encoders_.push_back(encoder); | 177 encoders_.push_back(encoder); |
180 return encoder; | 178 return encoder; |
181 } | 179 } |
182 | 180 |
183 void Destroy(VideoEncoder* encoder) override { | 181 void Destroy(VideoEncoder* encoder) override { |
184 for (size_t i = 0; i < encoders_.size(); ++i) { | 182 for (size_t i = 0; i < encoders_.size(); ++i) { |
185 if (encoders_[i] == encoder) { | 183 if (encoders_[i] == encoder) { |
186 encoders_.erase(encoders_.begin() + i); | 184 encoders_.erase(encoders_.begin() + i); |
187 break; | 185 break; |
188 } | 186 } |
189 } | 187 } |
190 delete encoder; | 188 delete encoder; |
191 } | 189 } |
192 | 190 |
| 191 void ExpectRates(const std::vector<int>& expected_bitrates_kbps, |
| 192 int expected_framerate) { |
| 193 ASSERT_EQ(encoders_.size(), expected_bitrates_kbps.size()); |
| 194 for (size_t i = 0; i < expected_bitrates_kbps.size(); ++i) { |
| 195 EXPECT_CALL(*encoders_[i], |
| 196 SetRates(expected_bitrates_kbps[i], expected_framerate)) |
| 197 .WillOnce(Return(0)); |
| 198 } |
| 199 } |
| 200 |
193 virtual ~MockVideoEncoderFactory() {} | 201 virtual ~MockVideoEncoderFactory() {} |
194 | 202 |
195 const std::vector<MockVideoEncoder*>& encoders() const { return encoders_; } | 203 const std::vector<MockVideoEncoder*>& encoders() const { return encoders_; } |
196 void SetEncoderNames(const std::vector<const char*>& encoder_names) { | 204 void SetEncoderNames(const std::vector<const char*>& encoder_names) { |
197 encoder_names_ = encoder_names; | 205 encoder_names_ = encoder_names; |
198 } | 206 } |
199 | 207 |
200 private: | 208 private: |
201 std::vector<MockVideoEncoder*> encoders_; | 209 std::vector<MockVideoEncoder*> encoders_; |
202 std::vector<const char*> encoder_names_; | 210 std::vector<const char*> encoder_names_; |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 const uint32_t packetLoss = 5; | 381 const uint32_t packetLoss = 5; |
374 const int64_t rtt = 30; | 382 const int64_t rtt = 30; |
375 helper_->ExpectCallSetChannelParameters(packetLoss, rtt); | 383 helper_->ExpectCallSetChannelParameters(packetLoss, rtt); |
376 adapter_->SetChannelParameters(packetLoss, rtt); | 384 adapter_->SetChannelParameters(packetLoss, rtt); |
377 } | 385 } |
378 | 386 |
379 TEST_F(TestSimulcastEncoderAdapterFake, EncodedCallbackForDifferentEncoders) { | 387 TEST_F(TestSimulcastEncoderAdapterFake, EncodedCallbackForDifferentEncoders) { |
380 SetupCodec(); | 388 SetupCodec(); |
381 | 389 |
382 // Set bitrates so that we send all layers. | 390 // Set bitrates so that we send all layers. |
383 adapter_->SetRates(1200, 30); | 391 int total_bitrate_kbps = 0; |
| 392 std::vector<int> expected_rates_kbps; |
| 393 for (int i = 0; i < codec_.numberOfSimulcastStreams; ++i) { |
| 394 expected_rates_kbps.push_back(codec_.simulcastStream[i].targetBitrate); |
| 395 total_bitrate_kbps += codec_.simulcastStream[i].targetBitrate; |
| 396 } |
| 397 |
| 398 int kFrameRate = 30; |
| 399 helper_->factory()->ExpectRates(expected_rates_kbps, kFrameRate); |
| 400 adapter_->SetRates(total_bitrate_kbps, kFrameRate); |
384 | 401 |
385 // At this point, the simulcast encoder adapter should have 3 streams: HD, | 402 // At this point, the simulcast encoder adapter should have 3 streams: HD, |
386 // quarter HD, and quarter quarter HD. We're going to mostly ignore the exact | 403 // quarter HD, and quarter quarter HD. We're going to mostly ignore the exact |
387 // resolutions, to test that the adapter forwards on the correct resolution | 404 // resolutions, to test that the adapter forwards on the correct resolution |
388 // and simulcast index values, going only off the encoder that generates the | 405 // and simulcast index values, going only off the encoder that generates the |
389 // image. | 406 // image. |
390 EXPECT_EQ(3u, helper_->factory()->encoders().size()); | 407 EXPECT_EQ(3u, helper_->factory()->encoders().size()); |
391 helper_->factory()->encoders()[0]->SendEncodedImage(1152, 704); | 408 helper_->factory()->encoders()[0]->SendEncodedImage(1152, 704); |
392 int width; | 409 int width; |
393 int height; | 410 int height; |
(...skipping 23 matching lines...) Expand all Loading... |
417 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); | 434 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); |
418 adapter_->RegisterEncodeCompleteCallback(this); | 435 adapter_->RegisterEncodeCompleteCallback(this); |
419 ASSERT_EQ(1u, helper_->factory()->encoders().size()); | 436 ASSERT_EQ(1u, helper_->factory()->encoders().size()); |
420 helper_->factory()->encoders()[0]->set_supports_native_handle(true); | 437 helper_->factory()->encoders()[0]->set_supports_native_handle(true); |
421 EXPECT_TRUE(adapter_->SupportsNativeHandle()); | 438 EXPECT_TRUE(adapter_->SupportsNativeHandle()); |
422 helper_->factory()->encoders()[0]->set_supports_native_handle(false); | 439 helper_->factory()->encoders()[0]->set_supports_native_handle(false); |
423 EXPECT_FALSE(adapter_->SupportsNativeHandle()); | 440 EXPECT_FALSE(adapter_->SupportsNativeHandle()); |
424 } | 441 } |
425 | 442 |
426 TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) { | 443 TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) { |
427 EXPECT_STREQ("SimulcastEncoderAdapter", adapter_->ImplementationName()); | 444 EXPECT_STREQ("SimulcastEncoderAdapter (uninitialized)", |
| 445 adapter_->ImplementationName()); |
428 TestVp8Simulcast::DefaultSettings( | 446 TestVp8Simulcast::DefaultSettings( |
429 &codec_, static_cast<const int*>(kTestTemporalLayerProfile)); | 447 &codec_, static_cast<const int*>(kTestTemporalLayerProfile)); |
430 std::vector<const char*> encoder_names; | 448 std::vector<const char*> encoder_names; |
431 encoder_names.push_back("codec1"); | 449 encoder_names.push_back("codec1"); |
432 encoder_names.push_back("codec2"); | 450 encoder_names.push_back("codec2"); |
433 encoder_names.push_back("codec3"); | 451 encoder_names.push_back("codec3"); |
434 helper_->factory()->SetEncoderNames(encoder_names); | 452 helper_->factory()->SetEncoderNames(encoder_names); |
435 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); | 453 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); |
436 EXPECT_STREQ("SimulcastEncoderAdapter (codec1, codec2, codec3)", | 454 EXPECT_STREQ("SimulcastEncoderAdapter (codec1, codec2, codec3)", |
437 adapter_->ImplementationName()); | 455 adapter_->ImplementationName()); |
(...skipping 17 matching lines...) Expand all Loading... |
455 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); | 473 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); |
456 adapter_->RegisterEncodeCompleteCallback(this); | 474 adapter_->RegisterEncodeCompleteCallback(this); |
457 ASSERT_EQ(3u, helper_->factory()->encoders().size()); | 475 ASSERT_EQ(3u, helper_->factory()->encoders().size()); |
458 for (MockVideoEncoder* encoder : helper_->factory()->encoders()) | 476 for (MockVideoEncoder* encoder : helper_->factory()->encoders()) |
459 encoder->set_supports_native_handle(true); | 477 encoder->set_supports_native_handle(true); |
460 EXPECT_FALSE(adapter_->SupportsNativeHandle()); | 478 EXPECT_FALSE(adapter_->SupportsNativeHandle()); |
461 } | 479 } |
462 | 480 |
463 } // namespace testing | 481 } // namespace testing |
464 } // namespace webrtc | 482 } // namespace webrtc |
OLD | NEW |