OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |