Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: webrtc/video/vie_encoder_unittest.cc

Issue 2684683004: Make sure initial framedrop is off where quality scaling is off. (Closed)
Patch Set: Add test for initial framedrop off where quality scaling off Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « webrtc/video/vie_encoder.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2016 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 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 rtc::CritScope lock(&crit_sect_); 244 rtc::CritScope lock(&crit_sect_);
245 return config_; 245 return config_;
246 } 246 }
247 247
248 void BlockNextEncode() { 248 void BlockNextEncode() {
249 rtc::CritScope lock(&local_crit_sect_); 249 rtc::CritScope lock(&local_crit_sect_);
250 block_next_encode_ = true; 250 block_next_encode_ = true;
251 } 251 }
252 252
253 VideoEncoder::ScalingSettings GetScalingSettings() const override { 253 VideoEncoder::ScalingSettings GetScalingSettings() const override {
254 return VideoEncoder::ScalingSettings(true, 1, 2); 254 if (quality_scaling_)
255 return VideoEncoder::ScalingSettings(true, 1, 2);
256 return VideoEncoder::ScalingSettings(false);
255 } 257 }
256 258
257 void ContinueEncode() { continue_encode_event_.Set(); } 259 void ContinueEncode() { continue_encode_event_.Set(); }
258 260
259 void CheckLastTimeStampsMatch(int64_t ntp_time_ms, 261 void CheckLastTimeStampsMatch(int64_t ntp_time_ms,
260 uint32_t timestamp) const { 262 uint32_t timestamp) const {
261 rtc::CritScope lock(&local_crit_sect_); 263 rtc::CritScope lock(&local_crit_sect_);
262 EXPECT_EQ(timestamp_, timestamp); 264 EXPECT_EQ(timestamp_, timestamp);
263 EXPECT_EQ(ntp_time_ms_, ntp_time_ms); 265 EXPECT_EQ(ntp_time_ms_, ntp_time_ms);
264 } 266 }
265 267
268 void SetQualityScaling(bool b) { quality_scaling_ = b; }
269
266 private: 270 private:
267 int32_t Encode(const VideoFrame& input_image, 271 int32_t Encode(const VideoFrame& input_image,
268 const CodecSpecificInfo* codec_specific_info, 272 const CodecSpecificInfo* codec_specific_info,
269 const std::vector<FrameType>* frame_types) override { 273 const std::vector<FrameType>* frame_types) override {
270 bool block_encode; 274 bool block_encode;
271 { 275 {
272 rtc::CritScope lock(&local_crit_sect_); 276 rtc::CritScope lock(&local_crit_sect_);
273 EXPECT_GT(input_image.timestamp(), timestamp_); 277 EXPECT_GT(input_image.timestamp(), timestamp_);
274 EXPECT_GT(input_image.ntp_time_ms(), ntp_time_ms_); 278 EXPECT_GT(input_image.ntp_time_ms(), ntp_time_ms_);
275 EXPECT_EQ(input_image.timestamp(), input_image.ntp_time_ms() * 90); 279 EXPECT_EQ(input_image.timestamp(), input_image.ntp_time_ms() * 90);
(...skipping 12 matching lines...) Expand all
288 return result; 292 return result;
289 } 293 }
290 294
291 rtc::CriticalSection local_crit_sect_; 295 rtc::CriticalSection local_crit_sect_;
292 bool block_next_encode_ = false; 296 bool block_next_encode_ = false;
293 rtc::Event continue_encode_event_; 297 rtc::Event continue_encode_event_;
294 uint32_t timestamp_ = 0; 298 uint32_t timestamp_ = 0;
295 int64_t ntp_time_ms_ = 0; 299 int64_t ntp_time_ms_ = 0;
296 int last_input_width_ = 0; 300 int last_input_width_ = 0;
297 int last_input_height_ = 0; 301 int last_input_height_ = 0;
302 bool quality_scaling_ = true;
298 }; 303 };
299 304
300 class TestSink : public ViEEncoder::EncoderSink { 305 class TestSink : public ViEEncoder::EncoderSink {
301 public: 306 public:
302 explicit TestSink(TestEncoder* test_encoder) 307 explicit TestSink(TestEncoder* test_encoder)
303 : test_encoder_(test_encoder), encoded_frame_event_(false, false) {} 308 : test_encoder_(test_encoder), encoded_frame_event_(false, false) {}
304 309
305 void WaitForEncodedFrame(int64_t expected_ntp_time) { 310 void WaitForEncodedFrame(int64_t expected_ntp_time) {
306 uint32_t timestamp = 0; 311 uint32_t timestamp = 0;
307 EXPECT_TRUE(encoded_frame_event_.Wait(kDefaultTimeoutMs)); 312 EXPECT_TRUE(encoded_frame_event_.Wait(kDefaultTimeoutMs));
(...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 VideoSendStream::DegradationPreference::kMaintainResolution); 1164 VideoSendStream::DegradationPreference::kMaintainResolution);
1160 1165
1161 video_source_.IncomingCapturedFrame( 1166 video_source_.IncomingCapturedFrame(
1162 CreateFrame(1, frame_width, frame_height)); 1167 CreateFrame(1, frame_width, frame_height));
1163 // Frame should not be dropped, even if it's too large. 1168 // Frame should not be dropped, even if it's too large.
1164 sink_.WaitForEncodedFrame(1); 1169 sink_.WaitForEncodedFrame(1);
1165 1170
1166 vie_encoder_->Stop(); 1171 vie_encoder_->Stop();
1167 } 1172 }
1168 1173
1174 TEST_F(ViEEncoderTest, InitialFrameDropOffWhenEncoderDisabledScaling) {
1175 int frame_width = 640;
1176 int frame_height = 360;
1177 fake_encoder_.SetQualityScaling(false);
1178 vie_encoder_->OnBitrateUpdated(kLowTargetBitrateBps, 0, 0);
1179
1180 video_source_.IncomingCapturedFrame(
1181 CreateFrame(1, frame_width, frame_height));
1182 // Frame should not be dropped, even if it's too large.
1183 sink_.WaitForEncodedFrame(1);
1184
1185 vie_encoder_->Stop();
1186 fake_encoder_.SetQualityScaling(true);
1187 }
1188
1169 // TODO(sprang): Extend this with fps throttling and any "balanced" extensions. 1189 // TODO(sprang): Extend this with fps throttling and any "balanced" extensions.
1170 TEST_F(ViEEncoderTest, AdaptsResolutionOnOveruse) { 1190 TEST_F(ViEEncoderTest, AdaptsResolutionOnOveruse) {
1171 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0); 1191 vie_encoder_->OnBitrateUpdated(kTargetBitrateBps, 0, 0);
1172 1192
1173 const int kFrameWidth = 1280; 1193 const int kFrameWidth = 1280;
1174 const int kFrameHeight = 720; 1194 const int kFrameHeight = 720;
1175 // Enabled default VideoAdapter downscaling. First step is 3/4, not 3/5 as 1195 // Enabled default VideoAdapter downscaling. First step is 3/4, not 3/5 as
1176 // requested by ViEEncoder::VideoSourceProxy::RequestResolutionLowerThan(). 1196 // requested by ViEEncoder::VideoSourceProxy::RequestResolutionLowerThan().
1177 video_source_.set_adaptation_enabled(true); 1197 video_source_.set_adaptation_enabled(true);
1178 1198
1179 video_source_.IncomingCapturedFrame( 1199 video_source_.IncomingCapturedFrame(
1180 CreateFrame(1, kFrameWidth, kFrameHeight)); 1200 CreateFrame(1, kFrameWidth, kFrameHeight));
1181 sink_.WaitForEncodedFrame(kFrameWidth, kFrameHeight); 1201 sink_.WaitForEncodedFrame(kFrameWidth, kFrameHeight);
1182 1202
1183 // Trigger CPU overuse, downscale by 3/4. 1203 // Trigger CPU overuse, downscale by 3/4.
1184 vie_encoder_->TriggerCpuOveruse(); 1204 vie_encoder_->TriggerCpuOveruse();
1185 video_source_.IncomingCapturedFrame( 1205 video_source_.IncomingCapturedFrame(
1186 CreateFrame(2, kFrameWidth, kFrameHeight)); 1206 CreateFrame(2, kFrameWidth, kFrameHeight));
1187 sink_.WaitForEncodedFrame((kFrameWidth * 3) / 4, (kFrameHeight * 3) / 4); 1207 sink_.WaitForEncodedFrame((kFrameWidth * 3) / 4, (kFrameHeight * 3) / 4);
1188 1208
1189 // Trigger CPU normal use, return to original resoluton; 1209 // Trigger CPU normal use, return to original resoluton;
1190 vie_encoder_->TriggerCpuNormalUsage(); 1210 vie_encoder_->TriggerCpuNormalUsage();
1191 video_source_.IncomingCapturedFrame( 1211 video_source_.IncomingCapturedFrame(
1192 CreateFrame(3, kFrameWidth, kFrameHeight)); 1212 CreateFrame(3, kFrameWidth, kFrameHeight));
1193 sink_.WaitForEncodedFrame(kFrameWidth, kFrameHeight); 1213 sink_.WaitForEncodedFrame(kFrameWidth, kFrameHeight);
1194 1214
1195 vie_encoder_->Stop(); 1215 vie_encoder_->Stop();
1196 } 1216 }
1197 } // namespace webrtc 1217 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/video/vie_encoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698