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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 int32_t SetRates(uint32_t newBitRate, uint32_t frameRate) /* override */ { |
| 136 last_set_bitrate_ = static_cast<int32_t>(newBitRate); |
136 return 0; | 137 return 0; |
137 } | 138 } |
138 | 139 |
139 MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); | 140 MOCK_METHOD2(SetChannelParameters, int32_t(uint32_t packetLoss, int64_t rtt)); |
140 | 141 |
141 bool SupportsNativeHandle() const /* override */ { | 142 bool SupportsNativeHandle() const /* override */ { |
142 return supports_native_handle_; | 143 return supports_native_handle_; |
143 } | 144 } |
144 | 145 |
145 virtual ~MockVideoEncoder() {} | 146 virtual ~MockVideoEncoder() {} |
146 | 147 |
147 const VideoCodec& codec() const { return codec_; } | 148 const VideoCodec& codec() const { return codec_; } |
148 | 149 |
149 void SendEncodedImage(int width, int height) { | 150 void SendEncodedImage(int width, int height) { |
150 // Sends a fake image of the given width/height. | 151 // Sends a fake image of the given width/height. |
151 EncodedImage image; | 152 EncodedImage image; |
152 image._encodedWidth = width; | 153 image._encodedWidth = width; |
153 image._encodedHeight = height; | 154 image._encodedHeight = height; |
154 CodecSpecificInfo codecSpecificInfo; | 155 CodecSpecificInfo codecSpecificInfo; |
155 memset(&codecSpecificInfo, 0, sizeof(codecSpecificInfo)); | 156 memset(&codecSpecificInfo, 0, sizeof(codecSpecificInfo)); |
156 callback_->Encoded(image, &codecSpecificInfo, NULL); | 157 callback_->Encoded(image, &codecSpecificInfo, NULL); |
157 } | 158 } |
158 | 159 |
159 void set_supports_native_handle(bool enabled) { | 160 void set_supports_native_handle(bool enabled) { |
160 supports_native_handle_ = enabled; | 161 supports_native_handle_ = enabled; |
161 } | 162 } |
| 163 int32_t last_set_bitrate() const { return last_set_bitrate_; } |
162 | 164 |
163 MOCK_CONST_METHOD0(ImplementationName, const char*()); | 165 MOCK_CONST_METHOD0(ImplementationName, const char*()); |
164 | 166 |
165 private: | 167 private: |
166 bool supports_native_handle_ = false; | 168 bool supports_native_handle_ = false; |
| 169 int32_t last_set_bitrate_ = -1; |
| 170 |
167 VideoCodec codec_; | 171 VideoCodec codec_; |
168 EncodedImageCallback* callback_; | 172 EncodedImageCallback* callback_; |
169 }; | 173 }; |
170 | 174 |
171 class MockVideoEncoderFactory : public VideoEncoderFactory { | 175 class MockVideoEncoderFactory : public VideoEncoderFactory { |
172 public: | 176 public: |
173 VideoEncoder* Create() override { | 177 VideoEncoder* Create() override { |
174 MockVideoEncoder* encoder = new | 178 MockVideoEncoder* encoder = new |
175 ::testing::NiceMock<MockVideoEncoder>(); | 179 ::testing::NiceMock<MockVideoEncoder>(); |
176 const char* encoder_name = encoder_names_.empty() | 180 const char* encoder_name = encoder_names_.empty() |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 codec_.numberOfSimulcastStreams = 1; | 421 codec_.numberOfSimulcastStreams = 1; |
418 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); | 422 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); |
419 adapter_->RegisterEncodeCompleteCallback(this); | 423 adapter_->RegisterEncodeCompleteCallback(this); |
420 ASSERT_EQ(1u, helper_->factory()->encoders().size()); | 424 ASSERT_EQ(1u, helper_->factory()->encoders().size()); |
421 helper_->factory()->encoders()[0]->set_supports_native_handle(true); | 425 helper_->factory()->encoders()[0]->set_supports_native_handle(true); |
422 EXPECT_TRUE(adapter_->SupportsNativeHandle()); | 426 EXPECT_TRUE(adapter_->SupportsNativeHandle()); |
423 helper_->factory()->encoders()[0]->set_supports_native_handle(false); | 427 helper_->factory()->encoders()[0]->set_supports_native_handle(false); |
424 EXPECT_FALSE(adapter_->SupportsNativeHandle()); | 428 EXPECT_FALSE(adapter_->SupportsNativeHandle()); |
425 } | 429 } |
426 | 430 |
| 431 TEST_F(TestSimulcastEncoderAdapterFake, SetRatesUnderMinBitrate) { |
| 432 TestVp8Simulcast::DefaultSettings( |
| 433 &codec_, static_cast<const int*>(kTestTemporalLayerProfile)); |
| 434 codec_.minBitrate = 50; |
| 435 codec_.numberOfSimulcastStreams = 1; |
| 436 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); |
| 437 |
| 438 // Above min should be respected. |
| 439 adapter_->SetRates(100, 30); |
| 440 EXPECT_EQ(100, helper_->factory()->encoders()[0]->last_set_bitrate()); |
| 441 |
| 442 // Below min but non-zero should be replaced with the min bitrate. |
| 443 adapter_->SetRates(15, 30); |
| 444 EXPECT_EQ(50, helper_->factory()->encoders()[0]->last_set_bitrate()); |
| 445 |
| 446 // Zero should be passed on as is, since it means "pause". |
| 447 adapter_->SetRates(0, 30); |
| 448 EXPECT_EQ(0, helper_->factory()->encoders()[0]->last_set_bitrate()); |
| 449 } |
| 450 |
427 TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) { | 451 TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) { |
428 EXPECT_STREQ("SimulcastEncoderAdapter", adapter_->ImplementationName()); | 452 EXPECT_STREQ("SimulcastEncoderAdapter", adapter_->ImplementationName()); |
429 TestVp8Simulcast::DefaultSettings( | 453 TestVp8Simulcast::DefaultSettings( |
430 &codec_, static_cast<const int*>(kTestTemporalLayerProfile)); | 454 &codec_, static_cast<const int*>(kTestTemporalLayerProfile)); |
431 std::vector<const char*> encoder_names; | 455 std::vector<const char*> encoder_names; |
432 encoder_names.push_back("codec1"); | 456 encoder_names.push_back("codec1"); |
433 encoder_names.push_back("codec2"); | 457 encoder_names.push_back("codec2"); |
434 encoder_names.push_back("codec3"); | 458 encoder_names.push_back("codec3"); |
435 helper_->factory()->SetEncoderNames(encoder_names); | 459 helper_->factory()->SetEncoderNames(encoder_names); |
436 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); | 460 EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200)); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 memset(input_frame.video_frame_buffer()->MutableDataV(), 0, | 546 memset(input_frame.video_frame_buffer()->MutableDataV(), 0, |
523 input_frame.allocated_size(kVPlane)); | 547 input_frame.allocated_size(kVPlane)); |
524 | 548 |
525 std::vector<FrameType> frame_types(3, kVideoFrameKey); | 549 std::vector<FrameType> frame_types(3, kVideoFrameKey); |
526 EXPECT_EQ(WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE, | 550 EXPECT_EQ(WEBRTC_VIDEO_CODEC_FALLBACK_SOFTWARE, |
527 adapter_->Encode(input_frame, nullptr, &frame_types)); | 551 adapter_->Encode(input_frame, nullptr, &frame_types)); |
528 } | 552 } |
529 | 553 |
530 } // namespace testing | 554 } // namespace testing |
531 } // namespace webrtc | 555 } // namespace webrtc |
OLD | NEW |