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

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: remove obsolete comment 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 11 matching lines...) Expand all
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 constraint_factory_.Reset();
303 const int kHeight = 1000; 299 const int kMaxHeight = 100;
304 constraint_factory_.basic().height.setMax(kHeight); 300 constraint_factory_.basic().height.setMax(kMaxHeight);
305 auto result = SelectSettings(); 301 auto result = SelectSettings();
306 EXPECT_TRUE(result.HasValue()); 302 EXPECT_TRUE(result.HasValue());
307 // kHeight is greater that the default, so expect the default. 303 // kSmallHeight is less that the default, so expect kSmallHeight.
hbos_chromium 2017/04/07 13:16:29 nit: comment variable name and variable name don't
Guido Urdaneta 2017/04/07 15:05:19 Done.
308 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 304 EXPECT_EQ(kMaxHeight, result.Height());
309 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 305 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
306 result.Width());
310 CheckNonResolutionDefaults(result); 307 CheckNonResolutionDefaults(result);
311 EXPECT_EQ(1.0 / kHeight, result.track_adapter_settings().min_aspect_ratio); 308 EXPECT_EQ(1.0 / kMaxHeight, result.track_adapter_settings().min_aspect_ratio);
312 EXPECT_EQ(kMaxScreenCastDimension, 309 EXPECT_EQ(kMaxScreenCastDimension,
313 result.track_adapter_settings().max_aspect_ratio); 310 result.track_adapter_settings().max_aspect_ratio);
314 CheckTrackAdapterSettingsEqualsFormat(result); 311 CheckTrackAdapterSettingsEqualsFormat(result);
315
316 const int kSmallHeight = 100;
317 constraint_factory_.basic().height.setMax(kSmallHeight);
318 result = SelectSettings();
319 EXPECT_TRUE(result.HasValue());
320 // kSmallHeight is less that the default, so expect kSmallHeight.
321 EXPECT_EQ(kSmallHeight, result.Height());
322 EXPECT_EQ(std::round(kSmallHeight * kDefaultScreenCastAspectRatio),
323 result.Width());
324 CheckNonResolutionDefaults(result);
325 EXPECT_EQ(1.0 / kSmallHeight,
326 result.track_adapter_settings().min_aspect_ratio);
327 EXPECT_EQ(kMaxScreenCastDimension,
328 result.track_adapter_settings().max_aspect_ratio);
329 CheckTrackAdapterSettingsEqualsFormat(result);
330 } 312 }
331 313
332 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) { 314 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) {
333 constraint_factory_.Reset(); 315 constraint_factory_.Reset();
334 { 316 {
335 const int kMinHeight = 300; 317 const int kMinHeight = 300;
336 const int kMaxHeight = 1000;
337 constraint_factory_.basic().height.setMin(kMinHeight);
338 constraint_factory_.basic().height.setMax(kMaxHeight);
339 auto result = SelectSettings();
340 EXPECT_TRUE(result.HasValue());
341 // The range includes the default, so expect the default.
342 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
343 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
344 CheckNonResolutionDefaults(result);
345 EXPECT_EQ(1.0 / kMaxHeight,
346 result.track_adapter_settings().min_aspect_ratio);
347 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
348 result.track_adapter_settings().max_aspect_ratio);
349 CheckTrackAdapterSettingsEqualsFormat(result);
350 }
351
352 {
353 const int kMinHeight = 900;
354 const int kMaxHeight = 1000;
355 constraint_factory_.basic().height.setMin(kMinHeight);
356 constraint_factory_.basic().height.setMax(kMaxHeight);
357 auto result = SelectSettings();
358 EXPECT_TRUE(result.HasValue());
359 // The whole range is greater than the default, so expect the range minimum.
360 EXPECT_EQ(kMinHeight, result.Height());
361 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
362 result.Width());
363 CheckNonResolutionDefaults(result);
364 EXPECT_EQ(1.0 / kMaxHeight,
365 result.track_adapter_settings().min_aspect_ratio);
366 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
367 result.track_adapter_settings().max_aspect_ratio);
368 CheckTrackAdapterSettingsEqualsFormat(result);
369 }
370
371 {
372 const int kMinHeight = 300;
373 const int kMaxHeight = 400; 318 const int kMaxHeight = 400;
hbos_chromium 2017/04/07 13:16:29 I think you shouldn't remove these test cases to m
Guido Urdaneta 2017/04/07 15:05:19 Done.
374 constraint_factory_.basic().height.setMin(kMinHeight); 319 constraint_factory_.basic().height.setMin(kMinHeight);
375 constraint_factory_.basic().height.setMax(kMaxHeight); 320 constraint_factory_.basic().height.setMax(kMaxHeight);
376 auto result = SelectSettings(); 321 auto result = SelectSettings();
377 EXPECT_TRUE(result.HasValue()); 322 EXPECT_TRUE(result.HasValue());
378 // The whole range is less than the default, so expect the range maximum. 323 // The whole range is less than the default, so expect the range maximum.
379 EXPECT_EQ(kMaxHeight, result.Height()); 324 EXPECT_EQ(kMaxHeight, result.Height());
380 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio), 325 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
381 result.Width()); 326 result.Width());
382 CheckNonResolutionDefaults(result); 327 CheckNonResolutionDefaults(result);
383 EXPECT_EQ(1.0 / kMaxHeight, 328 EXPECT_EQ(1.0 / kMaxHeight,
384 result.track_adapter_settings().min_aspect_ratio); 329 result.track_adapter_settings().min_aspect_ratio);
385 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight, 330 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
386 result.track_adapter_settings().max_aspect_ratio); 331 result.track_adapter_settings().max_aspect_ratio);
387 CheckTrackAdapterSettingsEqualsFormat(result); 332 CheckTrackAdapterSettingsEqualsFormat(result);
388 } 333 }
389 } 334 }
390 335
391 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealHeight) { 336 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealHeight) {
392 // Unconstrained. 337 // Unconstrained.
393 { 338 {
394 constraint_factory_.Reset(); 339 constraint_factory_.Reset();
395 const int kIdealHeight = 1000; 340 const int kIdealHeight = 1000;
396 constraint_factory_.basic().height.setIdeal(kIdealHeight); 341 constraint_factory_.basic().height.setIdeal(kIdealHeight);
397 auto result = SelectSettings(); 342 auto result = SelectSettings();
398 EXPECT_TRUE(result.HasValue()); 343 EXPECT_TRUE(result.HasValue());
399 EXPECT_EQ(kIdealHeight, result.Height()); 344 EXPECT_EQ(kIdealHeight, result.Height());
400 // When ideal height is given, the algorithm returns a width that is closest 345 // When ideal height is given, the algorithm returns a width that is closest
401 // to height * kDefaultAspectRatio. 346 // to height * kDefaultScreenCastAspectRatio.
402 EXPECT_EQ(std::round(kIdealHeight * kDefaultScreenCastAspectRatio), 347 EXPECT_EQ(std::round(kIdealHeight * kDefaultScreenCastAspectRatio),
403 result.Width()); 348 result.Width());
404 CheckNonResolutionDefaults(result); 349 CheckNonResolutionDefaults(result);
405 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 350 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
406 } 351 }
407 352
408 // Ideal greater than maximum. 353 // Ideal greater than maximum.
409 { 354 {
410 constraint_factory_.Reset(); 355 constraint_factory_.Reset();
411 const int kIdealHeight = 1000; 356 const int kIdealHeight = 1000;
412 const int kMaxHeight = 800; 357 const int kMaxHeight = 800;
413 constraint_factory_.basic().height.setIdeal(kIdealHeight); 358 constraint_factory_.basic().height.setIdeal(kIdealHeight);
414 constraint_factory_.basic().height.setMax(kMaxHeight); 359 constraint_factory_.basic().height.setMax(kMaxHeight);
415 auto result = SelectSettings(); 360 auto result = SelectSettings();
416 EXPECT_TRUE(result.HasValue()); 361 EXPECT_TRUE(result.HasValue());
417 // Ideal height is greater than the maximum, expect maximum. 362 // Ideal height is greater than the maximum, expect maximum.
418 EXPECT_EQ(kMaxHeight, result.Height()); 363 EXPECT_EQ(kMaxHeight, result.Height());
419 // Expect closest to kMaxHeight * kDefaultAspectRatio. 364 // Expect closest to kMaxHeight * kDefaultScreenCastAspectRatio.
420 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio), 365 EXPECT_EQ(std::round(kMaxHeight * kDefaultScreenCastAspectRatio),
421 result.Width()); 366 result.Width());
422 CheckNonResolutionDefaults(result); 367 CheckNonResolutionDefaults(result);
423 EXPECT_EQ(1.0 / kMaxHeight, 368 EXPECT_EQ(1.0 / kMaxHeight,
424 result.track_adapter_settings().min_aspect_ratio); 369 result.track_adapter_settings().min_aspect_ratio);
425 EXPECT_EQ(kMaxScreenCastDimension, 370 EXPECT_EQ(kMaxScreenCastDimension,
426 result.track_adapter_settings().max_aspect_ratio); 371 result.track_adapter_settings().max_aspect_ratio);
427 CheckTrackAdapterSettingsEqualsFormat(result); 372 CheckTrackAdapterSettingsEqualsFormat(result);
428 } 373 }
429 374
430 // Ideal less than minimum. 375 // Ideal less than minimum.
431 { 376 {
432 constraint_factory_.Reset(); 377 constraint_factory_.Reset();
433 const int kIdealHeight = 1000; 378 const int kIdealHeight = 1000;
434 const int kMinHeight = 1200; 379 const int kMinHeight = 1200;
435 constraint_factory_.basic().height.setIdeal(kIdealHeight); 380 constraint_factory_.basic().height.setIdeal(kIdealHeight);
436 constraint_factory_.basic().height.setMin(kMinHeight); 381 constraint_factory_.basic().height.setMin(kMinHeight);
437 auto result = SelectSettings(); 382 auto result = SelectSettings();
438 EXPECT_TRUE(result.HasValue()); 383 EXPECT_TRUE(result.HasValue());
439 // Ideal height is less than the minimum, expect minimum. 384 // Ideal height is less than the minimum, expect minimum.
440 EXPECT_EQ(kMinHeight, result.Height()); 385 EXPECT_EQ(kMinHeight, result.Height());
441 // Expect closest to kMinHeight * kDefaultAspectRatio. 386 // Expect closest to kMinHeight * kDefaultScreenCastAspectRatio.
442 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio), 387 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
443 result.Width()); 388 result.Width());
444 CheckNonResolutionDefaults(result); 389 CheckNonResolutionDefaults(result);
445 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 390 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
446 result.track_adapter_settings().min_aspect_ratio); 391 result.track_adapter_settings().min_aspect_ratio);
447 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight, 392 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
448 result.track_adapter_settings().max_aspect_ratio); 393 result.track_adapter_settings().max_aspect_ratio);
449 CheckTrackAdapterSettingsEqualsFormat(result); 394 CheckTrackAdapterSettingsEqualsFormat(result);
450 } 395 }
451 396
452 // Ideal intersects a box. 397 // Ideal intersects a box.
453 { 398 {
454 constraint_factory_.Reset(); 399 constraint_factory_.Reset();
455 constraint_factory_.basic().height.setMin(500); 400 constraint_factory_.basic().height.setMin(500);
456 constraint_factory_.basic().height.setMax(1000); 401 constraint_factory_.basic().height.setMax(1000);
457 constraint_factory_.basic().width.setMin(100); 402 constraint_factory_.basic().width.setMin(100);
458 constraint_factory_.basic().width.setMax(500); 403 constraint_factory_.basic().width.setMax(500);
459 const int kIdealHeight = 750; 404 const int kIdealHeight = 750;
460 constraint_factory_.basic().height.setIdeal(kIdealHeight); 405 constraint_factory_.basic().height.setIdeal(kIdealHeight);
461 auto result = SelectSettings(); 406 auto result = SelectSettings();
462 EXPECT_TRUE(result.HasValue()); 407 EXPECT_TRUE(result.HasValue());
463 // Ideal height is included in the bounding box. 408 // Ideal height is included in the bounding box.
464 EXPECT_EQ(kIdealHeight, result.Height()); 409 EXPECT_EQ(kIdealHeight, result.Height());
465 // Expect width closest to kIdealHeight * kDefaultAspectRatio, which is 410 double default_aspect_ratio =
466 // outside the box. Closest is max width. 411 static_cast<double>(constraint_factory_.basic().width.max()) /
467 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width()); 412 constraint_factory_.basic().height.max();
413 // Expect width closest to kIdealHeight * default aspect ratio.
414 EXPECT_EQ(std::round(kIdealHeight * default_aspect_ratio), result.Width());
468 CheckNonResolutionDefaults(result); 415 CheckNonResolutionDefaults(result);
469 EXPECT_EQ(100.0 / 1000.0, result.track_adapter_settings().min_aspect_ratio); 416 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); 417 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); 418 CheckTrackAdapterSettingsEqualsFormat(result);
499 } 419 }
500 420
501 // Ideal outside the box, closest to the side coinciding with max height. 421 // Ideal outside the box, closest to the side coinciding with max height.
502 { 422 {
503 const int kMaxHeight = 1000; 423 const int kMaxHeight = 1000;
504 constraint_factory_.Reset(); 424 constraint_factory_.Reset();
505 constraint_factory_.basic().height.setMin(500); 425 constraint_factory_.basic().height.setMin(500);
506 constraint_factory_.basic().height.setMax(kMaxHeight); 426 constraint_factory_.basic().height.setMax(kMaxHeight);
507 constraint_factory_.basic().width.setMin(100); 427 constraint_factory_.basic().width.setMin(100);
508 constraint_factory_.basic().width.setMax(500); 428 constraint_factory_.basic().width.setMax(500);
509 constraint_factory_.basic().height.setIdeal(1200); 429 constraint_factory_.basic().height.setIdeal(1200);
510 auto result = SelectSettings(); 430 auto result = SelectSettings();
511 EXPECT_TRUE(result.HasValue()); 431 EXPECT_TRUE(result.HasValue());
512 EXPECT_EQ(kMaxHeight, result.Height()); 432 EXPECT_EQ(kMaxHeight, result.Height());
513 // Expect width closest to kMaxHeight * kDefaultAspectRatio, which is 433 // Expect width closest to kMaxHeight * default aspect ratio, which is
514 // outside the box. Closest it max width. 434 // outside the box. Closest it max width.
515 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width()); 435 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
516 CheckNonResolutionDefaults(result); 436 CheckNonResolutionDefaults(result);
517 EXPECT_EQ(100.0 / kMaxHeight, 437 EXPECT_EQ(100.0 / kMaxHeight,
518 result.track_adapter_settings().min_aspect_ratio); 438 result.track_adapter_settings().min_aspect_ratio);
519 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio); 439 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().max_aspect_ratio);
520 CheckTrackAdapterSettingsEqualsFormat(result); 440 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 } 441 }
549 442
550 // Ideal outside the constrained set, closest to a single point. 443 // Ideal outside the constrained set, closest to a single point.
551 { 444 {
552 constraint_factory_.Reset(); 445 constraint_factory_.Reset();
553 constraint_factory_.basic().height.setMin(500); 446 constraint_factory_.basic().height.setMin(500);
554 constraint_factory_.basic().height.setMax(1000); 447 constraint_factory_.basic().height.setMax(1000);
555 constraint_factory_.basic().width.setMin(500); 448 constraint_factory_.basic().width.setMin(500);
556 constraint_factory_.basic().width.setMax(1000); 449 constraint_factory_.basic().width.setMax(1000);
557 constraint_factory_.basic().aspectRatio.setMin(1.0); 450 constraint_factory_.basic().aspectRatio.setMin(1.0);
(...skipping 22 matching lines...) Expand all
580 CheckNonResolutionDefaults(result); 473 CheckNonResolutionDefaults(result);
581 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension, 474 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension,
582 result.track_adapter_settings().min_aspect_ratio); 475 result.track_adapter_settings().min_aspect_ratio);
583 EXPECT_EQ(static_cast<double>(kWidth) / kMinScreenCastDimension, 476 EXPECT_EQ(static_cast<double>(kWidth) / kMinScreenCastDimension,
584 result.track_adapter_settings().max_aspect_ratio); 477 result.track_adapter_settings().max_aspect_ratio);
585 CheckTrackAdapterSettingsEqualsFormat(result); 478 CheckTrackAdapterSettingsEqualsFormat(result);
586 } 479 }
587 480
588 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinWidth) { 481 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMinWidth) {
589 constraint_factory_.Reset(); 482 constraint_factory_.Reset();
590 const int kWidth = 1000; 483 const int kWidth = 3000;
591 constraint_factory_.basic().width.setMin(kWidth); 484 constraint_factory_.basic().width.setMin(kWidth);
592 auto result = SelectSettings(); 485 auto result = SelectSettings();
593 EXPECT_TRUE(result.HasValue()); 486 EXPECT_TRUE(result.HasValue());
594 // kWidth is greater that the default, so expect kWidth. 487 // kWidth is greater that the default, so expect kWidth.
595 EXPECT_EQ(kWidth, result.Width()); 488 EXPECT_EQ(kWidth, result.Width());
596 EXPECT_EQ(std::round(kWidth / kDefaultScreenCastAspectRatio), 489 EXPECT_EQ(std::round(kWidth / kDefaultScreenCastAspectRatio),
597 result.Height()); 490 result.Height());
598 CheckNonResolutionDefaults(result); 491 CheckNonResolutionDefaults(result);
599 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension, 492 EXPECT_EQ(static_cast<double>(kWidth) / kMaxScreenCastDimension,
600 result.track_adapter_settings().min_aspect_ratio); 493 result.track_adapter_settings().min_aspect_ratio);
(...skipping 13 matching lines...) Expand all
614 EXPECT_EQ(static_cast<double>(kSmallWidth) / kMaxScreenCastDimension, 507 EXPECT_EQ(static_cast<double>(kSmallWidth) / kMaxScreenCastDimension,
615 result.track_adapter_settings().min_aspect_ratio); 508 result.track_adapter_settings().min_aspect_ratio);
616 EXPECT_EQ( 509 EXPECT_EQ(
617 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 510 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
618 result.track_adapter_settings().max_aspect_ratio); 511 result.track_adapter_settings().max_aspect_ratio);
619 CheckTrackAdapterSettingsEqualsFormat(result); 512 CheckTrackAdapterSettingsEqualsFormat(result);
620 } 513 }
621 514
622 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxWidth) { 515 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxWidth) {
623 constraint_factory_.Reset(); 516 constraint_factory_.Reset();
624 const int kWidth = 1000; 517 const int kMaxWidth = 100;
625 constraint_factory_.basic().width.setMax(kWidth); 518 constraint_factory_.basic().width.setMax(kMaxWidth);
626 auto result = SelectSettings(); 519 auto result = SelectSettings();
627 EXPECT_TRUE(result.HasValue()); 520 EXPECT_TRUE(result.HasValue());
628 // kWidth is greater that the default, so expect the default.
629 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
630 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
631 CheckNonResolutionDefaults(result);
632 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
633 result.track_adapter_settings().min_aspect_ratio);
634 EXPECT_EQ(static_cast<double>(kWidth) / kMinScreenCastDimension,
635 result.track_adapter_settings().max_aspect_ratio);
636 CheckTrackAdapterSettingsEqualsFormat(result);
637
638 const int kSmallWidth = 100;
639 constraint_factory_.basic().width.setMax(kSmallWidth);
640 result = SelectSettings();
641 EXPECT_TRUE(result.HasValue());
642 // kSmallWidth is less that the default, so expect kSmallWidth. 521 // kSmallWidth is less that the default, so expect kSmallWidth.
643 EXPECT_EQ(kSmallWidth, result.Width()); 522 EXPECT_EQ(kMaxWidth, result.Width());
644 EXPECT_EQ(std::round(kSmallWidth / kDefaultScreenCastAspectRatio), 523 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
645 result.Height()); 524 result.Height());
646 CheckNonResolutionDefaults(result); 525 CheckNonResolutionDefaults(result);
647 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 526 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
648 result.track_adapter_settings().min_aspect_ratio); 527 result.track_adapter_settings().min_aspect_ratio);
649 EXPECT_EQ(static_cast<double>(kSmallWidth) / kMinScreenCastDimension, 528 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
650 result.track_adapter_settings().max_aspect_ratio); 529 result.track_adapter_settings().max_aspect_ratio);
651 CheckTrackAdapterSettingsEqualsFormat(result); 530 CheckTrackAdapterSettingsEqualsFormat(result);
652 } 531 }
653 532
654 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) { 533 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) {
655 constraint_factory_.Reset(); 534 constraint_factory_.Reset();
656 { 535 const int kMinWidth = 300;
657 const int kMinWidth = 300; 536 const int kMaxWidth = 400;
658 const int kMaxWidth = 1000; 537 constraint_factory_.basic().width.setMin(kMinWidth);
659 constraint_factory_.basic().width.setMin(kMinWidth); 538 constraint_factory_.basic().width.setMax(kMaxWidth);
660 constraint_factory_.basic().width.setMax(kMaxWidth); 539 auto result = SelectSettings();
661 auto result = SelectSettings(); 540 EXPECT_TRUE(result.HasValue());
662 EXPECT_TRUE(result.HasValue()); 541 // The whole range is less than the default, so expect the range maximum.
663 // The range includes the default, so expect the default. 542 EXPECT_EQ(kMaxWidth, result.Width());
664 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 543 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
665 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 544 result.Height());
666 CheckNonResolutionDefaults(result); 545 CheckNonResolutionDefaults(result);
667 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension, 546 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
668 result.track_adapter_settings().min_aspect_ratio); 547 result.track_adapter_settings().min_aspect_ratio);
669 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 548 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
670 result.track_adapter_settings().max_aspect_ratio); 549 result.track_adapter_settings().max_aspect_ratio);
671 CheckTrackAdapterSettingsEqualsFormat(result); 550 CheckTrackAdapterSettingsEqualsFormat(result);
672 }
673
674 {
675 const int kMinWidth = 900;
676 const int kMaxWidth = 1000;
677 constraint_factory_.basic().width.setMin(kMinWidth);
678 constraint_factory_.basic().width.setMax(kMaxWidth);
679 auto result = SelectSettings();
680 EXPECT_TRUE(result.HasValue());
681 // The whole range is greater than the default, so expect the range minimum.
682 EXPECT_EQ(kMinWidth, result.Width());
683 EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio),
684 result.Height());
685 CheckNonResolutionDefaults(result);
686 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
687 result.track_adapter_settings().min_aspect_ratio);
688 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
689 result.track_adapter_settings().max_aspect_ratio);
690 CheckTrackAdapterSettingsEqualsFormat(result);
691 }
692
693 {
694 const int kMinWidth = 300;
695 const int kMaxWidth = 400;
696 constraint_factory_.basic().width.setMin(kMinWidth);
697 constraint_factory_.basic().width.setMax(kMaxWidth);
698 auto result = SelectSettings();
699 EXPECT_TRUE(result.HasValue());
700 // The whole range is less than the default, so expect the range maximum.
701 EXPECT_EQ(kMaxWidth, result.Width());
702 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
703 result.Height());
704 CheckNonResolutionDefaults(result);
705 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
706 result.track_adapter_settings().min_aspect_ratio);
707 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
708 result.track_adapter_settings().max_aspect_ratio);
709 CheckTrackAdapterSettingsEqualsFormat(result);
710 }
711 } 551 }
712 552
713 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealWidth) { 553 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealWidth) {
714 // Unconstrained 554 // Unconstrained
715 { 555 {
716 constraint_factory_.Reset(); 556 constraint_factory_.Reset();
717 const int kIdealWidth = 1000; 557 const int kIdealWidth = 1000;
718 constraint_factory_.basic().width.setIdeal(kIdealWidth); 558 constraint_factory_.basic().width.setIdeal(kIdealWidth);
719 auto result = SelectSettings(); 559 auto result = SelectSettings();
720 EXPECT_TRUE(result.HasValue()); 560 EXPECT_TRUE(result.HasValue());
721 EXPECT_EQ(kIdealWidth, result.Width()); 561 EXPECT_EQ(kIdealWidth, result.Width());
722 // When ideal width is given, the algorithm returns a height that is closest 562 // When ideal width is given, the algorithm returns a height that is closest
723 // to width / kDefaultAspectRatio. 563 // to width / kDefaultScreenCastAspectRatio.
724 EXPECT_EQ(std::round(kIdealWidth / kDefaultScreenCastAspectRatio), 564 EXPECT_EQ(std::round(kIdealWidth / kDefaultScreenCastAspectRatio),
725 result.Height()); 565 result.Height());
726 CheckNonResolutionDefaults(result); 566 CheckNonResolutionDefaults(result);
727 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 567 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
728 } 568 }
729 569
730 // Ideal greater than maximum. 570 // Ideal greater than maximum.
731 { 571 {
732 constraint_factory_.Reset(); 572 constraint_factory_.Reset();
733 const int kIdealWidth = 1000; 573 const int kIdealWidth = 1000;
734 const int kMaxWidth = 800; 574 const int kMaxWidth = 800;
735 constraint_factory_.basic().width.setIdeal(kIdealWidth); 575 constraint_factory_.basic().width.setIdeal(kIdealWidth);
736 constraint_factory_.basic().width.setMax(kMaxWidth); 576 constraint_factory_.basic().width.setMax(kMaxWidth);
737 auto result = SelectSettings(); 577 auto result = SelectSettings();
738 EXPECT_TRUE(result.HasValue()); 578 EXPECT_TRUE(result.HasValue());
739 EXPECT_EQ(kMaxWidth, result.Width()); 579 EXPECT_EQ(kMaxWidth, result.Width());
740 // Expect closest to kMaxWidth / kDefaultAspectRatio. 580 // Expect closest to kMaxWidth / kDefaultScreenCastAspectRatio.
741 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio), 581 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
742 result.Height()); 582 result.Height());
743 CheckNonResolutionDefaults(result); 583 CheckNonResolutionDefaults(result);
744 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 584 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
745 result.track_adapter_settings().min_aspect_ratio); 585 result.track_adapter_settings().min_aspect_ratio);
746 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 586 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
747 result.track_adapter_settings().max_aspect_ratio); 587 result.track_adapter_settings().max_aspect_ratio);
748 CheckTrackAdapterSettingsEqualsFormat(result); 588 CheckTrackAdapterSettingsEqualsFormat(result);
749 } 589 }
750 590
751 // Ideal less than minimum. 591 // Ideal less than minimum.
752 { 592 {
753 constraint_factory_.Reset(); 593 constraint_factory_.Reset();
754 const int kIdealWidth = 1000; 594 const int kIdealWidth = 1000;
755 const int kMinWidth = 1200; 595 const int kMinWidth = 1200;
756 constraint_factory_.basic().width.setIdeal(kIdealWidth); 596 constraint_factory_.basic().width.setIdeal(kIdealWidth);
757 constraint_factory_.basic().width.setMin(kMinWidth); 597 constraint_factory_.basic().width.setMin(kMinWidth);
758 auto result = SelectSettings(); 598 auto result = SelectSettings();
759 EXPECT_TRUE(result.HasValue()); 599 EXPECT_TRUE(result.HasValue());
760 EXPECT_EQ(kMinWidth, result.Width()); 600 EXPECT_EQ(kMinWidth, result.Width());
761 // Expect closest to kMinWidth / kDefaultAspectRatio. 601 // Expect closest to kMinWidth / kDefaultScreenCastAspectRatio.
762 EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio), 602 EXPECT_EQ(std::round(kMinWidth / kDefaultScreenCastAspectRatio),
763 result.Height()); 603 result.Height());
764 CheckNonResolutionDefaults(result); 604 CheckNonResolutionDefaults(result);
765 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension, 605 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
766 result.track_adapter_settings().min_aspect_ratio); 606 result.track_adapter_settings().min_aspect_ratio);
767 EXPECT_EQ( 607 EXPECT_EQ(
768 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 608 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
769 result.track_adapter_settings().max_aspect_ratio); 609 result.track_adapter_settings().max_aspect_ratio);
770 CheckTrackAdapterSettingsEqualsFormat(result); 610 CheckTrackAdapterSettingsEqualsFormat(result);
771 } 611 }
772 612
773 // Ideal intersects a box. 613 // Ideal intersects a box.
774 { 614 {
775 constraint_factory_.Reset(); 615 constraint_factory_.Reset();
776 constraint_factory_.basic().width.setMin(500); 616 constraint_factory_.basic().width.setMin(500);
777 constraint_factory_.basic().width.setMax(1000); 617 constraint_factory_.basic().width.setMax(1000);
778 constraint_factory_.basic().height.setMin(100); 618 constraint_factory_.basic().height.setMin(100);
779 constraint_factory_.basic().height.setMax(500); 619 constraint_factory_.basic().height.setMax(500);
780 const int kIdealWidth = 750; 620 const int kIdealWidth = 750;
781 constraint_factory_.basic().width.setIdeal(kIdealWidth); 621 constraint_factory_.basic().width.setIdeal(kIdealWidth);
782 auto result = SelectSettings(); 622 auto result = SelectSettings();
783 EXPECT_TRUE(result.HasValue()); 623 EXPECT_TRUE(result.HasValue());
784 // Ideal width is included in the bounding box. 624 // Ideal width is included in the bounding box.
785 EXPECT_EQ(kIdealWidth, result.Width()); 625 EXPECT_EQ(kIdealWidth, result.Width());
786 // Expect height closest to kIdealWidth / kDefaultAspectRatio, which is 626 // Expect height closest to kIdealWidth / default aspect ratio.
787 // outside the box. Closest is max height. 627 double default_aspect_ratio =
788 EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height()); 628 static_cast<double>(constraint_factory_.basic().width.max()) /
629 constraint_factory_.basic().height.max();
630 EXPECT_EQ(std::round(kIdealWidth / default_aspect_ratio), result.Height());
789 CheckNonResolutionDefaults(result); 631 CheckNonResolutionDefaults(result);
790 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio); 632 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); 633 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); 634 CheckTrackAdapterSettingsEqualsFormat(result);
820 } 635 }
821 636
822 // Ideal outside the box, closest to the side coinciding with max width. 637 // Ideal outside the box, closest to the side coinciding with max width.
823 { 638 {
824 const int kMaxWidth = 1000; 639 const int kMaxWidth = 1000;
825 constraint_factory_.Reset(); 640 constraint_factory_.Reset();
826 constraint_factory_.basic().width.setMin(500); 641 constraint_factory_.basic().width.setMin(500);
827 constraint_factory_.basic().width.setMax(kMaxWidth); 642 constraint_factory_.basic().width.setMax(kMaxWidth);
828 constraint_factory_.basic().height.setMin(100); 643 constraint_factory_.basic().height.setMin(100);
829 constraint_factory_.basic().height.setMax(500); 644 constraint_factory_.basic().height.setMax(500);
830 constraint_factory_.basic().width.setIdeal(1200); 645 constraint_factory_.basic().width.setIdeal(1200);
831 auto result = SelectSettings(); 646 auto result = SelectSettings();
832 EXPECT_TRUE(result.HasValue()); 647 EXPECT_TRUE(result.HasValue());
833 EXPECT_EQ(kMaxWidth, result.Width()); 648 EXPECT_EQ(kMaxWidth, result.Width());
834 // kMaxWidth / kDefaultAspectRatio is outside the box. Closest is max 649 // kMaxWidth / kDefaultScreenCastAspectRatio is outside the box. Closest is
835 // height. 650 // max height.
836 EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height()); 651 EXPECT_EQ(constraint_factory_.basic().height.max(), result.Height());
837 CheckNonResolutionDefaults(result); 652 CheckNonResolutionDefaults(result);
838 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio); 653 EXPECT_EQ(500.0 / 500.0, result.track_adapter_settings().min_aspect_ratio);
839 EXPECT_EQ(static_cast<double>(kMaxWidth) / 100.0, 654 EXPECT_EQ(static_cast<double>(kMaxWidth) / 100.0,
840 result.track_adapter_settings().max_aspect_ratio); 655 result.track_adapter_settings().max_aspect_ratio);
841 CheckTrackAdapterSettingsEqualsFormat(result); 656 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 } 657 }
870 658
871 // Ideal outside the constrained set, closest to a single point. 659 // Ideal outside the constrained set, closest to a single point.
872 { 660 {
873 constraint_factory_.Reset(); 661 constraint_factory_.Reset();
874 constraint_factory_.basic().width.setMin(100); 662 constraint_factory_.basic().width.setMin(100);
875 constraint_factory_.basic().width.setMax(500); 663 constraint_factory_.basic().width.setMax(500);
876 constraint_factory_.basic().height.setMin(100); 664 constraint_factory_.basic().height.setMin(100);
877 constraint_factory_.basic().height.setMax(500); 665 constraint_factory_.basic().height.setMax(500);
878 constraint_factory_.basic().aspectRatio.setMax(1.0); 666 constraint_factory_.basic().aspectRatio.setMax(1.0);
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 839
1052 // Ideal greater than maximum. 840 // Ideal greater than maximum.
1053 { 841 {
1054 constraint_factory_.Reset(); 842 constraint_factory_.Reset();
1055 const double kIdealAspectRatio = 2.0; 843 const double kIdealAspectRatio = 2.0;
1056 const double kMaxAspectRatio = 1.5; 844 const double kMaxAspectRatio = 1.5;
1057 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); 845 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio);
1058 constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio); 846 constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio);
1059 auto result = SelectSettings(); 847 auto result = SelectSettings();
1060 EXPECT_TRUE(result.HasValue()); 848 EXPECT_TRUE(result.HasValue());
1061 // Ideal height is greater than the maximum, expect maximum. 849 // Ideal aspect ratio is greater than the maximum, expect maximum.
1062 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 850 EXPECT_EQ(std::round(kDefaultScreenCastWidth / kMaxAspectRatio),
1063 EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMaxAspectRatio), 851 result.Height());
1064 result.Width()); 852 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
1065 CheckNonResolutionDefaults(result); 853 CheckNonResolutionDefaults(result);
1066 EXPECT_EQ( 854 EXPECT_EQ(
1067 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension, 855 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension,
1068 result.track_adapter_settings().min_aspect_ratio); 856 result.track_adapter_settings().min_aspect_ratio);
1069 EXPECT_EQ(kMaxAspectRatio, 857 EXPECT_EQ(kMaxAspectRatio,
1070 result.track_adapter_settings().max_aspect_ratio); 858 result.track_adapter_settings().max_aspect_ratio);
1071 CheckTrackAdapterSettingsEqualsFormat(result); 859 CheckTrackAdapterSettingsEqualsFormat(result);
1072 } 860 }
1073 861
1074 // Ideal less than minimum. 862 // Ideal less than minimum.
1075 { 863 {
1076 constraint_factory_.Reset(); 864 constraint_factory_.Reset();
1077 const double kIdealAspectRatio = 1.0; 865 const double kIdealAspectRatio = 1.0;
1078 const double kMinAspectRatio = 1.5; 866 const double kMinAspectRatio = 1.5;
1079 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); 867 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio);
1080 constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio); 868 constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio);
1081 auto result = SelectSettings(); 869 auto result = SelectSettings();
1082 EXPECT_TRUE(result.HasValue()); 870 EXPECT_TRUE(result.HasValue());
1083 // Ideal height is greater than the maximum, expect maximum. 871 // Ideal aspect ratio is less than the maximum, expect minimum.
1084 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 872 EXPECT_EQ(std::round(kDefaultScreenCastWidth / kMinAspectRatio),
1085 EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMinAspectRatio), 873 result.Height());
1086 result.Width()); 874 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
1087 CheckNonResolutionDefaults(result); 875 CheckNonResolutionDefaults(result);
1088 EXPECT_EQ(kMinAspectRatio, 876 EXPECT_EQ(kMinAspectRatio,
1089 result.track_adapter_settings().min_aspect_ratio); 877 result.track_adapter_settings().min_aspect_ratio);
1090 EXPECT_EQ( 878 EXPECT_EQ(
1091 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 879 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
1092 result.track_adapter_settings().max_aspect_ratio); 880 result.track_adapter_settings().max_aspect_ratio);
1093 CheckTrackAdapterSettingsEqualsFormat(result); 881 CheckTrackAdapterSettingsEqualsFormat(result);
1094 } 882 }
1095 883
1096 // Ideal intersects a box. 884 // Ideal intersects a box.
(...skipping 18 matching lines...) Expand all
1115 EXPECT_EQ(100.0 / 500.0, result.track_adapter_settings().min_aspect_ratio); 903 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); 904 EXPECT_EQ(500.0 / 100.0, result.track_adapter_settings().max_aspect_ratio);
1117 CheckTrackAdapterSettingsEqualsFormat(result); 905 CheckTrackAdapterSettingsEqualsFormat(result);
1118 906
1119 constraint_factory_.basic().height.setMin(1000); 907 constraint_factory_.basic().height.setMin(1000);
1120 constraint_factory_.basic().height.setMax(5000); 908 constraint_factory_.basic().height.setMax(5000);
1121 constraint_factory_.basic().width.setMin(1000); 909 constraint_factory_.basic().width.setMin(1000);
1122 constraint_factory_.basic().width.setMax(5000); 910 constraint_factory_.basic().width.setMax(5000);
1123 result = SelectSettings(); 911 result = SelectSettings();
1124 EXPECT_TRUE(result.HasValue()); 912 EXPECT_TRUE(result.HasValue());
1125 // Ideal aspect-ratio is included in the bounding box, with the value 913 // Ideal aspect-ratio is included in the bounding box.
1126 // closest to a standard width or height and largest area being the cut with 914 EXPECT_EQ(
1127 // the minimum height. 915 std::round(constraint_factory_.basic().width.max() / kIdealAspectRatio),
1128 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height()); 916 result.Height());
1129 EXPECT_EQ(std::round(constraint_factory_.basic().height.min() * 917 EXPECT_EQ(constraint_factory_.basic().width.max(), result.Width());
1130 kIdealAspectRatio),
1131 result.Width());
1132 CheckNonResolutionDefaults(result); 918 CheckNonResolutionDefaults(result);
1133 EXPECT_EQ(1000.0 / 5000.0, 919 EXPECT_EQ(1000.0 / 5000.0,
1134 result.track_adapter_settings().min_aspect_ratio); 920 result.track_adapter_settings().min_aspect_ratio);
1135 EXPECT_EQ(5000.0 / 1000.0, 921 EXPECT_EQ(5000.0 / 1000.0,
1136 result.track_adapter_settings().max_aspect_ratio); 922 result.track_adapter_settings().max_aspect_ratio);
1137 CheckTrackAdapterSettingsEqualsFormat(result); 923 CheckTrackAdapterSettingsEqualsFormat(result);
1138 924
925 constraint_factory_.Reset();
926 constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio);
1139 constraint_factory_.basic().height.setMin(250); 927 constraint_factory_.basic().height.setMin(250);
1140 constraint_factory_.basic().height.setMax(5000);
1141 constraint_factory_.basic().width.setMin(250); 928 constraint_factory_.basic().width.setMin(250);
1142 constraint_factory_.basic().width.setMax(5000);
1143 result = SelectSettings(); 929 result = SelectSettings();
1144 EXPECT_TRUE(result.HasValue()); 930 EXPECT_TRUE(result.HasValue());
1145 // Ideal aspect-ratio and default width and height are included in the 931 // Ideal aspect-ratio is included in the bounding box. Preserving default
1146 // bounding box. Preserving default height leads to larger area than 932 // height leads to larger area than preserving default width.
1147 // preserving default width.
1148 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 933 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
1149 EXPECT_EQ(kDefaultScreenCastHeight * kIdealAspectRatio, result.Width()); 934 EXPECT_EQ(kDefaultScreenCastHeight * kIdealAspectRatio, result.Width());
1150 CheckNonResolutionDefaults(result); 935 CheckNonResolutionDefaults(result);
1151 EXPECT_EQ(250.0 / 5000.0, result.track_adapter_settings().min_aspect_ratio); 936 EXPECT_EQ(250.0 / kMaxScreenCastDimension,
1152 EXPECT_EQ(5000.0 / 250.0, result.track_adapter_settings().max_aspect_ratio); 937 result.track_adapter_settings().min_aspect_ratio);
938 EXPECT_EQ(kMaxScreenCastDimension / 250.0,
939 result.track_adapter_settings().max_aspect_ratio);
1153 CheckTrackAdapterSettingsEqualsFormat(result); 940 CheckTrackAdapterSettingsEqualsFormat(result);
1154 } 941 }
1155 942
1156 // Ideal outside the constrained area, closest to min or max aspect ratio. 943 // Ideal outside the constrained area, closest to min or max aspect ratio.
1157 { 944 {
1158 const double kMinAspectRatio = 0.5; 945 const double kMinAspectRatio = 0.5;
1159 const double kMaxAspectRatio = 2.0; 946 const double kMaxAspectRatio = 2.0;
1160 constraint_factory_.Reset(); 947 constraint_factory_.Reset();
1161 constraint_factory_.basic().height.setMin(100); 948 constraint_factory_.basic().height.setMin(100);
1162 constraint_factory_.basic().height.setMax(500); 949 constraint_factory_.basic().height.setMax(500);
(...skipping 26 matching lines...) Expand all
1189 result.Width()); 976 result.Width());
1190 CheckNonResolutionDefaults(result); 977 CheckNonResolutionDefaults(result);
1191 EXPECT_EQ(kMinAspectRatio, 978 EXPECT_EQ(kMinAspectRatio,
1192 result.track_adapter_settings().min_aspect_ratio); 979 result.track_adapter_settings().min_aspect_ratio);
1193 EXPECT_EQ(kMaxAspectRatio, 980 EXPECT_EQ(kMaxAspectRatio,
1194 result.track_adapter_settings().max_aspect_ratio); 981 result.track_adapter_settings().max_aspect_ratio);
1195 CheckTrackAdapterSettingsEqualsFormat(result); 982 CheckTrackAdapterSettingsEqualsFormat(result);
1196 983
1197 // Use a box that is bigger and further from the origin to force closeness 984 // Use a box that is bigger and further from the origin to force closeness
1198 // to a different default dimension. 985 // to a different default dimension.
1199 constraint_factory_.basic().height.setMin(1000); 986 constraint_factory_.Reset();
1200 constraint_factory_.basic().height.setMax(5000); 987 constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio);
1201 constraint_factory_.basic().width.setMin(1000); 988 constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio);
1202 constraint_factory_.basic().width.setMax(5000); 989 constraint_factory_.basic().height.setMin(3000);
990 constraint_factory_.basic().width.setMin(3000);
1203 constraint_factory_.basic().aspectRatio.setIdeal(3.0); 991 constraint_factory_.basic().aspectRatio.setIdeal(3.0);
1204 result = SelectSettings(); 992 result = SelectSettings();
1205 EXPECT_TRUE(result.HasValue()); 993 EXPECT_TRUE(result.HasValue());
1206 // Ideal is closest to kMaxAspectRatio. 994 // Ideal is closest to kMaxAspectRatio.
1207 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height()); 995 EXPECT_EQ(constraint_factory_.basic().height.min(), result.Height());
1208 EXPECT_EQ( 996 EXPECT_EQ(
1209 std::round(constraint_factory_.basic().height.min() * kMaxAspectRatio), 997 std::round(constraint_factory_.basic().height.min() * kMaxAspectRatio),
1210 result.Width()); 998 result.Width());
1211 CheckNonResolutionDefaults(result); 999 CheckNonResolutionDefaults(result);
1212 EXPECT_EQ(kMinAspectRatio, 1000 EXPECT_EQ(kMinAspectRatio,
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
1593 } 1381 }
1594 1382
1595 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedNoiseReduction) { 1383 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedNoiseReduction) {
1596 constraint_factory_.Reset(); 1384 constraint_factory_.Reset();
1597 blink::WebMediaTrackConstraintSet& advanced1 = 1385 blink::WebMediaTrackConstraintSet& advanced1 =
1598 constraint_factory_.AddAdvanced(); 1386 constraint_factory_.AddAdvanced();
1599 advanced1.width.setMin(640); 1387 advanced1.width.setMin(640);
1600 advanced1.height.setMin(480); 1388 advanced1.height.setMin(480);
1601 blink::WebMediaTrackConstraintSet& advanced2 = 1389 blink::WebMediaTrackConstraintSet& advanced2 =
1602 constraint_factory_.AddAdvanced(); 1390 constraint_factory_.AddAdvanced();
1603 advanced2.width.setMin(1920); 1391 const int kMinWidth = 4000;
1604 advanced2.height.setMin(1080); 1392 const int kMinHeight = 2000;
1393 advanced2.width.setMin(kMinWidth);
1394 advanced2.height.setMin(kMinHeight);
1605 advanced2.googNoiseReduction.setExact(false); 1395 advanced2.googNoiseReduction.setExact(false);
1606 auto result = SelectSettings(); 1396 auto result = SelectSettings();
1607 EXPECT_TRUE(result.HasValue()); 1397 EXPECT_TRUE(result.HasValue());
1608 EXPECT_EQ(1920, result.Width()); 1398 EXPECT_EQ(kMinWidth, result.Width());
1609 // Preserves default aspect ratio. 1399 // Preserves default aspect ratio.
1610 EXPECT_EQ(static_cast<int>( 1400 EXPECT_EQ(static_cast<int>(
1611 std::round(result.Width() / kDefaultScreenCastAspectRatio)), 1401 std::round(result.Width() / kDefaultScreenCastAspectRatio)),
1612 result.Height()); 1402 result.Height());
1613 EXPECT_TRUE(result.noise_reduction() && !*result.noise_reduction()); 1403 EXPECT_TRUE(result.noise_reduction() && !*result.noise_reduction());
1614 EXPECT_EQ(1920.0 / static_cast<double>(kMaxScreenCastDimension), 1404 EXPECT_EQ(kMinWidth / static_cast<double>(kMaxScreenCastDimension),
1615 result.track_adapter_settings().min_aspect_ratio); 1405 result.track_adapter_settings().min_aspect_ratio);
1616 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / 1080.0, 1406 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
1617 result.track_adapter_settings().max_aspect_ratio); 1407 result.track_adapter_settings().max_aspect_ratio);
1618 CheckTrackAdapterSettingsEqualsFormat(result); 1408 CheckTrackAdapterSettingsEqualsFormat(result);
1619 } 1409 }
1620 1410
1621 // The "AdvancedContradictory" tests check that advanced constraint sets that 1411 // The "AdvancedContradictory" tests check that advanced constraint sets that
1622 // contradict previous constraint sets are ignored. 1412 // contradict previous constraint sets are ignored.
1623 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1413 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1624 AdvancedContradictoryNoiseReduction) { 1414 AdvancedContradictoryNoiseReduction) {
1625 constraint_factory_.Reset(); 1415 constraint_factory_.Reset();
1626 blink::WebMediaTrackConstraintSet& advanced1 = 1416 blink::WebMediaTrackConstraintSet& advanced1 =
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1684 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1474 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
1685 EXPECT_EQ(kMinScreenCastDimension / 480.0, 1475 EXPECT_EQ(kMinScreenCastDimension / 480.0,
1686 result.track_adapter_settings().min_aspect_ratio); 1476 result.track_adapter_settings().min_aspect_ratio);
1687 EXPECT_EQ(640.0 / kMinScreenCastDimension, 1477 EXPECT_EQ(640.0 / kMinScreenCastDimension,
1688 result.track_adapter_settings().max_aspect_ratio); 1478 result.track_adapter_settings().max_aspect_ratio);
1689 CheckTrackAdapterSettingsEqualsFormat(result); 1479 CheckTrackAdapterSettingsEqualsFormat(result);
1690 } 1480 }
1691 1481
1692 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1482 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1693 AdvancedContradictoryMinMaxResolutionFrameRate) { 1483 AdvancedContradictoryMinMaxResolutionFrameRate) {
1484 const int kMinHeight = 2600;
1485 const int kMinWidth = 2800;
1694 constraint_factory_.Reset(); 1486 constraint_factory_.Reset();
1695 blink::WebMediaTrackConstraintSet& advanced1 = 1487 blink::WebMediaTrackConstraintSet& advanced1 =
1696 constraint_factory_.AddAdvanced(); 1488 constraint_factory_.AddAdvanced();
1697 advanced1.width.setMin(800); 1489 advanced1.width.setMin(kMinWidth);
1698 advanced1.height.setMin(600); 1490 advanced1.height.setMin(kMinHeight);
1699 blink::WebMediaTrackConstraintSet& advanced2 = 1491 blink::WebMediaTrackConstraintSet& advanced2 =
1700 constraint_factory_.AddAdvanced(); 1492 constraint_factory_.AddAdvanced();
1701 advanced2.width.setMax(640); 1493 advanced2.width.setMax(640);
1702 advanced2.height.setMax(480); 1494 advanced2.height.setMax(480);
1703 advanced2.frameRate.setExact(60.0); 1495 advanced2.frameRate.setExact(60.0);
1704 auto result = SelectSettings(); 1496 auto result = SelectSettings();
1705 EXPECT_TRUE(result.HasValue()); 1497 EXPECT_TRUE(result.HasValue());
1706 EXPECT_EQ(800, result.Width()); 1498 EXPECT_EQ(std::round(kMinHeight * kDefaultScreenCastAspectRatio),
1707 EXPECT_EQ(600, result.Height()); 1499 result.Width());
1500 EXPECT_EQ(kMinHeight, result.Height());
1708 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1501 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
1709 EXPECT_EQ(800.0 / kMaxScreenCastDimension, 1502 EXPECT_EQ(static_cast<double>(kMinWidth) / kMaxScreenCastDimension,
1710 result.track_adapter_settings().min_aspect_ratio); 1503 result.track_adapter_settings().min_aspect_ratio);
1711 EXPECT_EQ(kMaxScreenCastDimension / 600.0, 1504 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
1712 result.track_adapter_settings().max_aspect_ratio); 1505 result.track_adapter_settings().max_aspect_ratio);
1713 CheckTrackAdapterSettingsEqualsFormat(result); 1506 CheckTrackAdapterSettingsEqualsFormat(result);
1714 } 1507 }
1715 1508
1716 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1509 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1717 AdvancedContradictoryExactAspectRatio) { 1510 AdvancedContradictoryExactAspectRatio) {
1718 constraint_factory_.Reset(); 1511 constraint_factory_.Reset();
1719 blink::WebMediaTrackConstraintSet& advanced1 = 1512 blink::WebMediaTrackConstraintSet& advanced1 =
1720 constraint_factory_.AddAdvanced(); 1513 constraint_factory_.AddAdvanced();
1721 advanced1.aspectRatio.setExact(10.0); 1514 advanced1.aspectRatio.setExact(10.0);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 advanced2.frameRate.setMax(35.0); 1573 advanced2.frameRate.setMax(35.0);
1781 auto result = SelectSettings(); 1574 auto result = SelectSettings();
1782 EXPECT_TRUE(result.HasValue()); 1575 EXPECT_TRUE(result.HasValue());
1783 EXPECT_LE(40.0, result.FrameRate()); 1576 EXPECT_LE(40.0, result.FrameRate());
1784 CheckNonFrameRateDefaults(result); 1577 CheckNonFrameRateDefaults(result);
1785 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1578 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1786 } 1579 }
1787 1580
1788 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1581 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1789 AdvancedContradictoryWidthFrameRate) { 1582 AdvancedContradictoryWidthFrameRate) {
1583 const int kMaxWidth = 1920;
1790 constraint_factory_.Reset(); 1584 constraint_factory_.Reset();
1791 blink::WebMediaTrackConstraintSet& advanced1 = 1585 blink::WebMediaTrackConstraintSet& advanced1 =
1792 constraint_factory_.AddAdvanced(); 1586 constraint_factory_.AddAdvanced();
1793 advanced1.width.setMax(1920); 1587 advanced1.width.setMax(kMaxWidth);
1794 blink::WebMediaTrackConstraintSet& advanced2 = 1588 blink::WebMediaTrackConstraintSet& advanced2 =
1795 constraint_factory_.AddAdvanced(); 1589 constraint_factory_.AddAdvanced();
1796 advanced2.width.setMin(2000); 1590 advanced2.width.setMin(2000);
1797 advanced2.frameRate.setExact(10.0); 1591 advanced2.frameRate.setExact(10.0);
1798 blink::WebMediaTrackConstraintSet& advanced3 = 1592 blink::WebMediaTrackConstraintSet& advanced3 =
1799 constraint_factory_.AddAdvanced(); 1593 constraint_factory_.AddAdvanced();
1800 advanced3.frameRate.setExact(90.0); 1594 advanced3.frameRate.setExact(90.0);
1801 auto result = SelectSettings(); 1595 auto result = SelectSettings();
1802 EXPECT_TRUE(result.HasValue()); 1596 EXPECT_TRUE(result.HasValue());
1803 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 1597 EXPECT_EQ(kMaxWidth, result.Width());
1804 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1598 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
1599 result.Height());
1805 EXPECT_EQ(90.0, result.FrameRate()); 1600 EXPECT_EQ(90.0, result.FrameRate());
1806 EXPECT_EQ( 1601 EXPECT_EQ(
1807 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension, 1602 static_cast<double>(kMinScreenCastDimension) / kMaxScreenCastDimension,
1808 result.track_adapter_settings().min_aspect_ratio); 1603 result.track_adapter_settings().min_aspect_ratio);
1809 EXPECT_EQ(1920.0 / kMinScreenCastDimension, 1604 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
1810 result.track_adapter_settings().max_aspect_ratio); 1605 result.track_adapter_settings().max_aspect_ratio);
1811 CheckTrackAdapterSettingsEqualsFormat(result); 1606 CheckTrackAdapterSettingsEqualsFormat(result);
1812 } 1607 }
1813 1608
1814 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1609 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1815 AdvancedContradictoryHeightFrameRate) { 1610 AdvancedContradictoryHeightFrameRate) {
1611 const int kMaxHeight = 2000;
1816 constraint_factory_.Reset(); 1612 constraint_factory_.Reset();
1817 blink::WebMediaTrackConstraintSet& advanced1 = 1613 blink::WebMediaTrackConstraintSet& advanced1 =
1818 constraint_factory_.AddAdvanced(); 1614 constraint_factory_.AddAdvanced();
1819 advanced1.height.setMax(1080); 1615 advanced1.height.setMax(kMaxHeight);
1820 blink::WebMediaTrackConstraintSet& advanced2 = 1616 blink::WebMediaTrackConstraintSet& advanced2 =
1821 constraint_factory_.AddAdvanced(); 1617 constraint_factory_.AddAdvanced();
1822 advanced2.height.setMin(1500); 1618 advanced2.height.setMin(4500);
1823 advanced2.frameRate.setExact(10.0); 1619 advanced2.frameRate.setExact(10.0);
1824 blink::WebMediaTrackConstraintSet& advanced3 = 1620 blink::WebMediaTrackConstraintSet& advanced3 =
1825 constraint_factory_.AddAdvanced(); 1621 constraint_factory_.AddAdvanced();
1826 advanced3.frameRate.setExact(60.0); 1622 advanced3.frameRate.setExact(60.0);
1827 auto result = SelectSettings(); 1623 auto result = SelectSettings();
1828 EXPECT_TRUE(result.HasValue()); 1624 EXPECT_TRUE(result.HasValue());
1829 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 1625 EXPECT_EQ(kMaxHeight * kDefaultScreenCastAspectRatio, result.Width());
1830 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1626 // Height defaults to explicitly given max constraint.
1627 EXPECT_EQ(kMaxHeight, result.Height());
1831 EXPECT_EQ(60.0, result.FrameRate()); 1628 EXPECT_EQ(60.0, result.FrameRate());
1832 EXPECT_EQ(static_cast<double>(kMinScreenCastDimension) / 1080.0, 1629 EXPECT_EQ(static_cast<double>(kMinScreenCastDimension) / kMaxHeight,
1833 result.track_adapter_settings().min_aspect_ratio); 1630 result.track_adapter_settings().min_aspect_ratio);
1834 EXPECT_EQ( 1631 EXPECT_EQ(
1835 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 1632 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
1836 result.track_adapter_settings().max_aspect_ratio); 1633 result.track_adapter_settings().max_aspect_ratio);
1837 CheckTrackAdapterSettingsEqualsFormat(result); 1634 CheckTrackAdapterSettingsEqualsFormat(result);
1838 } 1635 }
1839 1636
1840 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedDeviceID) { 1637 TEST_F(MediaStreamConstraintsUtilVideoContentTest, AdvancedDeviceID) {
1841 const std::string kDeviceID1 = "fake_device_1"; 1638 const std::string kDeviceID1 = "fake_device_1";
1842 const std::string kDeviceID2 = "fake_device_2"; 1639 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. 1802 // Exact aspect ratio prevents the resolution from being adjusted.
2006 EXPECT_EQ(media::RESOLUTION_POLICY_FIXED_RESOLUTION, 1803 EXPECT_EQ(media::RESOLUTION_POLICY_FIXED_RESOLUTION,
2007 result.ResolutionChangePolicy()); 1804 result.ResolutionChangePolicy());
2008 EXPECT_EQ(1.32, result.track_adapter_settings().min_aspect_ratio); 1805 EXPECT_EQ(1.32, result.track_adapter_settings().min_aspect_ratio);
2009 EXPECT_EQ(1.32, result.track_adapter_settings().max_aspect_ratio); 1806 EXPECT_EQ(1.32, result.track_adapter_settings().max_aspect_ratio);
2010 CheckTrackAdapterSettingsEqualsFormat(result); 1807 CheckTrackAdapterSettingsEqualsFormat(result);
2011 } 1808 }
2012 } 1809 }
2013 1810
2014 } // namespace content 1811 } // 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