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

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

Issue 2814063002: Update constraints algorithm for screen capture. (Closed)
Patch Set: maxmorin's comments and minor rearrangement of constants 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"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 71 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
72 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 72 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
73 CheckNonResolutionDefaults(result); 73 CheckNonResolutionDefaults(result);
74 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 74 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
75 } 75 }
76 76
77 // The "Overconstrained" tests verify that failure of any single required 77 // The "Overconstrained" tests verify that failure of any single required
78 // constraint results in failure to select a candidate. 78 // constraint results in failure to select a candidate.
79 TEST_F(MediaStreamConstraintsUtilVideoContentTest, OverconstrainedOnHeight) { 79 TEST_F(MediaStreamConstraintsUtilVideoContentTest, OverconstrainedOnHeight) {
80 constraint_factory_.Reset(); 80 constraint_factory_.Reset();
81 constraint_factory_.basic().height.SetExact(123467890); 81 constraint_factory_.basic().height.SetExact(kMaxScreenCastDimension + 1);
82 auto result = SelectSettings(); 82 auto result = SelectSettings();
83 EXPECT_FALSE(result.HasValue()); 83 EXPECT_FALSE(result.HasValue());
84 EXPECT_EQ(constraint_factory_.basic().height.GetName(), 84 EXPECT_EQ(constraint_factory_.basic().height.GetName(),
85 result.failed_constraint_name()); 85 result.failed_constraint_name());
86 86
87 constraint_factory_.Reset(); 87 constraint_factory_.Reset();
88 constraint_factory_.basic().height.SetMin(123467890); 88 constraint_factory_.basic().height.SetMin(kMaxScreenCastDimension + 1);
89 result = SelectSettings(); 89 result = SelectSettings();
90 EXPECT_FALSE(result.HasValue()); 90 EXPECT_FALSE(result.HasValue());
91 EXPECT_EQ(constraint_factory_.basic().height.GetName(), 91 EXPECT_EQ(constraint_factory_.basic().height.GetName(),
92 result.failed_constraint_name()); 92 result.failed_constraint_name());
93 93
94 constraint_factory_.Reset(); 94 constraint_factory_.Reset();
95 constraint_factory_.basic().height.SetMax(0); 95 constraint_factory_.basic().height.SetMax(kMinScreenCastDimension - 1);
96 result = SelectSettings(); 96 result = SelectSettings();
97 EXPECT_FALSE(result.HasValue()); 97 EXPECT_FALSE(result.HasValue());
98 EXPECT_EQ(constraint_factory_.basic().height.GetName(), 98 EXPECT_EQ(constraint_factory_.basic().height.GetName(),
99 result.failed_constraint_name()); 99 result.failed_constraint_name());
100 } 100 }
101 101
102 TEST_F(MediaStreamConstraintsUtilVideoContentTest, OverconstrainedOnWidth) { 102 TEST_F(MediaStreamConstraintsUtilVideoContentTest, OverconstrainedOnWidth) {
103 constraint_factory_.Reset(); 103 constraint_factory_.Reset();
104 constraint_factory_.basic().width.SetExact(123467890); 104 constraint_factory_.basic().width.SetExact(kMaxScreenCastDimension + 1);
105 auto result = SelectSettings(); 105 auto result = SelectSettings();
106 EXPECT_FALSE(result.HasValue()); 106 EXPECT_FALSE(result.HasValue());
107 EXPECT_EQ(constraint_factory_.basic().width.GetName(), 107 EXPECT_EQ(constraint_factory_.basic().width.GetName(),
108 result.failed_constraint_name()); 108 result.failed_constraint_name());
109 109
110 constraint_factory_.Reset(); 110 constraint_factory_.Reset();
111 constraint_factory_.basic().width.SetMin(123467890); 111 constraint_factory_.basic().width.SetMin(kMaxScreenCastDimension + 1);
112 result = SelectSettings(); 112 result = SelectSettings();
113 EXPECT_FALSE(result.HasValue()); 113 EXPECT_FALSE(result.HasValue());
114 EXPECT_EQ(constraint_factory_.basic().width.GetName(), 114 EXPECT_EQ(constraint_factory_.basic().width.GetName(),
115 result.failed_constraint_name()); 115 result.failed_constraint_name());
116 116
117 constraint_factory_.Reset(); 117 constraint_factory_.Reset();
118 constraint_factory_.basic().width.SetMax(0); 118 constraint_factory_.basic().width.SetMax(kMinScreenCastDimension - 1);
119 result = SelectSettings(); 119 result = SelectSettings();
120 EXPECT_FALSE(result.HasValue()); 120 EXPECT_FALSE(result.HasValue());
121 EXPECT_EQ(constraint_factory_.basic().width.GetName(), 121 EXPECT_EQ(constraint_factory_.basic().width.GetName(),
122 result.failed_constraint_name()); 122 result.failed_constraint_name());
123 } 123 }
124 124
125 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 125 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
126 OverconstrainedOnAspectRatio) { 126 OverconstrainedOnAspectRatio) {
127 constraint_factory_.Reset(); 127 constraint_factory_.Reset();
128 constraint_factory_.basic().aspect_ratio.SetExact(123467890); 128 constraint_factory_.basic().aspect_ratio.SetExact(123467890);
(...skipping 12 matching lines...) Expand all
141 constraint_factory_.Reset(); 141 constraint_factory_.Reset();
142 constraint_factory_.basic().aspect_ratio.SetMax(0.00001); 142 constraint_factory_.basic().aspect_ratio.SetMax(0.00001);
143 result = SelectSettings(); 143 result = SelectSettings();
144 EXPECT_FALSE(result.HasValue()); 144 EXPECT_FALSE(result.HasValue());
145 EXPECT_EQ(constraint_factory_.basic().aspect_ratio.GetName(), 145 EXPECT_EQ(constraint_factory_.basic().aspect_ratio.GetName(),
146 result.failed_constraint_name()); 146 result.failed_constraint_name());
147 } 147 }
148 148
149 TEST_F(MediaStreamConstraintsUtilVideoContentTest, OverconstrainedOnFrameRate) { 149 TEST_F(MediaStreamConstraintsUtilVideoContentTest, OverconstrainedOnFrameRate) {
150 constraint_factory_.Reset(); 150 constraint_factory_.Reset();
151 constraint_factory_.basic().frame_rate.SetExact(123467890.0); 151 constraint_factory_.basic().frame_rate.SetExact(kMaxScreenCastFrameRate +
152 0.1);
152 auto result = SelectSettings(); 153 auto result = SelectSettings();
153 EXPECT_FALSE(result.HasValue()); 154 EXPECT_FALSE(result.HasValue());
154 EXPECT_EQ(constraint_factory_.basic().frame_rate.GetName(), 155 EXPECT_EQ(constraint_factory_.basic().frame_rate.GetName(),
155 result.failed_constraint_name()); 156 result.failed_constraint_name());
156 157
157 constraint_factory_.Reset(); 158 constraint_factory_.Reset();
158 constraint_factory_.basic().frame_rate.SetMin(123467890.0); 159 constraint_factory_.basic().frame_rate.SetMin(kMaxScreenCastFrameRate + 0.1);
159 result = SelectSettings(); 160 result = SelectSettings();
160 EXPECT_FALSE(result.HasValue()); 161 EXPECT_FALSE(result.HasValue());
161 EXPECT_EQ(constraint_factory_.basic().frame_rate.GetName(), 162 EXPECT_EQ(constraint_factory_.basic().frame_rate.GetName(),
162 result.failed_constraint_name()); 163 result.failed_constraint_name());
163 164
164 constraint_factory_.Reset(); 165 constraint_factory_.Reset();
165 constraint_factory_.basic().frame_rate.SetMax(0.0); 166 constraint_factory_.basic().frame_rate.SetMax(kMinScreenCastFrameRate - 0.1);
166 result = SelectSettings(); 167 result = SelectSettings();
167 EXPECT_FALSE(result.HasValue()); 168 EXPECT_FALSE(result.HasValue());
168 EXPECT_EQ(constraint_factory_.basic().frame_rate.GetName(), 169 EXPECT_EQ(constraint_factory_.basic().frame_rate.GetName(),
169 result.failed_constraint_name()); 170 result.failed_constraint_name());
170 } 171 }
171 172
172 // The "Mandatory" and "Ideal" tests check that various selection criteria work 173 // The "Mandatory" and "Ideal" tests check that various selection criteria work
173 // for each individual constraint in the basic constraint set. 174 // for each individual constraint in the basic constraint set.
174 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryDeviceID) { 175 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryDeviceID) {
175 const std::string kDeviceID = "Some ID"; 176 const std::string kDeviceID = "Some ID";
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 EXPECT_EQ(1.0 / kMaxHeight, 328 EXPECT_EQ(1.0 / kMaxHeight,
328 result.track_adapter_settings().min_aspect_ratio); 329 result.track_adapter_settings().min_aspect_ratio);
329 EXPECT_EQ(kMaxScreenCastDimension, 330 EXPECT_EQ(kMaxScreenCastDimension,
330 result.track_adapter_settings().max_aspect_ratio); 331 result.track_adapter_settings().max_aspect_ratio);
331 CheckTrackAdapterSettingsEqualsFormat(result); 332 CheckTrackAdapterSettingsEqualsFormat(result);
332 } 333 }
333 334
334 // kMaxHeight greater than the maximum allowed. 335 // kMaxHeight greater than the maximum allowed.
335 { 336 {
336 constraint_factory_.Reset(); 337 constraint_factory_.Reset();
337 constraint_factory_.basic().height.SetMax(kMaxScreenCastDimension + 100); 338 constraint_factory_.basic().height.SetMax(kMaxScreenCastDimension + 1);
338 auto result = SelectSettings(); 339 auto result = SelectSettings();
339 EXPECT_TRUE(result.HasValue()); 340 EXPECT_TRUE(result.HasValue());
340 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 341 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
341 EXPECT_EQ( 342 EXPECT_EQ(
342 std::round(kDefaultScreenCastHeight * kDefaultScreenCastAspectRatio), 343 std::round(kDefaultScreenCastHeight * kDefaultScreenCastAspectRatio),
343 result.Width()); 344 result.Width());
344 CheckNonResolutionDefaults(result); 345 CheckNonResolutionDefaults(result);
345 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 346 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
346 result.track_adapter_settings().min_aspect_ratio); 347 result.track_adapter_settings().min_aspect_ratio);
347 EXPECT_EQ(kMaxScreenCastDimension, 348 EXPECT_EQ(kMaxScreenCastDimension,
348 result.track_adapter_settings().max_aspect_ratio); 349 result.track_adapter_settings().max_aspect_ratio);
349 CheckTrackAdapterSettingsEqualsFormat(result); 350 CheckTrackAdapterSettingsEqualsFormat(result);
350 } 351 }
352
353 // kMaxHeight equal to the maximum allowed.
354 {
355 constraint_factory_.Reset();
356 const int kMaxHeight = kMaxScreenCastDimension;
357 constraint_factory_.basic().height.SetMax(kMaxHeight);
358 auto result = SelectSettings();
359 EXPECT_TRUE(result.HasValue());
360 EXPECT_EQ(kMaxHeight, result.Height());
361 // Since the given max is too large, the default aspect ratio cannot be
362 // used and the width is clamped to the maximum.
363 EXPECT_EQ(kMaxScreenCastDimension, result.Width());
364 CheckNonResolutionDefaults(result);
365 EXPECT_EQ(1.0 / kMaxHeight,
366 result.track_adapter_settings().min_aspect_ratio);
367 EXPECT_EQ(kMaxScreenCastDimension,
368 result.track_adapter_settings().max_aspect_ratio);
369 CheckTrackAdapterSettingsEqualsFormat(result);
370 }
351 } 371 }
352 372
353 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) { 373 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryHeightRange) {
354 // Range includes the default. 374 // Range includes the default.
355 { 375 {
356 constraint_factory_.Reset(); 376 constraint_factory_.Reset();
357 const int kMinHeight = kDefaultScreenCastHeight - 100; 377 const int kMinHeight = kDefaultScreenCastHeight - 100;
358 const int kMaxHeight = kDefaultScreenCastHeight + 100; 378 const int kMaxHeight = kDefaultScreenCastHeight + 100;
359 constraint_factory_.basic().height.SetMin(kMinHeight); 379 constraint_factory_.basic().height.SetMin(kMinHeight);
360 constraint_factory_.basic().height.SetMax(kMaxHeight); 380 constraint_factory_.basic().height.SetMax(kMaxHeight);
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
592 } 612 }
593 613
594 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxWidth) { 614 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxWidth) {
595 // kMaxWidth less than the default. 615 // kMaxWidth less than the default.
596 { 616 {
597 constraint_factory_.Reset(); 617 constraint_factory_.Reset();
598 const int kMaxWidth = kDefaultScreenCastWidth - 100; 618 const int kMaxWidth = kDefaultScreenCastWidth - 100;
599 constraint_factory_.basic().width.SetMax(kMaxWidth); 619 constraint_factory_.basic().width.SetMax(kMaxWidth);
600 auto result = SelectSettings(); 620 auto result = SelectSettings();
601 EXPECT_TRUE(result.HasValue()); 621 EXPECT_TRUE(result.HasValue());
602 // kSmallWidth is less that the default, so expect kSmallWidth. 622 // If max is provided, max is used as default.
603 EXPECT_EQ(kMaxWidth, result.Width()); 623 EXPECT_EQ(kMaxWidth, result.Width());
604 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio), 624 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
605 result.Height()); 625 result.Height());
606 CheckNonResolutionDefaults(result); 626 CheckNonResolutionDefaults(result);
607 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 627 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
608 result.track_adapter_settings().min_aspect_ratio); 628 result.track_adapter_settings().min_aspect_ratio);
609 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 629 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
610 result.track_adapter_settings().max_aspect_ratio); 630 result.track_adapter_settings().max_aspect_ratio);
611 CheckTrackAdapterSettingsEqualsFormat(result); 631 CheckTrackAdapterSettingsEqualsFormat(result);
612 } 632 }
613 633
614 // kMaxWidth greater than the default. 634 // kMaxWidth greater than the default.
615 { 635 {
616 constraint_factory_.Reset(); 636 constraint_factory_.Reset();
617 const int kMaxWidth = kDefaultScreenCastWidth + 100; 637 const int kMaxWidth = kDefaultScreenCastWidth + 100;
618 constraint_factory_.basic().width.SetMax(kMaxWidth); 638 constraint_factory_.basic().width.SetMax(kMaxWidth);
619 auto result = SelectSettings(); 639 auto result = SelectSettings();
620 EXPECT_TRUE(result.HasValue()); 640 EXPECT_TRUE(result.HasValue());
621 // kSmallWidth is less that the default, so expect kSmallWidth. 641 // If max is provided, max is used as default.
622 EXPECT_EQ(kMaxWidth, result.Width()); 642 EXPECT_EQ(kMaxWidth, result.Width());
623 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio), 643 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
624 result.Height()); 644 result.Height());
625 CheckNonResolutionDefaults(result); 645 CheckNonResolutionDefaults(result);
626 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 646 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
627 result.track_adapter_settings().min_aspect_ratio); 647 result.track_adapter_settings().min_aspect_ratio);
628 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension, 648 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
629 result.track_adapter_settings().max_aspect_ratio); 649 result.track_adapter_settings().max_aspect_ratio);
630 CheckTrackAdapterSettingsEqualsFormat(result); 650 CheckTrackAdapterSettingsEqualsFormat(result);
631 } 651 }
632 652
633 // kMaxWidth greater than the maximum allowed (gets ignored). 653 // kMaxWidth greater than the maximum allowed (gets ignored).
634 { 654 {
635 constraint_factory_.Reset(); 655 constraint_factory_.Reset();
636 constraint_factory_.basic().width.SetMax(kMaxScreenCastDimension + 100); 656 constraint_factory_.basic().width.SetMax(kMaxScreenCastDimension + 1);
637 auto result = SelectSettings(); 657 auto result = SelectSettings();
638 EXPECT_TRUE(result.HasValue()); 658 EXPECT_TRUE(result.HasValue());
639 // kSmallWidth is less that the default, so expect kSmallWidth. 659 // Expect the default, since the given max value cannot be used as default.
640 EXPECT_EQ(kDefaultScreenCastWidth, result.Width()); 660 EXPECT_EQ(kDefaultScreenCastWidth, result.Width());
641 EXPECT_EQ( 661 EXPECT_EQ(
642 std::round(kDefaultScreenCastWidth / kDefaultScreenCastAspectRatio), 662 std::round(kDefaultScreenCastWidth / kDefaultScreenCastAspectRatio),
643 result.Height()); 663 result.Height());
644 CheckNonResolutionDefaults(result); 664 CheckNonResolutionDefaults(result);
645 EXPECT_EQ(1.0 / kMaxScreenCastDimension, 665 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
646 result.track_adapter_settings().min_aspect_ratio); 666 result.track_adapter_settings().min_aspect_ratio);
647 EXPECT_EQ( 667 EXPECT_EQ(
648 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension, 668 static_cast<double>(kMaxScreenCastDimension) / kMinScreenCastDimension,
649 result.track_adapter_settings().max_aspect_ratio); 669 result.track_adapter_settings().max_aspect_ratio);
650 CheckTrackAdapterSettingsEqualsFormat(result); 670 CheckTrackAdapterSettingsEqualsFormat(result);
651 } 671 }
672
673 // kMaxWidth equal to the maximum allowed.
674 {
675 constraint_factory_.Reset();
676 const int kMaxWidth = kMaxScreenCastDimension;
677 constraint_factory_.basic().width.SetMax(kMaxWidth);
678 auto result = SelectSettings();
679 EXPECT_TRUE(result.HasValue());
680 EXPECT_EQ(kMaxWidth, result.Width());
681 EXPECT_EQ(std::round(kMaxWidth / kDefaultScreenCastAspectRatio),
682 result.Height());
683 CheckNonResolutionDefaults(result);
684 EXPECT_EQ(1.0 / kMaxScreenCastDimension,
685 result.track_adapter_settings().min_aspect_ratio);
686 EXPECT_EQ(static_cast<double>(kMaxWidth) / kMinScreenCastDimension,
687 result.track_adapter_settings().max_aspect_ratio);
688 CheckTrackAdapterSettingsEqualsFormat(result);
689 }
652 } 690 }
653 691
654 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) { 692 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryWidthRange) {
655 // The whole range is less than the default. 693 // The whole range is less than the default.
656 { 694 {
657 constraint_factory_.Reset(); 695 constraint_factory_.Reset();
658 const int kMinWidth = kDefaultScreenCastWidth - 200; 696 const int kMinWidth = kDefaultScreenCastWidth - 200;
659 const int kMaxWidth = kDefaultScreenCastWidth - 100; 697 const int kMaxWidth = kDefaultScreenCastWidth - 100;
660 constraint_factory_.basic().width.SetMin(kMinWidth); 698 constraint_factory_.basic().width.SetMin(kMinWidth);
661 constraint_factory_.basic().width.SetMax(kMaxWidth); 699 constraint_factory_.basic().width.SetMax(kMaxWidth);
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
1230 result = SelectSettings(); 1268 result = SelectSettings();
1231 EXPECT_TRUE(result.HasValue()); 1269 EXPECT_TRUE(result.HasValue());
1232 // kFrameRate is greater that the default, so expect kFrameRate. 1270 // kFrameRate is greater that the default, so expect kFrameRate.
1233 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1271 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
1234 CheckNonFrameRateDefaults(result); 1272 CheckNonFrameRateDefaults(result);
1235 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1273 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1236 } 1274 }
1237 1275
1238 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxFrameRate) { 1276 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryMaxFrameRate) {
1239 constraint_factory_.Reset(); 1277 constraint_factory_.Reset();
1240 const double kFrameRate = 45.0; 1278 // kMaxFrameRate greater than default
1241 constraint_factory_.basic().frame_rate.SetMax(kFrameRate); 1279 {
1242 auto result = SelectSettings(); 1280 const double kMaxFrameRate = 45.0;
1243 EXPECT_TRUE(result.HasValue()); 1281 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate);
1244 // kFrameRate is greater that the default, so expect the default. 1282 auto result = SelectSettings();
1245 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1283 EXPECT_TRUE(result.HasValue());
1246 CheckNonFrameRateDefaults(result); 1284 // If max frame rate is provided, it is used as default.
1247 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1285 EXPECT_EQ(kMaxFrameRate, result.FrameRate());
1286 CheckNonFrameRateDefaults(result);
1287 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1288 }
1248 1289
1249 const double kSmallFrameRate = 5.0; 1290 // kMaxFrameRate less than default
1250 constraint_factory_.basic().frame_rate.SetMax(kSmallFrameRate); 1291 {
1251 result = SelectSettings(); 1292 const double kMaxFrameRate = 5.0;
1252 EXPECT_TRUE(result.HasValue()); 1293 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate);
1253 // kFrameRate is less that the default, so expect kFrameRate. 1294 auto result = SelectSettings();
1254 EXPECT_EQ(kSmallFrameRate, result.FrameRate()); 1295 EXPECT_TRUE(result.HasValue());
1255 CheckNonFrameRateDefaults(result); 1296 // If max frame rate is provided, it is used as default.
1256 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1297 EXPECT_EQ(kMaxFrameRate, result.FrameRate());
1298 CheckNonFrameRateDefaults(result);
1299 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1300 }
1301
1302 // kMaxFrameRate greater than the maximum allowed
1303 {
1304 const double kMaxFrameRate = kMaxScreenCastFrameRate + 0.1;
1305 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate);
1306 auto result = SelectSettings();
1307 EXPECT_TRUE(result.HasValue());
1308 // Expect the default, since the given maximum is invalid.
1309 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate());
1310 CheckNonFrameRateDefaults(result);
1311 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1312 }
1313
1314 // kMaxFrameRate equal to the maximum allowed
1315 {
1316 const double kMaxFrameRate = kMaxScreenCastFrameRate;
1317 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate);
1318 auto result = SelectSettings();
1319 EXPECT_TRUE(result.HasValue());
1320 // If max frame rate is provided, it is used as default.
1321 EXPECT_EQ(kMaxFrameRate, result.FrameRate());
1322 CheckNonFrameRateDefaults(result);
1323 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1324 }
1257 } 1325 }
1258 1326
1259 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryRangeFrameRate) { 1327 TEST_F(MediaStreamConstraintsUtilVideoContentTest, MandatoryRangeFrameRate) {
1260 constraint_factory_.Reset(); 1328 constraint_factory_.Reset();
1261 { 1329 {
1262 const double kMinFrameRate = 15.0; 1330 const double kMinFrameRate = 15.0;
1263 const double kMaxFrameRate = 45.0; 1331 const double kMaxFrameRate = 45.0;
1264 constraint_factory_.basic().frame_rate.SetMax(kMinFrameRate); 1332 constraint_factory_.basic().frame_rate.SetMax(kMinFrameRate);
1265 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate); 1333 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate);
1266 auto result = SelectSettings(); 1334 auto result = SelectSettings();
1267 EXPECT_TRUE(result.HasValue()); 1335 EXPECT_TRUE(result.HasValue());
1268 // The range includes the default, so expect the default. 1336 // If max frame rate is provided, it is used as default.
1269 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1337 EXPECT_EQ(kMaxFrameRate, result.FrameRate());
1270 CheckNonFrameRateDefaults(result); 1338 CheckNonFrameRateDefaults(result);
1271 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1339 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1272 } 1340 }
1273 1341
1274 { 1342 {
1275 const double kMinFrameRate = 45.0; 1343 const double kMinFrameRate = 45.0;
1276 const double kMaxFrameRate = 55.0; 1344 const double kMaxFrameRate = 55.0;
1277 constraint_factory_.basic().frame_rate.SetMax(kMinFrameRate); 1345 constraint_factory_.basic().frame_rate.SetMax(kMinFrameRate);
1278 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate); 1346 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate);
1279 auto result = SelectSettings(); 1347 auto result = SelectSettings();
1280 EXPECT_TRUE(result.HasValue()); 1348 EXPECT_TRUE(result.HasValue());
1281 // The whole range is greater that the default, so expect the minimum. 1349 // If max frame rate is provided, it is used as default.
1282 EXPECT_EQ(kDefaultScreenCastFrameRate, result.FrameRate()); 1350 EXPECT_EQ(kMaxFrameRate, result.FrameRate());
1283 CheckNonFrameRateDefaults(result); 1351 CheckNonFrameRateDefaults(result);
1284 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1352 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1285 } 1353 }
1286 1354
1287 { 1355 {
1288 const double kMinFrameRate = 10.0; 1356 const double kMinFrameRate = 10.0;
1289 const double kMaxFrameRate = 15.0; 1357 const double kMaxFrameRate = 15.0;
1290 constraint_factory_.basic().frame_rate.SetMax(kMinFrameRate); 1358 constraint_factory_.basic().frame_rate.SetMax(kMinFrameRate);
1291 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate); 1359 constraint_factory_.basic().frame_rate.SetMax(kMaxFrameRate);
1292 auto result = SelectSettings(); 1360 auto result = SelectSettings();
1293 EXPECT_TRUE(result.HasValue()); 1361 EXPECT_TRUE(result.HasValue());
1294 // The whole range is less that the default, so expect the maximum. 1362 // If max frame rate is provided, it is used as default.
1295 EXPECT_EQ(kMaxFrameRate, result.FrameRate()); 1363 EXPECT_EQ(kMaxFrameRate, result.FrameRate());
1296 CheckNonFrameRateDefaults(result); 1364 CheckNonFrameRateDefaults(result);
1297 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result); 1365 CheckTrackAdapterSettingsEqualsFormatDefaultAspectRatio(result);
1298 } 1366 }
1299 } 1367 }
1300 1368
1301 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealFrameRate) { 1369 TEST_F(MediaStreamConstraintsUtilVideoContentTest, IdealFrameRate) {
1302 // Unconstrained. 1370 // Unconstrained.
1303 { 1371 {
1304 constraint_factory_.Reset(); 1372 constraint_factory_.Reset();
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight, 1735 EXPECT_EQ(static_cast<double>(kMaxScreenCastDimension) / kMinHeight,
1668 result.track_adapter_settings().max_aspect_ratio); 1736 result.track_adapter_settings().max_aspect_ratio);
1669 CheckTrackAdapterSettingsEqualsFormat(result); 1737 CheckTrackAdapterSettingsEqualsFormat(result);
1670 } 1738 }
1671 1739
1672 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1740 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1673 AdvancedContradictoryExactAspectRatio) { 1741 AdvancedContradictoryExactAspectRatio) {
1674 constraint_factory_.Reset(); 1742 constraint_factory_.Reset();
1675 blink::WebMediaTrackConstraintSet& advanced1 = 1743 blink::WebMediaTrackConstraintSet& advanced1 =
1676 constraint_factory_.AddAdvanced(); 1744 constraint_factory_.AddAdvanced();
1677 advanced1.aspect_ratio.SetExact(10.0); 1745 const double kMinAspectRatio = 5.0;
1746 advanced1.aspect_ratio.SetExact(kMinAspectRatio);
1678 blink::WebMediaTrackConstraintSet& advanced2 = 1747 blink::WebMediaTrackConstraintSet& advanced2 =
1679 constraint_factory_.AddAdvanced(); 1748 constraint_factory_.AddAdvanced();
1680 advanced2.aspect_ratio.SetExact(3.0); 1749 advanced2.aspect_ratio.SetExact(3.0);
1681 auto result = SelectSettings(); 1750 auto result = SelectSettings();
1682 EXPECT_TRUE(result.HasValue()); 1751 EXPECT_TRUE(result.HasValue());
1683 EXPECT_EQ(std::round(kDefaultScreenCastHeight * 10.0), result.Width()); 1752 EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMinAspectRatio),
1753 result.Width());
1684 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1754 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
1685 CheckNonResolutionDefaults(result); 1755 CheckNonResolutionDefaults(result);
1686 EXPECT_EQ(10.0, result.track_adapter_settings().min_aspect_ratio); 1756 EXPECT_EQ(kMinAspectRatio, result.track_adapter_settings().min_aspect_ratio);
1687 EXPECT_EQ(10.0, result.track_adapter_settings().max_aspect_ratio); 1757 EXPECT_EQ(kMinAspectRatio, result.track_adapter_settings().max_aspect_ratio);
1688 CheckTrackAdapterSettingsEqualsFormat(result); 1758 CheckTrackAdapterSettingsEqualsFormat(result);
1689 } 1759 }
1690 1760
1691 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1761 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1692 AdvancedContradictoryAspectRatioRange) { 1762 AdvancedContradictoryAspectRatioRange) {
1693 constraint_factory_.Reset(); 1763 constraint_factory_.Reset();
1694 blink::WebMediaTrackConstraintSet& advanced1 = 1764 blink::WebMediaTrackConstraintSet& advanced1 =
1695 constraint_factory_.AddAdvanced(); 1765 constraint_factory_.AddAdvanced();
1696 advanced1.aspect_ratio.SetMin(10.0); 1766 const double kMinAspectRatio = 5.0;
1767 advanced1.aspect_ratio.SetMin(kMinAspectRatio);
1697 blink::WebMediaTrackConstraintSet& advanced2 = 1768 blink::WebMediaTrackConstraintSet& advanced2 =
1698 constraint_factory_.AddAdvanced(); 1769 constraint_factory_.AddAdvanced();
1699 advanced2.aspect_ratio.SetMax(3.0); 1770 advanced2.aspect_ratio.SetMax(3.0);
1700 auto result = SelectSettings(); 1771 auto result = SelectSettings();
1701 EXPECT_TRUE(result.HasValue()); 1772 EXPECT_TRUE(result.HasValue());
1702 EXPECT_EQ(std::round(kDefaultScreenCastHeight * 10.0), result.Width()); 1773 EXPECT_EQ(std::round(kDefaultScreenCastHeight * kMinAspectRatio),
1774 result.Width());
1703 EXPECT_EQ(kDefaultScreenCastHeight, result.Height()); 1775 EXPECT_EQ(kDefaultScreenCastHeight, result.Height());
1704 CheckNonResolutionDefaults(result); 1776 CheckNonResolutionDefaults(result);
1705 EXPECT_EQ(10.0, result.track_adapter_settings().min_aspect_ratio); 1777 EXPECT_EQ(kMinAspectRatio, result.track_adapter_settings().min_aspect_ratio);
1706 EXPECT_EQ( 1778 EXPECT_EQ(
1707 kMaxScreenCastDimension / static_cast<double>(kMinScreenCastDimension), 1779 kMaxScreenCastDimension / static_cast<double>(kMinScreenCastDimension),
1708 result.track_adapter_settings().max_aspect_ratio); 1780 result.track_adapter_settings().max_aspect_ratio);
1709 CheckTrackAdapterSettingsEqualsFormat(result); 1781 CheckTrackAdapterSettingsEqualsFormat(result);
1710 } 1782 }
1711 1783
1712 TEST_F(MediaStreamConstraintsUtilVideoContentTest, 1784 TEST_F(MediaStreamConstraintsUtilVideoContentTest,
1713 AdvancedContradictoryExactFrameRate) { 1785 AdvancedContradictoryExactFrameRate) {
1714 constraint_factory_.Reset(); 1786 constraint_factory_.Reset();
1715 blink::WebMediaTrackConstraintSet& advanced1 = 1787 blink::WebMediaTrackConstraintSet& advanced1 =
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1979 // Only specifying a maximum resolution allows resolution adjustment. 2051 // Only specifying a maximum resolution allows resolution adjustment.
1980 EXPECT_EQ(media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT, 2052 EXPECT_EQ(media::RESOLUTION_POLICY_ANY_WITHIN_LIMIT,
1981 result.ResolutionChangePolicy()); 2053 result.ResolutionChangePolicy());
1982 EXPECT_EQ(1.0 / 4000, result.track_adapter_settings().min_aspect_ratio); 2054 EXPECT_EQ(1.0 / 4000, result.track_adapter_settings().min_aspect_ratio);
1983 EXPECT_EQ(4000.0, result.track_adapter_settings().max_aspect_ratio); 2055 EXPECT_EQ(4000.0, result.track_adapter_settings().max_aspect_ratio);
1984 CheckTrackAdapterSettingsEqualsFormat(result); 2056 CheckTrackAdapterSettingsEqualsFormat(result);
1985 } 2057 }
1986 } 2058 }
1987 2059
1988 } // namespace content 2060 } // 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