Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "content/renderer/media/media_stream_audio_processor_options.h" | 7 #include "content/renderer/media/media_stream_audio_processor_options.h" |
| 8 #include "content/renderer/media/media_stream_constraints_util.h" | 8 #include "content/renderer/media/media_stream_constraints_util.h" |
| 9 #include "content/renderer/media/media_stream_video_source.h" | 9 #include "content/renderer/media/media_stream_constraints_util_sets.h" |
| 10 #include "content/renderer/media/mock_constraint_factory.h" | 10 #include "content/renderer/media/mock_constraint_factory.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 namespace { | |
| 14 | |
| 15 const int kSourceHeight = 1000; | |
| 16 const int kSourceWidth = 1500; | |
| 17 constexpr double kSourceAspectRatio = | |
| 18 static_cast<double>(kSourceWidth) / static_cast<double>(kSourceHeight); | |
| 19 const double kSourceFrameRate = 100.0; | |
| 20 | |
| 21 media::VideoCaptureFormat SourceFormat() { | |
| 22 return media::VideoCaptureFormat(gfx::Size(kSourceWidth, kSourceHeight), | |
| 23 kSourceFrameRate, media::PIXEL_FORMAT_I420); | |
| 24 } | |
| 25 | |
| 26 } // namespace | |
| 27 | |
| 13 namespace content { | 28 namespace content { |
| 14 | 29 |
| 15 class MediaStreamConstraintsUtilTest : public testing::Test { | 30 class MediaStreamConstraintsUtilTest : public testing::Test { |
| 31 protected: | |
| 32 using DoubleRangeSet = NumericRangeSet<double>; | |
| 16 }; | 33 }; |
| 17 | 34 |
| 18 TEST_F(MediaStreamConstraintsUtilTest, BooleanConstraints) { | 35 TEST_F(MediaStreamConstraintsUtilTest, BooleanConstraints) { |
| 19 static const std::string kValueTrue = "true"; | 36 static const std::string kValueTrue = "true"; |
| 20 static const std::string kValueFalse = "false"; | 37 static const std::string kValueFalse = "false"; |
| 21 | 38 |
| 22 MockConstraintFactory constraint_factory; | 39 MockConstraintFactory constraint_factory; |
| 23 // Mandatory constraints. | 40 // Mandatory constraints. |
| 24 constraint_factory.basic().echoCancellation.setExact(true); | 41 constraint_factory.basic().echoCancellation.setExact(true); |
| 25 constraint_factory.basic().googEchoCancellation.setExact(false); | 42 constraint_factory.basic().googEchoCancellation.setExact(false); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 56 constraint_factory.basic().echoCancellation.setExact(true); | 73 constraint_factory.basic().echoCancellation.setExact(true); |
| 57 constraints = constraint_factory.CreateWebMediaConstraints(); | 74 constraints = constraint_factory.CreateWebMediaConstraints(); |
| 58 EXPECT_TRUE(GetConstraintValueAsBoolean( | 75 EXPECT_TRUE(GetConstraintValueAsBoolean( |
| 59 constraints, &blink::WebMediaTrackConstraintSet::echoCancellation, | 76 constraints, &blink::WebMediaTrackConstraintSet::echoCancellation, |
| 60 &value_true)); | 77 &value_true)); |
| 61 EXPECT_TRUE(value_true); | 78 EXPECT_TRUE(value_true); |
| 62 } | 79 } |
| 63 | 80 |
| 64 TEST_F(MediaStreamConstraintsUtilTest, DoubleConstraints) { | 81 TEST_F(MediaStreamConstraintsUtilTest, DoubleConstraints) { |
| 65 MockConstraintFactory constraint_factory; | 82 MockConstraintFactory constraint_factory; |
| 66 const double test_value= 0.01f; | 83 const double test_value = 0.01f; |
| 67 | 84 |
| 68 constraint_factory.basic().aspectRatio.setExact(test_value); | 85 constraint_factory.basic().aspectRatio.setExact(test_value); |
| 69 blink::WebMediaConstraints constraints = | 86 blink::WebMediaConstraints constraints = |
| 70 constraint_factory.CreateWebMediaConstraints(); | 87 constraint_factory.CreateWebMediaConstraints(); |
| 71 | 88 |
| 72 double value; | 89 double value; |
| 73 EXPECT_FALSE(GetConstraintValueAsDouble( | 90 EXPECT_FALSE(GetConstraintValueAsDouble( |
| 74 constraints, &blink::WebMediaTrackConstraintSet::frameRate, &value)); | 91 constraints, &blink::WebMediaTrackConstraintSet::frameRate, &value)); |
| 75 EXPECT_TRUE(GetConstraintValueAsDouble( | 92 EXPECT_TRUE(GetConstraintValueAsDouble( |
| 76 constraints, &blink::WebMediaTrackConstraintSet::aspectRatio, &value)); | 93 constraints, &blink::WebMediaTrackConstraintSet::aspectRatio, &value)); |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 92 | 109 |
| 93 // An exact value should also be reflected as min and max. | 110 // An exact value should also be reflected as min and max. |
| 94 EXPECT_TRUE(GetConstraintMaxAsInteger( | 111 EXPECT_TRUE(GetConstraintMaxAsInteger( |
| 95 constraints, &blink::WebMediaTrackConstraintSet::width, &value)); | 112 constraints, &blink::WebMediaTrackConstraintSet::width, &value)); |
| 96 EXPECT_EQ(test_value, value); | 113 EXPECT_EQ(test_value, value); |
| 97 EXPECT_TRUE(GetConstraintMinAsInteger( | 114 EXPECT_TRUE(GetConstraintMinAsInteger( |
| 98 constraints, &blink::WebMediaTrackConstraintSet::width, &value)); | 115 constraints, &blink::WebMediaTrackConstraintSet::width, &value)); |
| 99 EXPECT_EQ(test_value, value); | 116 EXPECT_EQ(test_value, value); |
| 100 } | 117 } |
| 101 | 118 |
| 119 TEST_F(MediaStreamConstraintsUtilTest, VideoTrackAdapterSettingsUnconstrained) { | |
| 120 ResolutionSet resolution_set; | |
| 121 DoubleRangeSet frame_rate_set; | |
| 122 | |
| 123 // No ideal values. | |
| 124 { | |
| 125 MockConstraintFactory constraint_factory; | |
| 126 auto result = SelectVideoTrackAdapterSettings( | |
| 127 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 128 frame_rate_set, SourceFormat()); | |
| 129 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 130 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 131 EXPECT_EQ(0.0, result.min_aspect_ratio); | |
| 132 EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); | |
| 133 EXPECT_EQ(0.0, result.max_frame_rate); | |
| 134 } | |
| 135 | |
| 136 // Ideal height. | |
| 137 { | |
| 138 int kIdealHeight = 400; | |
|
hbos_chromium
2017/03/28 12:52:53
If you use this naming convention make it const in
Guido Urdaneta
2017/03/28 18:35:43
Done. That's what I originally intended :)
| |
| 139 MockConstraintFactory constraint_factory; | |
| 140 constraint_factory.basic().height.setIdeal(kIdealHeight); | |
| 141 auto result = SelectVideoTrackAdapterSettings( | |
| 142 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 143 frame_rate_set, SourceFormat()); | |
| 144 EXPECT_EQ(kIdealHeight, result.max_height); | |
| 145 EXPECT_EQ(std::round(kIdealHeight * kSourceAspectRatio), result.max_width); | |
| 146 EXPECT_EQ(0.0, result.min_aspect_ratio); | |
| 147 EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); | |
| 148 EXPECT_EQ(0.0, result.max_frame_rate); | |
| 149 } | |
| 150 | |
| 151 // Ideal width. | |
| 152 { | |
| 153 int kIdealWidth = 400; | |
| 154 MockConstraintFactory constraint_factory; | |
| 155 constraint_factory.basic().width.setIdeal(kIdealWidth); | |
| 156 auto result = SelectVideoTrackAdapterSettings( | |
| 157 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 158 frame_rate_set, SourceFormat()); | |
| 159 EXPECT_EQ(std::round(kIdealWidth / kSourceAspectRatio), result.max_height); | |
| 160 EXPECT_EQ(kIdealWidth, result.max_width); | |
| 161 EXPECT_EQ(0.0, result.min_aspect_ratio); | |
| 162 EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); | |
| 163 EXPECT_EQ(0.0, result.max_frame_rate); | |
| 164 } | |
| 165 | |
| 166 // Ideal aspect ratio. | |
| 167 { | |
| 168 double kIdealAspectRatio = 2.0; | |
| 169 MockConstraintFactory constraint_factory; | |
| 170 constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); | |
| 171 auto result = SelectVideoTrackAdapterSettings( | |
| 172 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 173 frame_rate_set, SourceFormat()); | |
| 174 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 175 EXPECT_EQ(std::round(kSourceHeight * kIdealAspectRatio), result.max_width); | |
| 176 EXPECT_EQ(0.0, result.min_aspect_ratio); | |
| 177 EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); | |
| 178 EXPECT_EQ(0.0, result.max_frame_rate); | |
| 179 } | |
| 180 | |
| 181 // Ideal frame rate. | |
| 182 { | |
| 183 double kIdealFrameRate = 33; | |
| 184 MockConstraintFactory constraint_factory; | |
| 185 constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); | |
| 186 auto result = SelectVideoTrackAdapterSettings( | |
| 187 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 188 frame_rate_set, SourceFormat()); | |
| 189 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 190 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 191 EXPECT_EQ(0.0, result.min_aspect_ratio); | |
| 192 EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); | |
| 193 EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); | |
| 194 } | |
| 195 | |
| 196 // All ideals supplied. | |
| 197 { | |
| 198 int kIdealHeight = 400; | |
| 199 int kIdealWidth = 600; | |
| 200 int kIdealAspectRatio = 2.0; | |
| 201 double kIdealFrameRate = 33; | |
| 202 MockConstraintFactory constraint_factory; | |
| 203 constraint_factory.basic().height.setIdeal(kIdealHeight); | |
| 204 constraint_factory.basic().width.setIdeal(kIdealWidth); | |
| 205 // Ideal aspect ratio is ignored if ideal width and height are supplied. | |
| 206 constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); | |
| 207 constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); | |
| 208 auto result = SelectVideoTrackAdapterSettings( | |
| 209 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 210 frame_rate_set, SourceFormat()); | |
| 211 EXPECT_EQ(kIdealHeight, result.max_height); | |
| 212 EXPECT_EQ(kIdealWidth, result.max_width); | |
| 213 EXPECT_EQ(0.0, result.min_aspect_ratio); | |
| 214 EXPECT_EQ(HUGE_VAL, result.max_aspect_ratio); | |
| 215 EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); | |
| 216 } | |
| 217 } | |
| 218 | |
| 219 TEST_F(MediaStreamConstraintsUtilTest, VideoTrackAdapterSettingsConstrained) { | |
| 220 const int kMinHeight = 500; | |
| 221 const int kMaxHeight = 1200; | |
| 222 const int kMinWidth = 1000; | |
| 223 const int kMaxWidth = 2000; | |
| 224 const double kMinAspectRatio = 1.0; | |
| 225 const double kMaxAspectRatio = 2.0; | |
| 226 const double kMinFrameRate = 20.0; | |
| 227 const double kMaxFrameRate = 44.0; | |
| 228 ResolutionSet resolution_set(kMinHeight, kMaxHeight, kMinWidth, kMaxWidth, | |
| 229 kMinAspectRatio, kMaxAspectRatio); | |
| 230 DoubleRangeSet frame_rate_set(kMinFrameRate, kMaxFrameRate); | |
| 231 | |
| 232 // No ideal values. | |
| 233 { | |
| 234 MockConstraintFactory constraint_factory; | |
| 235 auto result = SelectVideoTrackAdapterSettings( | |
| 236 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 237 frame_rate_set, SourceFormat()); | |
| 238 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 239 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 240 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 241 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 242 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 243 } | |
| 244 | |
| 245 // Ideal height < min. | |
|
hbos_chromium
2017/03/28 12:52:53
You could static_assert these type of things.
Guido Urdaneta
2017/03/28 18:35:43
Done.
| |
| 246 { | |
| 247 int kIdealHeight = 400; | |
| 248 MockConstraintFactory constraint_factory; | |
| 249 constraint_factory.basic().height.setIdeal(kIdealHeight); | |
| 250 auto result = SelectVideoTrackAdapterSettings( | |
| 251 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 252 frame_rate_set, SourceFormat()); | |
| 253 EXPECT_EQ(kMinHeight, result.max_height); | |
| 254 // kMinWidth > kMinHeight * kNativeAspectRatio | |
| 255 EXPECT_EQ(kMinWidth, result.max_width); | |
| 256 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 257 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 258 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 259 } | |
| 260 | |
| 261 // min < Ideal height < max. | |
| 262 { | |
| 263 int kIdealHeight = 1100; | |
| 264 MockConstraintFactory constraint_factory; | |
| 265 constraint_factory.basic().height.setIdeal(kIdealHeight); | |
| 266 auto result = SelectVideoTrackAdapterSettings( | |
| 267 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 268 frame_rate_set, SourceFormat()); | |
| 269 EXPECT_EQ(kIdealHeight, result.max_height); | |
| 270 EXPECT_EQ(std::round(kIdealHeight * kSourceAspectRatio), result.max_width); | |
| 271 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 272 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 273 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 274 } | |
| 275 | |
| 276 // Ideal height > max. | |
| 277 { | |
| 278 int kIdealHeight = 2000; | |
| 279 MockConstraintFactory constraint_factory; | |
| 280 constraint_factory.basic().height.setIdeal(kIdealHeight); | |
| 281 auto result = SelectVideoTrackAdapterSettings( | |
| 282 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 283 frame_rate_set, SourceFormat()); | |
| 284 EXPECT_EQ(kMaxHeight, result.max_height); | |
| 285 EXPECT_EQ(std::round(kMaxHeight * kSourceAspectRatio), result.max_width); | |
| 286 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 287 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 288 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 289 } | |
| 290 | |
| 291 // Ideal width < min. | |
| 292 { | |
| 293 int kIdealWidth = 800; | |
| 294 MockConstraintFactory constraint_factory; | |
| 295 constraint_factory.basic().width.setIdeal(kIdealWidth); | |
| 296 auto result = SelectVideoTrackAdapterSettings( | |
| 297 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 298 frame_rate_set, SourceFormat()); | |
| 299 EXPECT_EQ(std::round(kMinWidth / kSourceAspectRatio), result.max_height); | |
| 300 EXPECT_EQ(kMinWidth, result.max_width); | |
| 301 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 302 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 303 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 304 } | |
| 305 | |
| 306 // min < Ideal width < max. | |
| 307 { | |
| 308 int kIdealWidth = 1800; | |
| 309 MockConstraintFactory constraint_factory; | |
| 310 constraint_factory.basic().width.setIdeal(kIdealWidth); | |
| 311 auto result = SelectVideoTrackAdapterSettings( | |
| 312 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 313 frame_rate_set, SourceFormat()); | |
| 314 EXPECT_EQ(std::round(kIdealWidth / kSourceAspectRatio), result.max_height); | |
| 315 EXPECT_EQ(kIdealWidth, result.max_width); | |
| 316 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 317 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 318 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 319 } | |
| 320 | |
| 321 // Ideal width > max. | |
| 322 { | |
| 323 int kIdealWidth = 3000; | |
| 324 MockConstraintFactory constraint_factory; | |
| 325 constraint_factory.basic().width.setIdeal(kIdealWidth); | |
| 326 auto result = SelectVideoTrackAdapterSettings( | |
| 327 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 328 frame_rate_set, SourceFormat()); | |
| 329 // kMaxHeight < kMaxWidth / kNativeAspectRatio | |
| 330 EXPECT_EQ(kMaxHeight, result.max_height); | |
| 331 EXPECT_EQ(kMaxWidth, result.max_width); | |
| 332 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 333 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 334 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 335 } | |
| 336 | |
| 337 // Ideal aspect ratio < min. | |
| 338 { | |
| 339 double kIdealAspectRatio = 0.5; | |
| 340 MockConstraintFactory constraint_factory; | |
| 341 constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); | |
| 342 auto result = SelectVideoTrackAdapterSettings( | |
| 343 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 344 frame_rate_set, SourceFormat()); | |
| 345 // Desired point is (kNativeWidth/kMinAspectRatio, kNativeWidth), but it | |
| 346 // is outside the size constraints. Closest to that while maintaining the | |
| 347 // same aspect ratio is (kMaxHeight, kMaxHeight * kMinAspectRatio). | |
| 348 EXPECT_EQ(kMaxHeight, result.max_height); | |
| 349 EXPECT_EQ(std::round(kMaxHeight * kMinAspectRatio), result.max_width); | |
| 350 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 351 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 352 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 353 } | |
| 354 | |
| 355 // min < Ideal aspect ratio < max. | |
| 356 { | |
| 357 double kIdealAspectRatio = 1.25; | |
| 358 MockConstraintFactory constraint_factory; | |
| 359 constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); | |
| 360 auto result = SelectVideoTrackAdapterSettings( | |
| 361 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 362 frame_rate_set, SourceFormat()); | |
| 363 EXPECT_EQ(std::round(kSourceWidth / kIdealAspectRatio), result.max_height); | |
| 364 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 365 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 366 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 367 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 368 } | |
| 369 | |
| 370 // Ideal aspect ratio > max. | |
| 371 { | |
| 372 double kIdealAspectRatio = 3.0; | |
| 373 MockConstraintFactory constraint_factory; | |
| 374 constraint_factory.basic().aspectRatio.setIdeal(kIdealAspectRatio); | |
| 375 auto result = SelectVideoTrackAdapterSettings( | |
| 376 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 377 frame_rate_set, SourceFormat()); | |
| 378 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 379 EXPECT_EQ(std::round(kSourceHeight * kMaxAspectRatio), result.max_width); | |
| 380 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 381 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 382 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 383 } | |
| 384 | |
| 385 // Ideal frame rate < min. | |
| 386 { | |
| 387 double kIdealFrameRate = 3.0; | |
| 388 MockConstraintFactory constraint_factory; | |
| 389 constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); | |
| 390 auto result = SelectVideoTrackAdapterSettings( | |
| 391 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 392 frame_rate_set, SourceFormat()); | |
| 393 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 394 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 395 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 396 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 397 EXPECT_EQ(kMinFrameRate, result.max_frame_rate); | |
| 398 } | |
| 399 | |
| 400 // min < Ideal frame rate < max. | |
| 401 { | |
| 402 double kIdealFrameRate = 31.0; | |
| 403 MockConstraintFactory constraint_factory; | |
| 404 constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); | |
| 405 auto result = SelectVideoTrackAdapterSettings( | |
| 406 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 407 frame_rate_set, SourceFormat()); | |
| 408 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 409 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 410 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 411 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 412 EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); | |
| 413 } | |
| 414 | |
| 415 // Ideal frame rate > max. | |
| 416 { | |
| 417 double kIdealFrameRate = 1000.0; | |
| 418 MockConstraintFactory constraint_factory; | |
| 419 constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); | |
| 420 auto result = SelectVideoTrackAdapterSettings( | |
| 421 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 422 frame_rate_set, SourceFormat()); | |
| 423 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 424 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 425 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 426 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 427 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 428 } | |
| 429 | |
| 430 // Ideal values inside constraints. | |
| 431 { | |
| 432 int kIdealHeight = 900; | |
| 433 int kIdealWidth = 1600; | |
| 434 double kIdealFrameRate = 35.0; | |
| 435 MockConstraintFactory constraint_factory; | |
| 436 constraint_factory.basic().height.setIdeal(kIdealHeight); | |
| 437 constraint_factory.basic().width.setIdeal(kIdealWidth); | |
| 438 constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); | |
| 439 auto result = SelectVideoTrackAdapterSettings( | |
| 440 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 441 frame_rate_set, SourceFormat()); | |
| 442 EXPECT_EQ(kIdealHeight, result.max_height); | |
| 443 EXPECT_EQ(kIdealWidth, result.max_width); | |
| 444 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 445 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 446 EXPECT_EQ(kIdealFrameRate, result.max_frame_rate); | |
| 447 } | |
| 448 | |
| 449 // Ideal values outside constraints. | |
| 450 { | |
| 451 int kIdealHeight = 2900; | |
| 452 int kIdealWidth = 3600; | |
| 453 double kIdealFrameRate = 350.0; | |
| 454 MockConstraintFactory constraint_factory; | |
| 455 constraint_factory.basic().height.setIdeal(kIdealHeight); | |
| 456 constraint_factory.basic().width.setIdeal(kIdealWidth); | |
| 457 constraint_factory.basic().frameRate.setIdeal(kIdealFrameRate); | |
| 458 auto result = SelectVideoTrackAdapterSettings( | |
| 459 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 460 frame_rate_set, SourceFormat()); | |
| 461 EXPECT_EQ(kMaxHeight, result.max_height); | |
| 462 EXPECT_EQ(kMaxWidth, result.max_width); | |
| 463 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 464 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 465 EXPECT_EQ(kMaxFrameRate, result.max_frame_rate); | |
| 466 } | |
| 467 | |
| 468 // Source frame rate. | |
| 469 { | |
| 470 DoubleRangeSet frame_rate_set(kMinFrameRate, kSourceFrameRate); | |
| 471 MockConstraintFactory constraint_factory; | |
| 472 auto result = SelectVideoTrackAdapterSettings( | |
| 473 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 474 frame_rate_set, SourceFormat()); | |
| 475 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 476 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 477 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 478 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 479 // No frame-rate adjustment because the track will use the same frame rate | |
| 480 // as the source. | |
|
hbos_chromium
2017/03/28 12:52:53
In the larger context of sources and settings: ...
Guido Urdaneta
2017/03/28 18:35:43
0.0 is a special value that VideoTrackAdapter inte
hbos_chromium
2017/03/29 14:54:53
Acknowledged.
| |
| 481 EXPECT_EQ(0.0, result.max_frame_rate); | |
| 482 } | |
| 483 | |
| 484 // High frame rate. | |
| 485 { | |
| 486 const double kHighFrameRate = 400.0; // Greater than source. | |
| 487 DoubleRangeSet frame_rate_set(kMinFrameRate, kHighFrameRate); | |
| 488 MockConstraintFactory constraint_factory; | |
| 489 auto result = SelectVideoTrackAdapterSettings( | |
| 490 constraint_factory.CreateWebMediaConstraints().basic(), resolution_set, | |
| 491 frame_rate_set, SourceFormat()); | |
| 492 EXPECT_EQ(kSourceHeight, result.max_height); | |
| 493 EXPECT_EQ(kSourceWidth, result.max_width); | |
| 494 EXPECT_EQ(kMinAspectRatio, result.min_aspect_ratio); | |
| 495 EXPECT_EQ(kMaxAspectRatio, result.max_aspect_ratio); | |
| 496 // No frame-rate adjustment because the track will use a frame rate that is | |
| 497 // greater than the source's. | |
| 498 EXPECT_EQ(0.0, result.max_frame_rate); | |
| 499 } | |
| 500 } | |
| 501 | |
| 102 } // namespace content | 502 } // namespace content |
| OLD | NEW |