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

Side by Side Diff: content/renderer/media/media_stream_constraints_util_video_content_unittest.cc

Issue 2806703002: Update constraints algorithm for video content capture. (Closed)
Patch Set: re-add tests Created 3 years, 8 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 | « content/renderer/media/media_stream_constraints_util_video_content.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 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/media_stream_constraints_util_video_content.h" 5 #include "content/renderer/media/media_stream_constraints_util_video_content.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <string> 8 #include <string>
9 9
10 #include "content/renderer/media/mock_constraint_factory.h" 10 #include "content/renderer/media/mock_constraint_factory.h"
11 #include "media/base/limits.h" 11 #include "media/base/limits.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" 13 #include "third_party/WebKit/public/platform/WebMediaConstraints.h"
14 14
15 namespace content { 15 namespace content {
16 16
17 namespace { 17 namespace {
18 18
19 const double kDefaultScreenCastAspectRatio =
20 static_cast<double>(kDefaultScreenCastWidth) /
21 static_cast<double>(kDefaultScreenCastHeight);
22
23 void CheckNonResolutionDefaults(const VideoCaptureSettings& result) { 19 void CheckNonResolutionDefaults(const VideoCaptureSettings& result) {
24 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 20 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
25 EXPECT_EQ(base::Optional<bool>(), result.noise_reduction()); 21 EXPECT_EQ(base::Optional<bool>(), result.noise_reduction());
26 EXPECT_EQ(std::string(), result.device_id()); 22 EXPECT_EQ(std::string(), result.device_id());
27 } 23 }
28 24
29 void CheckNonFrameRateDefaults(const VideoCaptureSettings& result) { 25 void CheckNonFrameRateDefaults(const VideoCaptureSettings& result) {
30 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 26 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
31 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 27 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
32 EXPECT_EQ(base::Optional<bool>(), result.noise_reduction()); 28 EXPECT_EQ(base::Optional<bool>(), result.noise_reduction());
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 result.Width()); 257 result.Width());
262 CheckNonResolutionDefaults(result); 258 CheckNonResolutionDefaults(result);
263 EXPECT_EQ(1.0 / kHeight, result.track_adapter_settings().min_aspect_ratio); 259 EXPECT_EQ(1.0 / kHeight, result.track_adapter_settings().min_aspect_ratio);
264 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kHeight, 260 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kHeight,
265 result.track_adapter_settings().max_aspect_ratio); 261 result.track_adapter_settings().max_aspect_ratio);
266 CheckTrackAdapterSettingsEqualsFormat(result); 262 CheckTrackAdapterSettingsEqualsFormat(result);
267 } 263 }
268 264
269 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinHeight) { 265 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinHeight) {
270 constraint_factory_.Reset(); 266 constraint_factory_.Reset();
271 const int kHeight = 1000; 267 const int kHeight = 2000;
272 constraint_factory_.basic().height.setMin(kHeight); 268 constraint_factory_.basic().height.setMin(kHeight);
273 auto result = SelectSettings(); 269 auto result = SelectSettings();
274 EXPECT_TRUE(result.HasValue()); 270 EXPECT_TRUE(result.HasValue());
275 // kHeight is greater that the default, so expect kHeight. 271 // kHeight is greater that the default, so expect kHeight.
276 EXPECT_EQ(kHeight, result.Height()); 272 EXPECT_EQ(kHeight, result.Height());
277 EXPECT_EQ(std::round(kHeight * kDefaultScreenCastAspectRatio), 273 EXPECT_EQ(std::round(kHeight * kDefaultScreenCastAspectRatio),
278 result.Width()); 274 result.Width());
279 CheckNonResolutionDefaults(result); 275 CheckNonResolutionDefaults(result);
280 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 276 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
281 result.track_adapter_settings().min_aspect_ratio); 277 result.track_adapter_settings().min_aspect_ratio);
(...skipping 10 matching lines...) Expand all
292 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 288 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
293 CheckNonResolutionDefaults(result); 289 CheckNonResolutionDefaults(result);
294 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 290 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
295 result.track_adapter_settings().min_aspect_ratio); 291 result.track_adapter_settings().min_aspect_ratio);
296 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kSmallHeight, 292 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kSmallHeight,
297 result.track_adapter_settings().max_aspect_ratio); 293 result.track_adapter_settings().max_aspect_ratio);
298 CheckTrackAdapterSettingsEqualsFormat(result); 294 CheckTrackAdapterSettingsEqualsFormat(result);
299 } 295 }
300 296
301 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxHeight) { 297 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxHeight) {
302 constraint_factory_.Reset(); 298 // kMaxHeight smaller than the default.
303 const int kHeight = 1000; 299 {
304 constraint_factory_.basic().height.setMax(kHeight); 300 constraint_factory_.Reset();
305 auto result = SelectSettings(); 301 const int kMaxHeight = kDefaultScreenCastHeight - 100;
306 EXPECT_TRUE(result.HasValue()); 302 constraint_factory_.basic().height.setMax(kMaxHeight);
307 // kHeight is greater that the default, so expect the default. 303 auto result = SelectSettings();
308 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 304 EXPECT_TRUE(result.HasValue());
309 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 305 EXPECT_EQ(kMaxHeight, result.Height());
310 CheckNonResolutionDefaults(result); 306 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
311 EXPECT_EQ(1.0 / kHeight, result.track_adapter_settings().min_aspect_ratio); 307 result.Width());
312 EXPECT_EQ(kMaxScreenCastDimension, 308 CheckNonResolutionDefaults(result);
313 result.track_adapter_settings().max_aspect_ratio); 309 EXPECT_EQ(1.0 / kMaxHeight,
314 CheckTrackAdapterSettingsEqualsFormat(result); 310 result.track_adapter_settings().min_aspect_ratio);
311 EXPECT_EQ(kMaxScreenCastDimension,
312 result.track_adapter_settings().max_aspect_ratio);
313 CheckTrackAdapterSettingsEqualsFormat(result);
314 }
315 315
316 const int kSmallHeight = 100; 316 // kMaxHeight greater than the default.
317 constraint_factory_.basic().height.setMax(kSmallHeight); 317 {
318 result = SelectSettings(); 318 constraint_factory_.Reset();
319 EXPECT_TRUE(result.HasValue()); 319 const int kMaxHeight = kDefaultScreenCastHeight + 100;
320 // kSmallHeight is less that the default, so expect kSmallHeight. 320 constraint_factory_.basic().height.setMax(kMaxHeight);
321 EXPECT_EQ(kSmallHeight, result.Height()); 321 auto result = SelectSettings();
322 EXPECT_EQ(std::round(kSmallHeight * kDefaultScreenCastAspectRatio), 322 EXPECT_TRUE(result.HasValue());
323 result.Width()); 323 EXPECT_EQ(kMaxHeight, result.Height());
324 CheckNonResolutionDefaults(result); 324 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
325 EXPECT_EQ(1.0 / kSmallHeight, 325 result.Width());
326 result.track_adapter_settings().min_aspect_ratio); 326 CheckNonResolutionDefaults(result);
327 EXPECT_EQ(kMaxScreenCastDimension, 327 EXPECT_EQ(1.0 / kMaxHeight,
328 result.track_adapter_settings().max_aspect_ratio); 328 result.track_adapter_settings().min_aspect_ratio);
329 CheckTrackAdapterSettingsEqualsFormat(result); 329 EXPECT_EQ(kMaxScreenCastDimension,
330 result.track_adapter_settings().max_aspect_ratio);
331 CheckTrackAdapterSettingsEqualsFormat(result);
332 }
333
334 // kMaxHeight greater than the maximum allowed.
335 {
336 constraint_factory_.Reset();
337 constraint_factory_.basic().height.setMax(kMaxScreenCastDimension + 100);
338 auto result = SelectSettings();
339 EXPECT_TRUE(result.HasValue());
340 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
341 EXPECT_EQ(
342 std::round(kDefaultScreenCastHeight * kDefaultScreenCastAspectRatio),
343 result.Width());
344 CheckNonResolutionDefaults(result);
345 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
346 result.track_adapter_settings().min_aspect_ratio);
347 EXPECT_EQ(kMaxScreenCastDimension,
348 result.track_adapter_settings().max_aspect_ratio);
349 CheckTrackAdapterSettingsEqualsFormat(result);
350 }
330 } 351 }
331 352
332 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) { 353 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) {
333 constraint_factory_.Reset(); 354 // Range includes the default.
334 { 355 {
335 const int kMinHeight = 300; 356 constraint_factory_.Reset();
336 const int kMaxHeight = 1000; 357 const int kMinHeight = kDefaultScreenCastHeight - 100;
358 const int kMaxHeight = kDefaultScreenCastHeight + 100;
337 constraint_factory_.basic().height.setMin(kMinHeight); 359 constraint_factory_.basic().height.setMin(kMinHeight);
338 constraint_factory_.basic().height.setMax(kMaxHeight); 360 constraint_factory_.basic().height.setMax(kMaxHeight);
339 auto result = SelectSettings(); 361 auto result = SelectSettings();
340 EXPECT_TRUE(result.HasValue()); 362 EXPECT_TRUE(result.HasValue());
341 // The range includes the default, so expect the default. 363 EXPECT_EQ(kMaxHeight, result.Height());
342 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 364 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
343 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 365 result.Width());
344 CheckNonResolutionDefaults(result); 366 CheckNonResolutionDefaults(result);
345 EXPECT_EQ(1.0 / kMaxHeight, 367 EXPECT_EQ(1.0 / kMaxHeight,
346 result.track_adapter_settings().min_aspect_ratio); 368 result.track_adapter_settings().min_aspect_ratio);
347 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight, 369 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
348 result.track_adapter_settings().max_aspect_ratio); 370 result.track_adapter_settings().max_aspect_ratio);
349 CheckTrackAdapterSettingsEqualsFormat(result); 371 CheckTrackAdapterSettingsEqualsFormat(result);
350 } 372 }
351 373
374 // The whole range is greater than the default.
352 { 375 {
353 const int kMinHeight = 900; 376 constraint_factory_.Reset();
354 const int kMaxHeight = 1000; 377 const int kMinHeight = kDefaultScreenCastHeight + 100;
378 const int kMaxHeight = kDefaultScreenCastHeight + 200;
355 constraint_factory_.basic().height.setMin(kMinHeight); 379 constraint_factory_.basic().height.setMin(kMinHeight);
356 constraint_factory_.basic().height.setMax(kMaxHeight); 380 constraint_factory_.basic().height.setMax(kMaxHeight);
357 auto result = SelectSettings(); 381 auto result = SelectSettings();
358 EXPECT_TRUE(result.HasValue()); 382 EXPECT_TRUE(result.HasValue());
359 // The whole range is greater than the default, so expect the range minimum. 383 EXPECT_EQ(kMaxHeight, result.Height());
360 EXPECT_EQ(kMinHeight, result.Height()); 384 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
361 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
362 result.Width()); 385 result.Width());
363 CheckNonResolutionDefaults(result); 386 CheckNonResolutionDefaults(result);
364 EXPECT_EQ(1.0 / kMaxHeight, 387 EXPECT_EQ(1.0 / kMaxHeight,
365 result.track_adapter_settings().min_aspect_ratio); 388 result.track_adapter_settings().min_aspect_ratio);
366 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight, 389 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
367 result.track_adapter_settings().max_aspect_ratio); 390 result.track_adapter_settings().max_aspect_ratio);
368 CheckTrackAdapterSettingsEqualsFormat(result); 391 CheckTrackAdapterSettingsEqualsFormat(result);
369 } 392 }
370 393
394 // The whole range is less than the default.
371 { 395 {
372 const int kMinHeight = 300; 396 constraint_factory_.Reset();
373 const int kMaxHeight = 400; 397 const int kMinHeight = kDefaultScreenCastHeight - 200;
398 const int kMaxHeight = kDefaultScreenCastHeight - 100;
374 constraint_factory_.basic().height.setMin(kMinHeight); 399 constraint_factory_.basic().height.setMin(kMinHeight);
375 constraint_factory_.basic().height.setMax(kMaxHeight); 400 constraint_factory_.basic().height.setMax(kMaxHeight);
376 auto result = SelectSettings(); 401 auto result = SelectSettings();
377 EXPECT_TRUE(result.HasValue()); 402 EXPECT_TRUE(result.HasValue());
378 // The whole range is less than the default, so expect the range maximum.
379 EXPECT_EQ(kMaxHeight, result.Height()); 403 EXPECT_EQ(kMaxHeight, result.Height());
380 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio), 404 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
381 result.Width()); 405 result.Width());
382 CheckNonResolutionDefaults(result); 406 CheckNonResolutionDefaults(result);
383 EXPECT_EQ(1.0 / kMaxHeight, 407 EXPECT_EQ(1.0 / kMaxHeight,
384 result.track_adapter_settings().min_aspect_ratio); 408 result.track_adapter_settings().min_aspect_ratio);
385 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight, 409 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
386 result.track_adapter_settings().max_aspect_ratio); 410 result.track_adapter_settings().max_aspect_ratio);
387 CheckTrackAdapterSettingsEqualsFormat(result); 411 CheckTrackAdapterSettingsEqualsFormat(result);
388 } 412 }
389 } 413 }
390 414
391 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealHeight) { 415 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealHeight) {
392 // Unconstrained. 416 // Unconstrained.
393 { 417 {
394 constraint_factory_.Reset(); 418 constraint_factory_.Reset();
395 const int kIdealHeight = 1000; 419 const int kIdealHeight = 1000;
396 constraint_factory_.basic().height.setIdeal(kIdealHeight); 420 constraint_factory_.basic().height.setIdeal(kIdealHeight);
397 auto result = SelectSettings(); 421 auto result = SelectSettings();
398 EXPECT_TRUE(result.HasValue()); 422 EXPECT_TRUE(result.HasValue());
399 EXPECT_EQ(kIdealHeight, result.Height()); 423 EXPECT_EQ(kIdealHeight, result.Height());
400 // When ideal height is given, the algorithm returns a width that is closest 424 // When ideal height is given, the algorithm returns a width that is closest
401 // to height * kDefaultAspectRatio. 425 // to height * kDefaultScreenCastAspectRatio.
402 EXPECT_EQ(std::round(kIdealHeight * kDefaultScreenCastAspectRatio), 426 EXPECT_EQ(std::round(kIdealHeight * kDefaultScreenCastAspectRatio),
403 result.Width()); 427 result.Width());
404 CheckNonResolutionDefaults(result); 428 CheckNonResolutionDefaults(result);
405 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 429 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
406 } 430 }
407 431
408 // Ideal greater than maximum. 432 // Ideal greater than maximum.
409 { 433 {
410 constraint_factory_.Reset(); 434 constraint_factory_.Reset();
411 const int kIdealHeight = 1000; 435 const int kIdealHeight = 1000;
412 const int kMaxHeight = 800; 436 const int kMaxHeight = 800;
413 constraint_factory_.basic().height.setIdeal(kIdealHeight); 437 constraint_factory_.basic().height.setIdeal(kIdealHeight);
414 constraint_factory_.basic().height.setMax(kMaxHeight); 438 constraint_factory_.basic().height.setMax(kMaxHeight);
415 auto result = SelectSettings(); 439 auto result = SelectSettings();
416 EXPECT_TRUE(result.HasValue()); 440 EXPECT_TRUE(result.HasValue());
417 // Ideal height is greater than the maximum, expect maximum. 441 // Ideal height is greater than the maximum, expect maximum.
418 EXPECT_EQ(kMaxHeight, result.Height()); 442 EXPECT_EQ(kMaxHeight, result.Height());
419 // Expect closest to kMaxHeight * kDefaultAspectRatio. 443 // Expect closest to kMaxHeight * kDefaultScreenCastAspectRatio.
420 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio), 444 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
421 result.Width()); 445 result.Width());
422 CheckNonResolutionDefaults(result); 446 CheckNonResolutionDefaults(result);
423 EXPECT_EQ(1.0 / kMaxHeight, 447 EXPECT_EQ(1.0 / kMaxHeight,
424 result.track_adapter_settings().min_aspect_ratio); 448 result.track_adapter_settings().min_aspect_ratio);
425 EXPECT_EQ(kMaxScreenCastDimension, 449 EXPECT_EQ(kMaxScreenCastDimension,
426 result.track_adapter_settings().max_aspect_ratio); 450 result.track_adapter_settings().max_aspect_ratio);
427 CheckTrackAdapterSettingsEqualsFormat(result); 451 CheckTrackAdapterSettingsEqualsFormat(result);
428 } 452 }
429 453
430 // Ideal less than minimum. 454 // Ideal less than minimum.
431 { 455 {
432 constraint_factory_.Reset(); 456 constraint_factory_.Reset();
433 const int kIdealHeight = 1000; 457 const int kIdealHeight = 1000;
434 const int kMinHeight = 1200; 458 const int kMinHeight = 1200;
435 constraint_factory_.basic().height.setIdeal(kIdealHeight); 459 constraint_factory_.basic().height.setIdeal(kIdealHeight);
436 constraint_factory_.basic().height.setMin(kMinHeight); 460 constraint_factory_.basic().height.setMin(kMinHeight);
437 auto result = SelectSettings(); 461 auto result = SelectSettings();
438 EXPECT_TRUE(result.HasValue()); 462 EXPECT_TRUE(result.HasValue());
439 // Ideal height is less than the minimum, expect minimum. 463 // Ideal height is less than the minimum, expect minimum.
440 EXPECT_EQ(kMinHeight, result.Height()); 464 EXPECT_EQ(kMinHeight, result.Height());
441 // Expect closest to kMinHeight * kDefaultAspectRatio. 465 // Expect closest to kMinHeight * kDefaultScreenCastAspectRatio.
442 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio), 466 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
443 result.Width()); 467 result.Width());
444 CheckNonResolutionDefaults(result); 468 CheckNonResolutionDefaults(result);
445 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 469 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
446 result.track_adapter_settings().min_aspect_ratio); 470 result.track_adapter_settings().min_aspect_ratio);
447 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight, 471 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
448 result.track_adapter_settings().max_aspect_ratio); 472 result.track_adapter_settings().max_aspect_ratio);
449 CheckTrackAdapterSettingsEqualsFormat(result); 473 CheckTrackAdapterSettingsEqualsFormat(result);
450 } 474 }
451 475
452 // Ideal intersects a box. 476 // Ideal intersects a box.
453 { 477 {
454 constraint_factory_.Reset(); 478 constraint_factory_.Reset();
455 constraint_factory_.basic().height.setMin(500); 479 constraint_factory_.basic().height.setMin(500);
456 constraint_factory_.basic().height.setMax(1000); 480 constraint_factory_.basic().height.setMax(1000);
457 constraint_factory_.basic().width.setMin(100); 481 constraint_factory_.basic().width.setMin(100);
458 constraint_factory_.basic().width.setMax(500); 482 constraint_factory_.basic().width.setMax(500);
459 const int kIdealHeight = 750; 483 const int kIdealHeight = 750;
460 constraint_factory_.basic().height.setIdeal(kIdealHeight); 484 constraint_factory_.basic().height.setIdeal(kIdealHeight);
461 auto result = SelectSettings(); 485 auto result = SelectSettings();
462 EXPECT_TRUE(result.HasValue()); 486 EXPECT_TRUE(result.HasValue());
463 // Ideal height is included in the bounding box. 487 // Ideal height is included in the bounding box.
464 EXPECT_EQ(kIdealHeight, result.Height()); 488 EXPECT_EQ(kIdealHeight, result.Height());
465 // Expect width closest to kIdealHeight * kDefaultAspectRatio, which is 489 double default_aspect_ratio =
466 // outside the box. Closest is max width. 490 static_cast<double>(constraint_factory_.basic().width.max()) /
467 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width()); 491 constraint_factory_.basic().height.max();
492 // Expect width closest to kIdealHeight * default aspect ratio.
493 EXPECT_EQ(std::round(kIdealHeight * default_aspect_ratio), result.Width());
468 CheckNonResolutionDefaults(result); 494 CheckNonResolutionDefaults(result);
469 EXPECT_EQ(100.0 / 1000.0, result.track_adapter_settings().min_aspect_ratio); 495 EXPECT_EQ(100.0 / 1000.0, result.track_adapter_settings().min_aspect_ratio);
470 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio); 496 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
471 CheckTrackAdapterSettingsEqualsFormat(result);
472
473 constraint_factory_.basic().width.setMin(1200);
474 constraint_factory_.basic().width.setMax(2000);
475 result = SelectSettings();
476 EXPECT_TRUE(result.HasValue());
477 EXPECT_EQ(kIdealHeight, result.Height());
478 // kIdealHeight * kDefaultAspectRatio is outside the box. Closest is
479 // min width.
480 EXPECT_EQ(constraint_factory_.basic().width.min(), result.Width());
481 CheckNonResolutionDefaults(result);
482 EXPECT_EQ(1200.0 / 1000.0,
483 result.track_adapter_settings().min_aspect_ratio);
484 EXPECT_EQ(2000.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
485 CheckTrackAdapterSettingsEqualsFormat(result);
486
487 constraint_factory_.basic().width.setMin(100);
488 constraint_factory_.basic().width.setMax(500);
489 result = SelectSettings();
490 EXPECT_TRUE(result.HasValue());
491 EXPECT_EQ(kIdealHeight, result.Height());
492 // kIdealHeight * kDefaultAspectRatio is outside the box. Closest is
493 // max width.
494 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
495 CheckNonResolutionDefaults(result);
496 EXPECT_EQ(100.0 / 1000.0, result.track_adapter_settings().min_aspect_ratio);
497 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
498 CheckTrackAdapterSettingsEqualsFormat(result); 497 CheckTrackAdapterSettingsEqualsFormat(result);
499 } 498 }
500 499
501 // Ideal outside the box, closest to the side coinciding with max height. 500 // Ideal outside the box, closest to the side coinciding with max height.
502 { 501 {
503 const int kMaxHeight = 1000; 502 const int kMaxHeight = 1000;
504 constraint_factory_.Reset(); 503 constraint_factory_.Reset();
505 constraint_factory_.basic().height.setMin(500); 504 constraint_factory_.basic().height.setMin(500);
506 constraint_factory_.basic().height.setMax(kMaxHeight); 505 constraint_factory_.basic().height.setMax(kMaxHeight);
507 constraint_factory_.basic().width.setMin(100); 506 constraint_factory_.basic().width.setMin(100);
508 constraint_factory_.basic().width.setMax(500); 507 constraint_factory_.basic().width.setMax(500);
509 constraint_factory_.basic().height.setIdeal(1200); 508 constraint_factory_.basic().height.setIdeal(1200);
510 auto result = SelectSettings(); 509 auto result = SelectSettings();
511 EXPECT_TRUE(result.HasValue()); 510 EXPECT_TRUE(result.HasValue());
512 EXPECT_EQ(kMaxHeight, result.Height()); 511 EXPECT_EQ(kMaxHeight, result.Height());
513 // Expect width closest to kMaxHeight * kDefaultAspectRatio, which is 512 // Expect width closest to kMaxHeight * default aspect ratio, which is
514 // outside the box. Closest it max width. 513 // outside the box. Closest it max width.
515 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width()); 514 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
516 CheckNonResolutionDefaults(result); 515 CheckNonResolutionDefaults(result);
517 EXPECT_EQ(100.0 / kMaxHeight, 516 EXPECT_EQ(100.0 / kMaxHeight,
518 result.track_adapter_settings().min_aspect_ratio); 517 result.track_adapter_settings().min_aspect_ratio);
519 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio); 518 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
520 CheckTrackAdapterSettingsEqualsFormat(result); 519 CheckTrackAdapterSettingsEqualsFormat(result);
521
522 constraint_factory_.basic().width.setMin(1500);
523 constraint_factory_.basic().width.setMax(2000);
524 result = SelectSettings();
525 EXPECT_TRUE(result.HasValue());
526 EXPECT_EQ(kMaxHeight, result.Height());
527 // kMaxHeight * kDefaultAspectRatio is outside the box. Closest is min
528 // width.
529 EXPECT_EQ(constraint_factory_.basic().width.min(), result.Width());
530 CheckNonResolutionDefaults(result);
531 EXPECT_EQ(1500.0 / kMaxHeight,
532 result.track_adapter_settings().min_aspect_ratio);
533 EXPECT_EQ(2000.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
534 CheckTrackAdapterSettingsEqualsFormat(result);
535
536 constraint_factory_.basic().width.setMin(100);
537 result = SelectSettings();
538 EXPECT_TRUE(result.HasValue());
539 EXPECT_EQ(kMaxHeight, result.Height());
540 // kMaxHeight * kDefaultAspectRatio is within the width limits.
541 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
542 result.Width());
543 CheckNonResolutionDefaults(result);
544 EXPECT_EQ(100.0 / kMaxHeight,
545 result.track_adapter_settings().min_aspect_ratio);
546 EXPECT_EQ(2000.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
547 CheckTrackAdapterSettingsEqualsFormat(result);
548 } 520 }
549 521
550 // Ideal outside the constrained set, closest to a single point. 522 // Ideal outside the constrained set, closest to a single point.
551 { 523 {
552 constraint_factory_.Reset(); 524 constraint_factory_.Reset();
553 constraint_factory_.basic().height.setMin(500); 525 constraint_factory_.basic().height.setMin(500);
554 constraint_factory_.basic().height.setMax(1000); 526 constraint_factory_.basic().height.setMax(1000);
555 constraint_factory_.basic().width.setMin(500); 527 constraint_factory_.basic().width.setMin(500);
556 constraint_factory_.basic().width.setMax(1000); 528 constraint_factory_.basic().width.setMax(1000);
557 constraint_factory_.basic().aspectRatio.setMin(1.0); 529 constraint_factory_.basic().aspectRatio.setMin(1.0);
(...skipping 22 matching lines...) Expand all
580 CheckNonResolutionDefaults(result); 552 CheckNonResolutionDefaults(result);
581 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension, 553 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension,
582 result.track_adapter_settings().min_aspect_ratio); 554 result.track_adapter_settings().min_aspect_ratio);
583 EXPECT_EQ(static_cast<double>(kWidth) / kMinScreenCastDimension, 555 EXPECT_EQ(static_cast<double>(kWidth) / kMinScreenCastDimension,
584 result.track_adapter_settings().max_aspect_ratio); 556 result.track_adapter_settings().max_aspect_ratio);
585 CheckTrackAdapterSettingsEqualsFormat(result); 557 CheckTrackAdapterSettingsEqualsFormat(result);
586 } 558 }
587 559
588 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinWidth) { 560 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinWidth) {
589 constraint_factory_.Reset(); 561 constraint_factory_.Reset();
590 const int kWidth = 1000; 562 const int kWidth = 3000;
591 constraint_factory_.basic().width.setMin(kWidth); 563 constraint_factory_.basic().width.setMin(kWidth);
592 auto result = SelectSettings(); 564 auto result = SelectSettings();
593 EXPECT_TRUE(result.HasValue()); 565 EXPECT_TRUE(result.HasValue());
594 // kWidth is greater that the default, so expect kWidth. 566 // kWidth is greater that the default, so expect kWidth.
595 EXPECT_EQ(kWidth, result.Width()); 567 EXPECT_EQ(kWidth, result.Width());
596 EXPECT_EQ(std::round(kWidth / kDefaultScreenCastAspectRatio), 568 EXPECT_EQ(std::round(kWidth / kDefaultScreenCastAspectRatio),
597 result.Height()); 569 result.Height());
598 CheckNonResolutionDefaults(result); 570 CheckNonResolutionDefaults(result);
599 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension, 571 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension,
600 result.track_adapter_settings().min_aspect_ratio); 572 result.track_adapter_settings().min_aspect_ratio);
(...skipping 12 matching lines...) Expand all
613 CheckNonResolutionDefaults(result); 585 CheckNonResolutionDefaults(result);
614 EXPECT_EQ(static_cast<double>(kSmallWidth) / kMaxScreenCastDimension, 586 EXPECT_EQ(static_cast<double>(kSmallWidth) / kMaxScreenCastDimension,
615 result.track_adapter_settings().min_aspect_ratio); 587 result.track_adapter_settings().min_aspect_ratio);
616 EXPECT_EQ( 588 EXPECT_EQ(
617 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 589 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
618 result.track_adapter_settings().max_aspect_ratio); 590 result.track_adapter_settings().max_aspect_ratio);
619 CheckTrackAdapterSettingsEqualsFormat(result); 591 CheckTrackAdapterSettingsEqualsFormat(result);
620 } 592 }
621 593
622 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxWidth) { 594 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxWidth) {
623 constraint_factory_.Reset(); 595 // kMaxWidth less than the default.
624 const int kWidth = 1000; 596 {
625 constraint_factory_.basic().width.setMax(kWidth); 597 constraint_factory_.Reset();
626 auto result = SelectSettings(); 598 const int kMaxWidth = kDefaultScreenCastWidth - 100;
627 EXPECT_TRUE(result.HasValue()); 599 constraint_factory_.basic().width.setMax(kMaxWidth);
628 // kWidth is greater that the default, so expect the default. 600 auto result = SelectSettings();
629 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 601 EXPECT_TRUE(result.HasValue());
630 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 602 // kSmallWidth is less that the default, so expect kSmallWidth.
631 CheckNonResolutionDefaults(result); 603 EXPECT_EQ(kMaxWidth, result.Width());
632 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 604 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
633 result.track_adapter_settings().min_aspect_ratio); 605 result.Height());
634 EXPECT_EQ(static_cast<double>(kWidth) / kMinScreenCastDimension, 606 CheckNonResolutionDefaults(result);
635 result.track_adapter_settings().max_aspect_ratio); 607 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
636 CheckTrackAdapterSettingsEqualsFormat(result); 608 result.track_adapter_settings().min_aspect_ratio);
609 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
610 result.track_adapter_settings().max_aspect_ratio);
611 CheckTrackAdapterSettingsEqualsFormat(result);
612 }
637 613
638 const int kSmallWidth = 100; 614 // kMaxWidth greater than the default.
639 constraint_factory_.basic().width.setMax(kSmallWidth); 615 {
640 result = SelectSettings(); 616 constraint_factory_.Reset();
641 EXPECT_TRUE(result.HasValue()); 617 const int kMaxWidth = kDefaultScreenCastWidth + 100;
642 // kSmallWidth is less that the default, so expect kSmallWidth. 618 constraint_factory_.basic().width.setMax(kMaxWidth);
643 EXPECT_EQ(kSmallWidth, result.Width()); 619 auto result = SelectSettings();
644 EXPECT_EQ(std::round(kSmallWidth / kDefaultScreenCastAspectRatio), 620 EXPECT_TRUE(result.HasValue());
645 result.Height()); 621 // kSmallWidth is less that the default, so expect kSmallWidth.
646 CheckNonResolutionDefaults(result); 622 EXPECT_EQ(kMaxWidth, result.Width());
647 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 623 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
648 result.track_adapter_settings().min_aspect_ratio); 624 result.Height());
649 EXPECT_EQ(static_cast<double>(kSmallWidth) / kMinScreenCastDimension, 625 CheckNonResolutionDefaults(result);
650 result.track_adapter_settings().max_aspect_ratio); 626 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
651 CheckTrackAdapterSettingsEqualsFormat(result); 627 result.track_adapter_settings().min_aspect_ratio);
628 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
629 result.track_adapter_settings().max_aspect_ratio);
630 CheckTrackAdapterSettingsEqualsFormat(result);
631 }
632
633 // kMaxWidth greater than the maximum allowed (gets ignored).
634 {
635 constraint_factory_.Reset();
636 constraint_factory_.basic().width.setMax(kMaxScreenCastDimension + 100);
637 auto result = SelectSettings();
638 EXPECT_TRUE(result.HasValue());
639 // kSmallWidth is less that the default, so expect kSmallWidth.
640 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
641 EXPECT_EQ(
642 std::round(kDefaultScreenCastWidth / kDefaultScreenCastAspectRatio),
643 result.Height());
644 CheckNonResolutionDefaults(result);
645 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
646 result.track_adapter_settings().min_aspect_ratio);
647 EXPECT_EQ(
648 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
649 result.track_adapter_settings().max_aspect_ratio);
650 CheckTrackAdapterSettingsEqualsFormat(result);
651 }
652 } 652 }
653 653
654 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) { 654 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) {
655 constraint_factory_.Reset(); 655 // The whole range is less than the default.
656 { 656 {
657 const int kMinWidth = 300; 657 constraint_factory_.Reset();
658 const int kMaxWidth = 1000; 658 const int kMinWidth = kDefaultScreenCastWidth - 200;
659 const int kMaxWidth = kDefaultScreenCastWidth - 100;
659 constraint_factory_.basic().width.setMin(kMinWidth); 660 constraint_factory_.basic().width.setMin(kMinWidth);
660 constraint_factory_.basic().width.setMax(kMaxWidth); 661 constraint_factory_.basic().width.setMax(kMaxWidth);
661 auto result = SelectSettings(); 662 auto result = SelectSettings();
662 EXPECT_TRUE(result.HasValue()); 663 EXPECT_TRUE(result.HasValue());
663 // The range includes the default, so expect the default. 664 EXPECT_EQ(kMaxWidth, result.Width());
664 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 665 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
665 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 666 result.Height());
666 CheckNonResolutionDefaults(result); 667 CheckNonResolutionDefaults(result);
667 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension, 668 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
668 result.track_adapter_settings().min_aspect_ratio); 669 result.track_adapter_settings().min_aspect_ratio);
669 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 670 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
670 result.track_adapter_settings().max_aspect_ratio); 671 result.track_adapter_settings().max_aspect_ratio);
671 CheckTrackAdapterSettingsEqualsFormat(result); 672 CheckTrackAdapterSettingsEqualsFormat(result);
672 } 673 }
673 674
675 // The range includes the default.
674 { 676 {
675 const int kMinWidth = 900; 677 constraint_factory_.Reset();
676 const int kMaxWidth = 1000; 678 const int kMinWidth = kDefaultScreenCastWidth - 100;
679 const int kMaxWidth = kDefaultScreenCastWidth + 100;
677 constraint_factory_.basic().width.setMin(kMinWidth); 680 constraint_factory_.basic().width.setMin(kMinWidth);
678 constraint_factory_.basic().width.setMax(kMaxWidth); 681 constraint_factory_.basic().width.setMax(kMaxWidth);
679 auto result = SelectSettings(); 682 auto result = SelectSettings();
680 EXPECT_TRUE(result.HasValue()); 683 EXPECT_TRUE(result.HasValue());
681 // The whole range is greater than the default, so expect the range minimum. 684 EXPECT_EQ(kMaxWidth, result.Width());
682 EXPECT_EQ(kMinWidth, result.Width()); 685 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
683 EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio),
684 result.Height()); 686 result.Height());
685 CheckNonResolutionDefaults(result); 687 CheckNonResolutionDefaults(result);
686 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension, 688 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
687 result.track_adapter_settings().min_aspect_ratio); 689 result.track_adapter_settings().min_aspect_ratio);
688 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 690 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
689 result.track_adapter_settings().max_aspect_ratio); 691 result.track_adapter_settings().max_aspect_ratio);
690 CheckTrackAdapterSettingsEqualsFormat(result); 692 CheckTrackAdapterSettingsEqualsFormat(result);
691 } 693 }
692 694
695 // The whole range is greater than the default.
693 { 696 {
694 const int kMinWidth = 300; 697 constraint_factory_.Reset();
695 const int kMaxWidth = 400; 698 const int kMinWidth = kDefaultScreenCastWidth + 100;
699 const int kMaxWidth = kDefaultScreenCastWidth + 200;
696 constraint_factory_.basic().width.setMin(kMinWidth); 700 constraint_factory_.basic().width.setMin(kMinWidth);
697 constraint_factory_.basic().width.setMax(kMaxWidth); 701 constraint_factory_.basic().width.setMax(kMaxWidth);
698 auto result = SelectSettings(); 702 auto result = SelectSettings();
699 EXPECT_TRUE(result.HasValue()); 703 EXPECT_TRUE(result.HasValue());
700 // The whole range is less than the default, so expect the range maximum.
701 EXPECT_EQ(kMaxWidth, result.Width()); 704 EXPECT_EQ(kMaxWidth, result.Width());
702 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio), 705 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
703 result.Height()); 706 result.Height());
704 CheckNonResolutionDefaults(result); 707 CheckNonResolutionDefaults(result);
705 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension, 708 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
706 result.track_adapter_settings().min_aspect_ratio); 709 result.track_adapter_settings().min_aspect_ratio);
707 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 710 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
708 result.track_adapter_settings().max_aspect_ratio); 711 result.track_adapter_settings().max_aspect_ratio);
709 CheckTrackAdapterSettingsEqualsFormat(result); 712 CheckTrackAdapterSettingsEqualsFormat(result);
710 } 713 }
711 } 714 }
712 715
713 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealWidth) { 716 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealWidth) {
714 // Unconstrained 717 // Unconstrained
715 { 718 {
716 constraint_factory_.Reset(); 719 constraint_factory_.Reset();
717 const int kIdealWidth = 1000; 720 const int kIdealWidth = 1000;
718 constraint_factory_.basic().width.setIdeal(kIdealWidth); 721 constraint_factory_.basic().width.setIdeal(kIdealWidth);
719 auto result = SelectSettings(); 722 auto result = SelectSettings();
720 EXPECT_TRUE(result.HasValue()); 723 EXPECT_TRUE(result.HasValue());
721 EXPECT_EQ(kIdealWidth, result.Width()); 724 EXPECT_EQ(kIdealWidth, result.Width());
722 // When ideal width is given, the algorithm returns a height that is closest 725 // When ideal width is given, the algorithm returns a height that is closest
723 // to width / kDefaultAspectRatio. 726 // to width / kDefaultScreenCastAspectRatio.
724 EXPECT_EQ(std::round(kIdealWidth / kDefaultScreenCastAspectRatio), 727 EXPECT_EQ(std::round(kIdealWidth / kDefaultScreenCastAspectRatio),
725 result.Height()); 728 result.Height());
726 CheckNonResolutionDefaults(result); 729 CheckNonResolutionDefaults(result);
727 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 730 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
728 } 731 }
729 732
730 // Ideal greater than maximum. 733 // Ideal greater than maximum.
731 { 734 {
732 constraint_factory_.Reset(); 735 constraint_factory_.Reset();
733 const int kIdealWidth = 1000; 736 const int kIdealWidth = 1000;
734 const int kMaxWidth = 800; 737 const int kMaxWidth = 800;
735 constraint_factory_.basic().width.setIdeal(kIdealWidth); 738 constraint_factory_.basic().width.setIdeal(kIdealWidth);
736 constraint_factory_.basic().width.setMax(kMaxWidth); 739 constraint_factory_.basic().width.setMax(kMaxWidth);
737 auto result = SelectSettings(); 740 auto result = SelectSettings();
738 EXPECT_TRUE(result.HasValue()); 741 EXPECT_TRUE(result.HasValue());
739 EXPECT_EQ(kMaxWidth, result.Width()); 742 EXPECT_EQ(kMaxWidth, result.Width());
740 // Expect closest to kMaxWidth / kDefaultAspectRatio. 743 // Expect closest to kMaxWidth / kDefaultScreenCastAspectRatio.
741 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio), 744 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
742 result.Height()); 745 result.Height());
743 CheckNonResolutionDefaults(result); 746 CheckNonResolutionDefaults(result);
744 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 747 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
745 result.track_adapter_settings().min_aspect_ratio); 748 result.track_adapter_settings().min_aspect_ratio);
746 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 749 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
747 result.track_adapter_settings().max_aspect_ratio); 750 result.track_adapter_settings().max_aspect_ratio);
748 CheckTrackAdapterSettingsEqualsFormat(result); 751 CheckTrackAdapterSettingsEqualsFormat(result);
749 } 752 }
750 753
751 // Ideal less than minimum. 754 // Ideal less than minimum.
752 { 755 {
753 constraint_factory_.Reset(); 756 constraint_factory_.Reset();
754 const int kIdealWidth = 1000; 757 const int kIdealWidth = 1000;
755 const int kMinWidth = 1200; 758 const int kMinWidth = 1200;
756 constraint_factory_.basic().width.setIdeal(kIdealWidth); 759 constraint_factory_.basic().width.setIdeal(kIdealWidth);
757 constraint_factory_.basic().width.setMin(kMinWidth); 760 constraint_factory_.basic().width.setMin(kMinWidth);
758 auto result = SelectSettings(); 761 auto result = SelectSettings();
759 EXPECT_TRUE(result.HasValue()); 762 EXPECT_TRUE(result.HasValue());
760 EXPECT_EQ(kMinWidth, result.Width()); 763 EXPECT_EQ(kMinWidth, result.Width());
761 // Expect closest to kMinWidth / kDefaultAspectRatio. 764 // Expect closest to kMinWidth / kDefaultScreenCastAspectRatio.
762 EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio), 765 EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio),
763 result.Height()); 766 result.Height());
764 CheckNonResolutionDefaults(result); 767 CheckNonResolutionDefaults(result);
765 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension, 768 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
766 result.track_adapter_settings().min_aspect_ratio); 769 result.track_adapter_settings().min_aspect_ratio);
767 EXPECT_EQ( 770 EXPECT_EQ(
768 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 771 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
769 result.track_adapter_settings().max_aspect_ratio); 772 result.track_adapter_settings().max_aspect_ratio);
770 CheckTrackAdapterSettingsEqualsFormat(result); 773 CheckTrackAdapterSettingsEqualsFormat(result);
771 } 774 }
772 775
773 // Ideal intersects a box. 776 // Ideal intersects a box.
774 { 777 {
775 constraint_factory_.Reset(); 778 constraint_factory_.Reset();
776 constraint_factory_.basic().width.setMin(500); 779 constraint_factory_.basic().width.setMin(500);
777 constraint_factory_.basic().width.setMax(1000); 780 constraint_factory_.basic().width.setMax(1000);
778 constraint_factory_.basic().height.setMin(100); 781 constraint_factory_.basic().height.setMin(100);
779 constraint_factory_.basic().height.setMax(500); 782 constraint_factory_.basic().height.setMax(500);
780 const int kIdealWidth = 750; 783 const int kIdealWidth = 750;
781 constraint_factory_.basic().width.setIdeal(kIdealWidth); 784 constraint_factory_.basic().width.setIdeal(kIdealWidth);
782 auto result = SelectSettings(); 785 auto result = SelectSettings();
783 EXPECT_TRUE(result.HasValue()); 786 EXPECT_TRUE(result.HasValue());
784 // Ideal width is included in the bounding box. 787 // Ideal width is included in the bounding box.
785 EXPECT_EQ(kIdealWidth, result.Width()); 788 EXPECT_EQ(kIdealWidth, result.Width());
786 // Expect height closest to kIdealWidth / kDefaultAspectRatio, which is 789 // Expect height closest to kIdealWidth / default aspect ratio.
787 // outside the box. Closest is max height. 790 double default_aspect_ratio =
788 EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height()); 791 static_cast<double>(constraint_factory_.basic().width.max()) /
792 constraint_factory_.basic().height.max();
793 EXPECT_EQ(std::round(kIdealWidth / default_aspect_ratio), result.Height());
789 CheckNonResolutionDefaults(result); 794 CheckNonResolutionDefaults(result);
790 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio); 795 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
791 EXPECT_EQ(1000.0 / 100.0, result.track_adapter_settings().max_aspect_ratio); 796 EXPECT_EQ(1000.0 / 100.0, result.track_adapter_settings().max_aspect_ratio);
792 CheckTrackAdapterSettingsEqualsFormat(result);
793
794 constraint_factory_.basic().height.setMin(1200);
795 constraint_factory_.basic().height.setMax(2000);
796 result = SelectSettings();
797 EXPECT_TRUE(result.HasValue());
798 EXPECT_EQ(kIdealWidth, result.Width());
799 // kIdealWidth / kDefaultAspectRatio outside the box. Closest is
800 // min height.
801 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height());
802 CheckNonResolutionDefaults(result);
803 EXPECT_EQ(500.0 / 2000.0, result.track_adapter_settings().min_aspect_ratio);
804 EXPECT_EQ(1000.0 / 1200.0,
805 result.track_adapter_settings().max_aspect_ratio);
806 CheckTrackAdapterSettingsEqualsFormat(result);
807
808 constraint_factory_.basic().height.setMin(100);
809 constraint_factory_.basic().height.setMax(500);
810 result = SelectSettings();
811 EXPECT_TRUE(result.HasValue());
812 EXPECT_EQ(kIdealWidth, result.Width());
813 // kIdealWidth / kDefaultAspectRatio is outside the box. Closest is max
814 // height.
815 EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height());
816 CheckNonResolutionDefaults(result);
817 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
818 EXPECT_EQ(1000.0 / 100.0, result.track_adapter_settings().max_aspect_ratio);
819 CheckTrackAdapterSettingsEqualsFormat(result); 797 CheckTrackAdapterSettingsEqualsFormat(result);
820 } 798 }
821 799
822 // Ideal outside the box, closest to the side coinciding with max width. 800 // Ideal outside the box, closest to the side coinciding with max width.
823 { 801 {
824 const int kMaxWidth = 1000; 802 const int kMaxWidth = 1000;
825 constraint_factory_.Reset(); 803 constraint_factory_.Reset();
826 constraint_factory_.basic().width.setMin(500); 804 constraint_factory_.basic().width.setMin(500);
827 constraint_factory_.basic().width.setMax(kMaxWidth); 805 constraint_factory_.basic().width.setMax(kMaxWidth);
828 constraint_factory_.basic().height.setMin(100); 806 constraint_factory_.basic().height.setMin(100);
829 constraint_factory_.basic().height.setMax(500); 807 constraint_factory_.basic().height.setMax(500);
830 constraint_factory_.basic().width.setIdeal(1200); 808 constraint_factory_.basic().width.setIdeal(1200);
831 auto result = SelectSettings(); 809 auto result = SelectSettings();
832 EXPECT_TRUE(result.HasValue()); 810 EXPECT_TRUE(result.HasValue());
833 EXPECT_EQ(kMaxWidth, result.Width()); 811 EXPECT_EQ(kMaxWidth, result.Width());
834 // kMaxWidth / kDefaultAspectRatio is outside the box. Closest is max 812 // kMaxWidth / kDefaultScreenCastAspectRatio is outside the box. Closest is
835 // height. 813 // max height.
836 EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height()); 814 EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height());
837 CheckNonResolutionDefaults(result); 815 CheckNonResolutionDefaults(result);
838 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio); 816 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
839 EXPECT_EQ(static_cast<double>(kMaxWidth) / 100.0, 817 EXPECT_EQ(static_cast<double>(kMaxWidth) / 100.0,
840 result.track_adapter_settings().max_aspect_ratio); 818 result.track_adapter_settings().max_aspect_ratio);
841 CheckTrackAdapterSettingsEqualsFormat(result); 819 CheckTrackAdapterSettingsEqualsFormat(result);
842
843 constraint_factory_.basic().height.setMin(1500);
844 constraint_factory_.basic().height.setMax(2000);
845 result = SelectSettings();
846 EXPECT_TRUE(result.HasValue());
847 EXPECT_EQ(kMaxWidth, result.Width());
848 // kMaxWidth / kDefaultAspectRatio is outside the box. Closest is
849 // min height.
850 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height());
851 CheckNonResolutionDefaults(result);
852 EXPECT_EQ(500.0 / 2000.0, result.track_adapter_settings().min_aspect_ratio);
853 EXPECT_EQ(static_cast<double>(kMaxWidth) / 1500.0,
854 result.track_adapter_settings().max_aspect_ratio);
855 CheckTrackAdapterSettingsEqualsFormat(result);
856
857 constraint_factory_.basic().height.setMin(100);
858 result = SelectSettings();
859 EXPECT_TRUE(result.HasValue());
860 EXPECT_EQ(kMaxWidth, result.Width());
861 // kMaxWidth / kDefaultAspectRatio is within the height limits.
862 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
863 result.Height());
864 CheckNonResolutionDefaults(result);
865 EXPECT_EQ(500.0 / 2000.0, result.track_adapter_settings().min_aspect_ratio);
866 EXPECT_EQ(static_cast<double>(kMaxWidth) / 100.0,
867 result.track_adapter_settings().max_aspect_ratio);
868 CheckTrackAdapterSettingsEqualsFormat(result);
869 } 820 }
870 821
871 // Ideal outside the constrained set, closest to a single point. 822 // Ideal outside the constrained set, closest to a single point.
872 { 823 {
873 constraint_factory_.Reset(); 824 constraint_factory_.Reset();
874 constraint_factory_.basic().width.setMin(100); 825 constraint_factory_.basic().width.setMin(100);
875 constraint_factory_.basic().width.setMax(500); 826 constraint_factory_.basic().width.setMax(500);
876 constraint_factory_.basic().height.setMin(100); 827 constraint_factory_.basic().height.setMin(100);
877 constraint_factory_.basic().height.setMax(500); 828 constraint_factory_.basic().height.setMax(500);
878 constraint_factory_.basic().aspectRatio.setMax(1.0); 829 constraint_factory_.basic().aspectRatio.setMax(1.0);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 1002
1052 // Ideal greater than maximum. 1003 // Ideal greater than maximum.
1053 { 1004 {
1054 constraint_factory_.Reset(); 1005 constraint_factory_.Reset();
1055 const double kIdealAspectRatio = 2.0; 1006 const double kIdealAspectRatio = 2.0;
1056 const double kMaxAspectRatio = 1.5; 1007 const double kMaxAspectRatio = 1.5;
1057 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); 1008 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio);
1058 constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio); 1009 constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio);
1059 auto result = SelectSettings(); 1010 auto result = SelectSettings();
1060 EXPECT_TRUE(result.HasValue()); 1011 EXPECT_TRUE(result.HasValue());
1061 // Ideal height is greater than the maximum, expect maximum. 1012 // Ideal aspect ratio is greater than the maximum, expect maximum.
1062 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1013 EXPECT_EQ(std::round(kDefaultScreenCastWidth / kMaxAspectRatio),
1063 EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMaxAspectRatio), 1014 result.Height());
1064 result.Width()); 1015 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
1065 CheckNonResolutionDefaults(result); 1016 CheckNonResolutionDefaults(result);
1066 EXPECT_EQ( 1017 EXPECT_EQ(
1067 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension, 1018 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension,
1068 result.track_adapter_settings().min_aspect_ratio); 1019 result.track_adapter_settings().min_aspect_ratio);
1069 EXPECT_EQ(kMaxAspectRatio, 1020 EXPECT_EQ(kMaxAspectRatio,
1070 result.track_adapter_settings().max_aspect_ratio); 1021 result.track_adapter_settings().max_aspect_ratio);
1071 CheckTrackAdapterSettingsEqualsFormat(result); 1022 CheckTrackAdapterSettingsEqualsFormat(result);
1072 } 1023 }
1073 1024
1074 // Ideal less than minimum. 1025 // Ideal less than minimum.
1075 { 1026 {
1076 constraint_factory_.Reset(); 1027 constraint_factory_.Reset();
1077 const double kIdealAspectRatio = 1.0; 1028 const double kIdealAspectRatio = 1.0;
1078 const double kMinAspectRatio = 1.5; 1029 const double kMinAspectRatio = 1.5;
1079 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); 1030 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio);
1080 constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio); 1031 constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio);
1081 auto result = SelectSettings(); 1032 auto result = SelectSettings();
1082 EXPECT_TRUE(result.HasValue()); 1033 EXPECT_TRUE(result.HasValue());
1083 // Ideal height is greater than the maximum, expect maximum. 1034 // Ideal aspect ratio is less than the maximum, expect minimum.
1084 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1035 EXPECT_EQ(std::round(kDefaultScreenCastWidth / kMinAspectRatio),
1085 EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMinAspectRatio), 1036 result.Height());
1086 result.Width()); 1037 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
1087 CheckNonResolutionDefaults(result); 1038 CheckNonResolutionDefaults(result);
1088 EXPECT_EQ(kMinAspectRatio, 1039 EXPECT_EQ(kMinAspectRatio,
1089 result.track_adapter_settings().min_aspect_ratio); 1040 result.track_adapter_settings().min_aspect_ratio);
1090 EXPECT_EQ( 1041 EXPECT_EQ(
1091 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 1042 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
1092 result.track_adapter_settings().max_aspect_ratio); 1043 result.track_adapter_settings().max_aspect_ratio);
1093 CheckTrackAdapterSettingsEqualsFormat(result); 1044 CheckTrackAdapterSettingsEqualsFormat(result);
1094 } 1045 }
1095 1046
1096 // Ideal intersects a box. 1047 // Ideal intersects a box.
(...skipping 18 matching lines...) Expand all
1115 EXPECT_EQ(100.0 / 500.0, result.track_adapter_settings().min_aspect_ratio); 1066 EXPECT_EQ(100.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
1116 EXPECT_EQ(500.0 / 100.0, result.track_adapter_settings().max_aspect_ratio); 1067 EXPECT_EQ(500.0 / 100.0, result.track_adapter_settings().max_aspect_ratio);
1117 CheckTrackAdapterSettingsEqualsFormat(result); 1068 CheckTrackAdapterSettingsEqualsFormat(result);
1118 1069
1119 constraint_factory_.basic().height.setMin(1000); 1070 constraint_factory_.basic().height.setMin(1000);
1120 constraint_factory_.basic().height.setMax(5000); 1071 constraint_factory_.basic().height.setMax(5000);
1121 constraint_factory_.basic().width.setMin(1000); 1072 constraint_factory_.basic().width.setMin(1000);
1122 constraint_factory_.basic().width.setMax(5000); 1073 constraint_factory_.basic().width.setMax(5000);
1123 result = SelectSettings(); 1074 result = SelectSettings();
1124 EXPECT_TRUE(result.HasValue()); 1075 EXPECT_TRUE(result.HasValue());
1125 // Ideal aspect-ratio is included in the bounding box, with the value 1076 // Ideal aspect-ratio is included in the bounding box.
1126 // closest to a standard width or height and largest area being the cut with 1077 EXPECT_EQ(
1127 // the minimum height. 1078 std::round(constraint_factory_.basic().width.max() / kIdealAspectRatio),
1128 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height()); 1079 result.Height());
1129 EXPECT_EQ(std::round(constraint_factory_.basic().height.min() * 1080 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
1130 kIdealAspectRatio),
1131 result.Width());
1132 CheckNonResolutionDefaults(result); 1081 CheckNonResolutionDefaults(result);
1133 EXPECT_EQ(1000.0 / 5000.0, 1082 EXPECT_EQ(1000.0 / 5000.0,
1134 result.track_adapter_settings().min_aspect_ratio); 1083 result.track_adapter_settings().min_aspect_ratio);
1135 EXPECT_EQ(5000.0 / 1000.0, 1084 EXPECT_EQ(5000.0 / 1000.0,
1136 result.track_adapter_settings().max_aspect_ratio); 1085 result.track_adapter_settings().max_aspect_ratio);
1137 CheckTrackAdapterSettingsEqualsFormat(result); 1086 CheckTrackAdapterSettingsEqualsFormat(result);
1138 1087
1088 constraint_factory_.Reset();
1089 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio);
1139 constraint_factory_.basic().height.setMin(250); 1090 constraint_factory_.basic().height.setMin(250);
1140 constraint_factory_.basic().height.setMax(5000);
1141 constraint_factory_.basic().width.setMin(250); 1091 constraint_factory_.basic().width.setMin(250);
1142 constraint_factory_.basic().width.setMax(5000);
1143 result = SelectSettings(); 1092 result = SelectSettings();
1144 EXPECT_TRUE(result.HasValue()); 1093 EXPECT_TRUE(result.HasValue());
1145 // Ideal aspect-ratio and default width and height are included in the 1094 // Ideal aspect-ratio is included in the bounding box. Preserving default
1146 // bounding box. Preserving default height leads to larger area than 1095 // height leads to larger area than preserving default width.
1147 // preserving default width.
1148 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1096 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
1149 EXPECT_EQ(kDefaultScreenCastHeight * kIdealAspectRatio, result.Width()); 1097 EXPECT_EQ(kDefaultScreenCastHeight * kIdealAspectRatio, result.Width());
1150 CheckNonResolutionDefaults(result); 1098 CheckNonResolutionDefaults(result);
1151 EXPECT_EQ(250.0 / 5000.0, result.track_adapter_settings().min_aspect_ratio); 1099 EXPECT_EQ(250.0 / kMaxScreenCastDimension,
1152 EXPECT_EQ(5000.0 / 250.0, result.track_adapter_settings().max_aspect_ratio); 1100 result.track_adapter_settings().min_aspect_ratio);
1101 EXPECT_EQ(kMaxScreenCastDimension / 250.0,
1102 result.track_adapter_settings().max_aspect_ratio);
1153 CheckTrackAdapterSettingsEqualsFormat(result); 1103 CheckTrackAdapterSettingsEqualsFormat(result);
1154 } 1104 }
1155 1105
1156 // Ideal outside the constrained area, closest to min or max aspect ratio. 1106 // Ideal outside the constrained area, closest to min or max aspect ratio.
1157 { 1107 {
1158 const double kMinAspectRatio = 0.5; 1108 const double kMinAspectRatio = 0.5;
1159 const double kMaxAspectRatio = 2.0; 1109 const double kMaxAspectRatio = 2.0;
1160 constraint_factory_.Reset(); 1110 constraint_factory_.Reset();
1161 constraint_factory_.basic().height.setMin(100); 1111 constraint_factory_.basic().height.setMin(100);
1162 constraint_factory_.basic().height.setMax(500); 1112 constraint_factory_.basic().height.setMax(500);
(...skipping 26 matching lines...) Expand all
1189 result.Width()); 1139 result.Width());
1190 CheckNonResolutionDefaults(result); 1140 CheckNonResolutionDefaults(result);
1191 EXPECT_EQ(kMinAspectRatio, 1141 EXPECT_EQ(kMinAspectRatio,
1192 result.track_adapter_settings().min_aspect_ratio); 1142 result.track_adapter_settings().min_aspect_ratio);
1193 EXPECT_EQ(kMaxAspectRatio, 1143 EXPECT_EQ(kMaxAspectRatio,
1194 result.track_adapter_settings().max_aspect_ratio); 1144 result.track_adapter_settings().max_aspect_ratio);
1195 CheckTrackAdapterSettingsEqualsFormat(result); 1145 CheckTrackAdapterSettingsEqualsFormat(result);
1196 1146
1197 // Use a box that is bigger and further from the origin to force closeness 1147 // Use a box that is bigger and further from the origin to force closeness
1198 // to a different default dimension. 1148 // to a different default dimension.
1199 constraint_factory_.basic().height.setMin(1000); 1149 constraint_factory_.Reset();
1200 constraint_factory_.basic().height.setMax(5000); 1150 constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio);
1201 constraint_factory_.basic().width.setMin(1000); 1151 constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio);
1202 constraint_factory_.basic().width.setMax(5000); 1152 constraint_factory_.basic().height.setMin(3000);
1153 constraint_factory_.basic().width.setMin(3000);
1203 constraint_factory_.basic().aspectRatio.setIdeal(3.0); 1154 constraint_factory_.basic().aspectRatio.setIdeal(3.0);
1204 result = SelectSettings(); 1155 result = SelectSettings();
1205 EXPECT_TRUE(result.HasValue()); 1156 EXPECT_TRUE(result.HasValue());
1206 // Ideal is closest to kMaxAspectRatio. 1157 // Ideal is closest to kMaxAspectRatio.
1207 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height()); 1158 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height());
1208 EXPECT_EQ( 1159 EXPECT_EQ(
1209 std::round(constraint_factory_.basic().height.min() * kMaxAspectRatio), 1160 std::round(constraint_factory_.basic().height.min() * kMaxAspectRatio),
1210 result.Width()); 1161 result.Width());
1211 CheckNonResolutionDefaults(result); 1162 CheckNonResolutionDefaults(result);
1212 EXPECT_EQ(kMinAspectRatio, 1163 EXPECT_EQ(kMinAspectRatio,
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 } 1544 }
1594 1545
1595 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedNoiseReduction) { 1546 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedNoiseReduction) {
1596 constraint_factory_.Reset(); 1547 constraint_factory_.Reset();
1597 blink::WebMediaTrackConstraintSet& advanced1 = 1548 blink::WebMediaTrackConstraintSet& advanced1 =
1598 constraint_factory_.AddAdvanced(); 1549 constraint_factory_.AddAdvanced();
1599 advanced1.width.setMin(640); 1550 advanced1.width.setMin(640);
1600 advanced1.height.setMin(480); 1551 advanced1.height.setMin(480);
1601 blink::WebMediaTrackConstraintSet& advanced2 = 1552 blink::WebMediaTrackConstraintSet& advanced2 =
1602 constraint_factory_.AddAdvanced(); 1553 constraint_factory_.AddAdvanced();
1603 advanced2.width.setMin(1920); 1554 const int kMinWidth = 4000;
1604 advanced2.height.setMin(1080); 1555 const int kMinHeight = 2000;
1556 advanced2.width.setMin(kMinWidth);
1557 advanced2.height.setMin(kMinHeight);
1605 advanced2.googNoiseReduction.setExact(false); 1558 advanced2.googNoiseReduction.setExact(false);
1606 auto result = SelectSettings(); 1559 auto result = SelectSettings();
1607 EXPECT_TRUE(result.HasValue()); 1560 EXPECT_TRUE(result.HasValue());
1608 EXPECT_EQ(1920, result.Width()); 1561 EXPECT_EQ(kMinWidth, result.Width());
1609 // Preserves default aspect ratio. 1562 // Preserves default aspect ratio.
1610 EXPECT_EQ(static_cast<int>( 1563 EXPECT_EQ(static_cast<int>(
1611 std::round(result.Width() / kDefaultScreenCastAspectRatio)), 1564 std::round(result.Width() / kDefaultScreenCastAspectRatio)),
1612 result.Height()); 1565 result.Height());
1613 EXPECT_TRUE(result.noise_reduction() && !*result.noise_reduction()); 1566 EXPECT_TRUE(result.noise_reduction() && !*result.noise_reduction());
1614 EXPECT_EQ(1920.0 / static_cast<double>(kMaxScreenCastDimension), 1567 EXPECT_EQ(kMinWidth / static_cast<double>(kMaxScreenCastDimension),
1615 result.track_adapter_settings().min_aspect_ratio); 1568 result.track_adapter_settings().min_aspect_ratio);
1616 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / 1080.0, 1569 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
1617 result.track_adapter_settings().max_aspect_ratio); 1570 result.track_adapter_settings().max_aspect_ratio);
1618 CheckTrackAdapterSettingsEqualsFormat(result); 1571 CheckTrackAdapterSettingsEqualsFormat(result);
1619 } 1572 }
1620 1573
1621 // The "AdvancedContradictory" tests check that advanced constraint sets that 1574 // The "AdvancedContradictory" tests check that advanced constraint sets that
1622 // contradict previous constraint sets are ignored. 1575 // contradict previous constraint sets are ignored.
1623 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1576 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1624 AdvancedContradictoryNoiseReduction) { 1577 AdvancedContradictoryNoiseReduction) {
1625 constraint_factory_.Reset(); 1578 constraint_factory_.Reset();
1626 blink::WebMediaTrackConstraintSet& advanced1 = 1579 blink::WebMediaTrackConstraintSet& advanced1 =
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1684 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1637 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
1685 EXPECT_EQ(kMinScreenCastDimension / 480.0, 1638 EXPECT_EQ(kMinScreenCastDimension / 480.0,
1686 result.track_adapter_settings().min_aspect_ratio); 1639 result.track_adapter_settings().min_aspect_ratio);
1687 EXPECT_EQ(640.0 / kMinScreenCastDimension, 1640 EXPECT_EQ(640.0 / kMinScreenCastDimension,
1688 result.track_adapter_settings().max_aspect_ratio); 1641 result.track_adapter_settings().max_aspect_ratio);
1689 CheckTrackAdapterSettingsEqualsFormat(result); 1642 CheckTrackAdapterSettingsEqualsFormat(result);
1690 } 1643 }
1691 1644
1692 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1645 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1693 AdvancedContradictoryMinMaxResolutionFrameRate) { 1646 AdvancedContradictoryMinMaxResolutionFrameRate) {
1647 const int kMinHeight = 2600;
1648 const int kMinWidth = 2800;
1694 constraint_factory_.Reset(); 1649 constraint_factory_.Reset();
1695 blink::WebMediaTrackConstraintSet& advanced1 = 1650 blink::WebMediaTrackConstraintSet& advanced1 =
1696 constraint_factory_.AddAdvanced(); 1651 constraint_factory_.AddAdvanced();
1697 advanced1.width.setMin(800); 1652 advanced1.width.setMin(kMinWidth);
1698 advanced1.height.setMin(600); 1653 advanced1.height.setMin(kMinHeight);
1699 blink::WebMediaTrackConstraintSet& advanced2 = 1654 blink::WebMediaTrackConstraintSet& advanced2 =
1700 constraint_factory_.AddAdvanced(); 1655 constraint_factory_.AddAdvanced();
1701 advanced2.width.setMax(640); 1656 advanced2.width.setMax(640);
1702 advanced2.height.setMax(480); 1657 advanced2.height.setMax(480);
1703 advanced2.frameRate.setExact(60.0); 1658 advanced2.frameRate.setExact(60.0);
1704 auto result = SelectSettings(); 1659 auto result = SelectSettings();
1705 EXPECT_TRUE(result.HasValue()); 1660 EXPECT_TRUE(result.HasValue());
1706 EXPECT_EQ(800, result.Width()); 1661 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
1707 EXPECT_EQ(600, result.Height()); 1662 result.Width());
1663 EXPECT_EQ(kMinHeight, result.Height());
1708 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1664 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
1709 EXPECT_EQ(800.0 / kMaxScreenCastDimension, 1665 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
1710 result.track_adapter_settings().min_aspect_ratio); 1666 result.track_adapter_settings().min_aspect_ratio);
1711 EXPECT_EQ(kMaxScreenCastDimension / 600.0, 1667 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
1712 result.track_adapter_settings().max_aspect_ratio); 1668 result.track_adapter_settings().max_aspect_ratio);
1713 CheckTrackAdapterSettingsEqualsFormat(result); 1669 CheckTrackAdapterSettingsEqualsFormat(result);
1714 } 1670 }
1715 1671
1716 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1672 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1717 AdvancedContradictoryExactAspectRatio) { 1673 AdvancedContradictoryExactAspectRatio) {
1718 constraint_factory_.Reset(); 1674 constraint_factory_.Reset();
1719 blink::WebMediaTrackConstraintSet& advanced1 = 1675 blink::WebMediaTrackConstraintSet& advanced1 =
1720 constraint_factory_.AddAdvanced(); 1676 constraint_factory_.AddAdvanced();
1721 advanced1.aspectRatio.setExact(10.0); 1677 advanced1.aspectRatio.setExact(10.0);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 advanced2.frameRate.setMax(35.0); 1736 advanced2.frameRate.setMax(35.0);
1781 auto result = SelectSettings(); 1737 auto result = SelectSettings();
1782 EXPECT_TRUE(result.HasValue()); 1738 EXPECT_TRUE(result.HasValue());
1783 EXPECT_LE(40.0, result.FrameRate()); 1739 EXPECT_LE(40.0, result.FrameRate());
1784 CheckNonFrameRateDefaults(result); 1740 CheckNonFrameRateDefaults(result);
1785 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1741 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1786 } 1742 }
1787 1743
1788 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1744 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1789 AdvancedContradictoryWidthFrameRate) { 1745 AdvancedContradictoryWidthFrameRate) {
1746 const int kMaxWidth = 1920;
1790 constraint_factory_.Reset(); 1747 constraint_factory_.Reset();
1791 blink::WebMediaTrackConstraintSet& advanced1 = 1748 blink::WebMediaTrackConstraintSet& advanced1 =
1792 constraint_factory_.AddAdvanced(); 1749 constraint_factory_.AddAdvanced();
1793 advanced1.width.setMax(1920); 1750 advanced1.width.setMax(kMaxWidth);
1794 blink::WebMediaTrackConstraintSet& advanced2 = 1751 blink::WebMediaTrackConstraintSet& advanced2 =
1795 constraint_factory_.AddAdvanced(); 1752 constraint_factory_.AddAdvanced();
1796 advanced2.width.setMin(2000); 1753 advanced2.width.setMin(2000);
1797 advanced2.frameRate.setExact(10.0); 1754 advanced2.frameRate.setExact(10.0);
1798 blink::WebMediaTrackConstraintSet& advanced3 = 1755 blink::WebMediaTrackConstraintSet& advanced3 =
1799 constraint_factory_.AddAdvanced(); 1756 constraint_factory_.AddAdvanced();
1800 advanced3.frameRate.setExact(90.0); 1757 advanced3.frameRate.setExact(90.0);
1801 auto result = SelectSettings(); 1758 auto result = SelectSettings();
1802 EXPECT_TRUE(result.HasValue()); 1759 EXPECT_TRUE(result.HasValue());
1803 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 1760 EXPECT_EQ(kMaxWidth, result.Width());
1804 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1761 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
1762 result.Height());
1805 EXPECT_EQ(90.0, result.FrameRate()); 1763 EXPECT_EQ(90.0, result.FrameRate());
1806 EXPECT_EQ( 1764 EXPECT_EQ(
1807 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension, 1765 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension,
1808 result.track_adapter_settings().min_aspect_ratio); 1766 result.track_adapter_settings().min_aspect_ratio);
1809 EXPECT_EQ(1920.0 / kMinScreenCastDimension, 1767 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
1810 result.track_adapter_settings().max_aspect_ratio); 1768 result.track_adapter_settings().max_aspect_ratio);
1811 CheckTrackAdapterSettingsEqualsFormat(result); 1769 CheckTrackAdapterSettingsEqualsFormat(result);
1812 } 1770 }
1813 1771
1814 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1772 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1815 AdvancedContradictoryHeightFrameRate) { 1773 AdvancedContradictoryHeightFrameRate) {
1774 const int kMaxHeight = 2000;
1816 constraint_factory_.Reset(); 1775 constraint_factory_.Reset();
1817 blink::WebMediaTrackConstraintSet& advanced1 = 1776 blink::WebMediaTrackConstraintSet& advanced1 =
1818 constraint_factory_.AddAdvanced(); 1777 constraint_factory_.AddAdvanced();
1819 advanced1.height.setMax(1080); 1778 advanced1.height.setMax(kMaxHeight);
1820 blink::WebMediaTrackConstraintSet& advanced2 = 1779 blink::WebMediaTrackConstraintSet& advanced2 =
1821 constraint_factory_.AddAdvanced(); 1780 constraint_factory_.AddAdvanced();
1822 advanced2.height.setMin(1500); 1781 advanced2.height.setMin(4500);
1823 advanced2.frameRate.setExact(10.0); 1782 advanced2.frameRate.setExact(10.0);
1824 blink::WebMediaTrackConstraintSet& advanced3 = 1783 blink::WebMediaTrackConstraintSet& advanced3 =
1825 constraint_factory_.AddAdvanced(); 1784 constraint_factory_.AddAdvanced();
1826 advanced3.frameRate.setExact(60.0); 1785 advanced3.frameRate.setExact(60.0);
1827 auto result = SelectSettings(); 1786 auto result = SelectSettings();
1828 EXPECT_TRUE(result.HasValue()); 1787 EXPECT_TRUE(result.HasValue());
1829 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 1788 EXPECT_EQ(kMaxHeight * kDefaultScreenCastAspectRatio, result.Width());
1830 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1789 // Height defaults to explicitly given max constraint.
1790 EXPECT_EQ(kMaxHeight, result.Height());
1831 EXPECT_EQ(60.0, result.FrameRate()); 1791 EXPECT_EQ(60.0, result.FrameRate());
1832 EXPECT_EQ(static_cast<double>(kMinScreenCastDimension) / 1080.0, 1792 EXPECT_EQ(static_cast<double>(kMinScreenCastDimension) / kMaxHeight,
1833 result.track_adapter_settings().min_aspect_ratio); 1793 result.track_adapter_settings().min_aspect_ratio);
1834 EXPECT_EQ( 1794 EXPECT_EQ(
1835 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 1795 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
1836 result.track_adapter_settings().max_aspect_ratio); 1796 result.track_adapter_settings().max_aspect_ratio);
1837 CheckTrackAdapterSettingsEqualsFormat(result); 1797 CheckTrackAdapterSettingsEqualsFormat(result);
1838 } 1798 }
1839 1799
1840 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedDeviceID) { 1800 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedDeviceID) {
1841 const std::string kDeviceID1 = "fake_device_1"; 1801 const std::string kDeviceID1 = "fake_device_1";
1842 const std::string kDeviceID2 = "fake_device_2"; 1802 const std::string kDeviceID2 = "fake_device_2";
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
2005 // Exact aspect ratio prevents the resolution from being adjusted. 1965 // Exact aspect ratio prevents the resolution from being adjusted.
2006 EXPECT_EQ(media::RESOLUTION_POLICY_FIXED_RESOLUTION, 1966 EXPECT_EQ(media::RESOLUTION_POLICY_FIXED_RESOLUTION,
2007 result.ResolutionChangePolicy()); 1967 result.ResolutionChangePolicy());
2008 EXPECT_EQ(1.32, result.track_adapter_settings().min_aspect_ratio); 1968 EXPECT_EQ(1.32, result.track_adapter_settings().min_aspect_ratio);
2009 EXPECT_EQ(1.32, result.track_adapter_settings().max_aspect_ratio); 1969 EXPECT_EQ(1.32, result.track_adapter_settings().max_aspect_ratio);
2010 CheckTrackAdapterSettingsEqualsFormat(result); 1970 CheckTrackAdapterSettingsEqualsFormat(result);
2011 } 1971 }
2012 } 1972 }
2013 1973
2014 } // namespace content 1974 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_constraints_util_video_content.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698