Index: content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
diff --git a/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc b/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
index 4222ea37bfde4d3088dcc3077b5da4f2b1226286..f46b470a0d3385c6c2671f04f27c163b333ff9a9 100644 |
--- a/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
+++ b/content/renderer/media/media_stream_constraints_util_video_device_unittest.cc |
@@ -21,8 +21,40 @@ const char kDeviceID1[] = "fake_device_1"; |
const char kDeviceID2[] = "fake_device_2"; |
const char kDeviceID3[] = "fake_device_3"; |
const char kDeviceID4[] = "fake_device_4"; |
+ |
+void CheckTrackAdapterSettingsEqualsResolution( |
+ const VideoCaptureSettings& settings) { |
+ EXPECT_EQ(settings.Format().frame_size.width(), |
+ settings.track_adapter_settings().max_width); |
+ EXPECT_EQ(settings.Format().frame_size.height(), |
+ settings.track_adapter_settings().max_height); |
+ EXPECT_EQ(1.0 / settings.Format().frame_size.height(), |
+ settings.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(settings.Format().frame_size.width(), |
+ settings.track_adapter_settings().max_aspect_ratio); |
+} |
+ |
+void CheckTrackAdapterSettingsEqualsFrameRate( |
+ const VideoCaptureSettings& settings, |
+ double value = 0.0) { |
+ if (value >= settings.FrameRate()) |
+ value = 0.0; |
+ EXPECT_EQ(value, settings.track_adapter_settings().max_frame_rate); |
+} |
+ |
+void CheckTrackAdapterSettingsEqualsFormat( |
+ const VideoCaptureSettings& settings) { |
+ CheckTrackAdapterSettingsEqualsResolution(settings); |
+ CheckTrackAdapterSettingsEqualsFrameRate(settings); |
} |
+double AspectRatio(const media::VideoCaptureFormat& format) { |
+ return static_cast<double>(format.frame_size.width()) / |
+ static_cast<double>(format.frame_size.height()); |
+} |
+ |
+} // namespace |
+ |
class MediaStreamConstraintsUtilVideoDeviceTest : public testing::Test { |
public: |
void SetUp() override { |
@@ -101,8 +133,8 @@ class MediaStreamConstraintsUtilVideoDeviceTest : public testing::Test { |
}; |
capabilities_.noise_reduction_capabilities = { |
- rtc::Optional<bool>(), rtc::Optional<bool>(true), |
- rtc::Optional<bool>(false), |
+ base::Optional<bool>(), base::Optional<bool>(true), |
+ base::Optional<bool>(false), |
}; |
default_device_ = capabilities_.device_capabilities[0].get(); |
@@ -115,10 +147,10 @@ class MediaStreamConstraintsUtilVideoDeviceTest : public testing::Test { |
} |
protected: |
- VideoDeviceCaptureSourceSelectionResult SelectSettings() { |
+ VideoCaptureSettings SelectSettings() { |
blink::WebMediaConstraints constraints = |
constraint_factory_.CreateWebMediaConstraints(); |
- return SelectVideoDeviceCaptureSourceSettings(capabilities_, constraints); |
+ return SelectSettingsVideoDeviceCapture(capabilities_, constraints); |
} |
VideoDeviceCaptureCapabilities capabilities_; |
@@ -141,12 +173,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, Unconstrained) { |
EXPECT_TRUE(result.HasValue()); |
// Should select the default device with closest-to-default settings. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
- EXPECT_EQ(default_device_->facing_mode, result.facing_mode()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
// Should select default settings for other constraints. |
EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, |
result.PowerLineFrequency()); |
- EXPECT_EQ(rtc::Optional<bool>(), result.noise_reduction()); |
+ EXPECT_EQ(base::Optional<bool>(), result.noise_reduction()); |
} |
// The "Overconstrained" tests verify that failure of any single required |
@@ -318,13 +349,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
}; |
capabilities.device_capabilities.push_back(std::move(device)); |
capabilities.power_line_capabilities = capabilities_.power_line_capabilities; |
- capabilities.noise_reduction_capabilities = {rtc::Optional<bool>(false)}; |
+ capabilities.noise_reduction_capabilities = {base::Optional<bool>(false)}; |
constraint_factory_.Reset(); |
constraint_factory_.basic().googNoiseReduction.setExact(true); |
auto constraints = constraint_factory_.CreateWebMediaConstraints(); |
- auto result = |
- SelectVideoDeviceCaptureSourceSettings(capabilities, constraints); |
+ auto result = SelectSettingsVideoDeviceCapture(capabilities, constraints); |
EXPECT_FALSE(result.HasValue()); |
EXPECT_EQ(constraint_factory_.basic().googNoiseReduction.name(), |
result.failed_constraint_name()); |
@@ -342,6 +372,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryDeviceID) { |
EXPECT_EQ(*default_closest_format_, result.Format()); |
EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, |
result.PowerLineFrequency()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
constraint_factory_.basic().deviceId.setExact( |
blink::WebString::fromASCII(low_res_device_->device_id)); |
@@ -350,6 +381,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryDeviceID) { |
EXPECT_EQ(*low_res_closest_format_, result.Format()); |
EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, |
result.PowerLineFrequency()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
constraint_factory_.basic().deviceId.setExact( |
blink::WebString::fromASCII(high_res_device_->device_id)); |
@@ -358,6 +390,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryDeviceID) { |
EXPECT_EQ(*high_res_closest_format_, result.Format()); |
EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, |
result.PowerLineFrequency()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryFacingMode) { |
@@ -366,25 +399,27 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryFacingMode) { |
blink::WebString::fromASCII("environment")); |
auto result = SelectSettings(); |
EXPECT_TRUE(result.HasValue()); |
- EXPECT_EQ(::mojom::FacingMode::ENVIRONMENT, result.facing_mode()); |
// Only the low-res device supports environment facing mode. Should select |
// default settings for everything else. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
+ EXPECT_EQ(::mojom::FacingMode::ENVIRONMENT, low_res_device_->facing_mode); |
EXPECT_EQ(*low_res_closest_format_, result.Format()); |
EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, |
result.PowerLineFrequency()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
constraint_factory_.basic().facingMode.setExact( |
blink::WebString::fromASCII("user")); |
result = SelectSettings(); |
EXPECT_TRUE(result.HasValue()); |
- EXPECT_EQ(::mojom::FacingMode::USER, result.facing_mode()); |
// Only the high-res device supports user facing mode. Should select default |
// settings for everything else. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
+ EXPECT_EQ(::mojom::FacingMode::USER, high_res_device_->facing_mode); |
EXPECT_EQ(*high_res_closest_format_, result.Format()); |
EXPECT_EQ(media::PowerLineFrequency::FREQUENCY_DEFAULT, |
result.PowerLineFrequency()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryVideoKind) { |
@@ -395,12 +430,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryVideoKind) { |
EXPECT_TRUE(result.HasValue()); |
EXPECT_EQ(kDeviceID4, result.device_id()); |
EXPECT_EQ(media::PIXEL_FORMAT_Y16, result.Format().pixel_format); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
constraint_factory_.basic().videoKind.setExact( |
blink::WebString::fromASCII("color")); |
result = SelectSettings(); |
EXPECT_TRUE(result.HasValue()); |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryPowerLineFrequency) { |
@@ -417,8 +454,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryPowerLineFrequency) { |
// The default device and settings closest to the default should be |
// selected. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
- EXPECT_EQ(default_device_->facing_mode, result.facing_mode()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
} |
@@ -433,8 +470,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryNoiseReduction) { |
// The default device and settings closest to the default should be |
// selected. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
- EXPECT_EQ(default_device_->facing_mode, result.facing_mode()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
} |
@@ -449,6 +486,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactHeight) { |
// which is the low-res device. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(kHeight, result.Height()); |
+ EXPECT_EQ(kHeight, result.track_adapter_settings().max_height); |
const int kLargeHeight = 1500; |
constraint_factory_.basic().height.setExact(kLargeHeight); |
@@ -458,6 +496,9 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactHeight) { |
// height, even if not natively. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ EXPECT_EQ(kLargeHeight, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(kLargeHeight * AspectRatio(*high_res_highest_format_)), |
+ result.track_adapter_settings().max_width); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinHeight) { |
@@ -470,6 +511,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinHeight) { |
// algorithm should prefer the default device. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_LE(kHeight, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
const int kLargeHeight = 1500; |
constraint_factory_.basic().height.setMin(kLargeHeight); |
@@ -479,6 +527,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinHeight) { |
// height range. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ EXPECT_LE(kHeight, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kLargeHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxHeight) { |
@@ -492,6 +548,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxHeight) { |
// maximum by the lowest amount. In this case it is the low-res device. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(low_res_device_->formats[0], result.Format()); |
+ EXPECT_EQ(kLowHeight, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(kLowHeight * AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(static_cast<double>(result.Width()), |
+ result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / kLowHeight, result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryHeightRange) { |
@@ -511,6 +574,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryHeightRange) { |
// range. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kMinHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -528,6 +598,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryHeightRange) { |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(800, result.Width()); |
EXPECT_EQ(600, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kMinHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -545,6 +622,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryHeightRange) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kMinHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
} |
@@ -559,6 +643,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealHeight) { |
// height natively. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(kIdealHeight, result.Height()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
{ |
@@ -572,6 +657,15 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealHeight) { |
// 500 cropped to 480. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ // The track is cropped to the ideal height, maintaining the source aspect |
+ // ratio. |
+ EXPECT_EQ(kIdealHeight, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(kIdealHeight * AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -585,6 +679,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealHeight) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1920, result.Width()); |
EXPECT_EQ(1080, result.Height()); |
+ EXPECT_EQ(kIdealHeight, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(kIdealHeight * AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -596,6 +697,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealHeight) { |
// which is the high-res device at the highest resolution. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ EXPECT_EQ(kIdealHeight, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(kIdealHeight * AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
} |
@@ -610,6 +718,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactWidth) { |
// which is the low-res device. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(kWidth, result.Width()); |
+ EXPECT_EQ(std::round(kWidth / AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kWidth, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kWidth, result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(kWidth) / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
const int kLargeWidth = 2000; |
constraint_factory_.basic().width.setExact(kLargeWidth); |
@@ -620,6 +735,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactWidth) { |
// width, even if not natively. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ EXPECT_EQ(std::round(kLargeWidth / AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kLargeWidth, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kLargeWidth, result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(kLargeWidth) / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinWidth) { |
@@ -635,6 +757,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinWidth) { |
EXPECT_LE(kWidth, result.Width()); |
EXPECT_EQ(1000, result.Width()); |
EXPECT_EQ(1000, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(kWidth) / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
const int kLargeWidth = 2000; |
constraint_factory_.basic().width.setMin(kLargeWidth); |
@@ -645,6 +773,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinWidth) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_LE(kLargeWidth, result.Width()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(kLargeWidth) / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxWidth) { |
@@ -659,6 +793,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxWidth) { |
// lowest resolution. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(low_res_device_->formats[0], result.Format()); |
+ // The track is cropped to kLowWidth and keeps the source aspect ratio. |
+ EXPECT_EQ(std::round(kLowWidth / AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kLowWidth, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kLowWidth, result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryWidthRange) { |
@@ -678,6 +820,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryWidthRange) { |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(1000, result.Width()); |
EXPECT_EQ(1000, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(kMinWidth) / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -695,6 +843,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryWidthRange) { |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(800, result.Width()); |
EXPECT_EQ(600, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(kMinWidth) / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -712,6 +866,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryWidthRange) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1920, result.Width()); |
EXPECT_EQ(1080, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(kMinWidth) / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
} |
@@ -726,6 +886,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealWidth) { |
// width natively, which is the low-res device at 320x240. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(kIdealWidth, result.Width()); |
+ EXPECT_EQ(std::round(kIdealWidth / AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kIdealWidth, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kIdealWidth, result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -739,6 +906,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealWidth) { |
// 321 than 500 cropped to 321. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ // The track is cropped to kIdealWidth and keeps the source aspect ratio. |
+ EXPECT_EQ(std::round(kIdealWidth / AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kIdealWidth, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -749,6 +924,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealWidth) { |
// The algorithm must the select the only device that can satisfy the ideal. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ // The track is cropped to kIdealWidth and keeps the source aspect ratio. |
+ EXPECT_EQ(std::round(kIdealWidth / AspectRatio(result.Format())), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kIdealWidth, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -760,6 +943,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealWidth) { |
// to the ideal. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
} |
@@ -776,6 +960,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactFrameRate) { |
EXPECT_EQ(kFrameRate, result.FrameRate()); |
EXPECT_EQ(640, result.Width()); |
EXPECT_EQ(480, result.Height()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, kFrameRate); |
const double kLargeFrameRate = 50; |
constraint_factory_.basic().frameRate.setExact(kLargeFrameRate); |
@@ -788,6 +974,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactFrameRate) { |
EXPECT_EQ(60.0, result.FrameRate()); |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, kLargeFrameRate); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinFrameRate) { |
@@ -801,6 +989,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinFrameRate) { |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
// The format closest to the default satisfies the constraint. |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
const double kLargeFrameRate = 50; |
constraint_factory_.basic().frameRate.setMin(kLargeFrameRate); |
@@ -812,6 +1001,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinFrameRate) { |
EXPECT_LE(kLargeFrameRate, result.FrameRate()); |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxFrameRate) { |
@@ -828,6 +1018,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxFrameRate) { |
EXPECT_EQ(kLowFrameRate, result.FrameRate()); |
EXPECT_EQ(MediaStreamVideoSource::kDefaultHeight, result.Height()); |
EXPECT_EQ(MediaStreamVideoSource::kDefaultWidth, result.Width()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, kLowFrameRate); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryFrameRateRange) { |
@@ -846,6 +1038,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryFrameRateRange) { |
// format has a frame rate included in the requested range. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
{ |
@@ -862,6 +1055,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryFrameRateRange) { |
// range. The default resolution should be preferred as secondary criterion. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*low_res_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
{ |
@@ -880,6 +1074,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryFrameRateRange) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
} |
@@ -895,6 +1090,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealFrameRate) { |
// resolution should be selected as secondary criterion. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*low_res_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, kIdealFrameRate); |
} |
{ |
@@ -908,6 +1105,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealFrameRate) { |
// 31 adjusted to 30. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, kIdealFrameRate); |
} |
{ |
@@ -922,6 +1121,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealFrameRate) { |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
EXPECT_EQ(60, result.FrameRate()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, kIdealFrameRate); |
} |
{ |
@@ -937,6 +1138,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealFrameRate) { |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
EXPECT_EQ(60, result.FrameRate()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
} |
@@ -960,6 +1162,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactAspectRatio) { |
// aspect ratio. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ EXPECT_EQ(std::round(result.Width() / kAspectRatio), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
const int kMinWidth = 500; |
const int kMaxWidth = 1000; |
@@ -983,6 +1191,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactAspectRatio) { |
// settings (500x500) using cropping. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ EXPECT_EQ(std::round(result.Width() / kAspectRatio), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
const int kMinHeight = 480; |
constraint_factory_.basic().height.setMin(kMinHeight); |
@@ -1009,6 +1223,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactAspectRatio) { |
// low-res device. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*low_res_closest_format_, result.Format()); |
+ EXPECT_EQ(std::round(result.Width() / kAspectRatio), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinAspectRatio) { |
@@ -1028,6 +1248,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinAspectRatio) { |
// aspect-ratio range, which in this case is the default device. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ // Adjust the track resolution to use the minimum aspect ratio, which is |
+ // greater than the source's aspect ratio. |
+ EXPECT_EQ(std::round(result.Width() / kAspectRatio), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
const int kMinWidth = 500; |
const int kMaxWidth = 1000; |
@@ -1054,6 +1282,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMinAspectRatio) { |
// constraints than the default native resolution of the low-res device. |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*low_res_closest_format_, result.Format()); |
+ // The source's native aspect ratio equals the minimum aspect ratio. |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(max_aspect_ratio, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxAspectRatio) { |
@@ -1073,6 +1307,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxAspectRatio) { |
// aspect-ratio range, which in this case is the default device. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ // The track's aspect ratio is adjusted to the maximum, which is lower than |
+ // the source's native aspect ratio. |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(result.Height() * kAspectRatio), |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(min_aspect_ratio, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
const int kExactWidth = 360; |
const int kMinHeight = 360; |
@@ -1098,6 +1340,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryMaxAspectRatio) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
+ // The track's aspect ratio is adjusted to the maximum, which is lower than |
+ // the source's native aspect ratio. |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(result.Height() * kAspectRatio), |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(min_aspect_ratio, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(kAspectRatio, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryAspectRatioRange) { |
@@ -1125,15 +1375,24 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryAspectRatioRange) { |
// aspect-ratio range, which in this case is the default device. |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ // The source's aspect ratio matches the maximum aspect ratio. No adjustment |
+ // is required. |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kMinAspectRatio, |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(kMaxAspectRatio, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
const double kMinAspectRatio = 3.0; |
const double kMaxAspectRatio = 4.0; |
- const long kExactHeight = 600; |
+ const long kMinHeight = 600; |
constraint_factory_.Reset(); |
- constraint_factory_.basic().height.setMin(kExactHeight); |
+ constraint_factory_.basic().height.setMin(kMinHeight); |
constraint_factory_.basic().aspectRatio.setMin(kMinAspectRatio); |
constraint_factory_.basic().aspectRatio.setMax(kMaxAspectRatio); |
auto result = SelectSettings(); |
@@ -1153,6 +1412,15 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryAspectRatioRange) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1920, result.Width()); |
EXPECT_EQ(1080, result.Height()); |
+ // The track is cropped to support the minimum aspect ratio. |
+ EXPECT_EQ(std::round(result.Width() / kMinAspectRatio), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(kMinAspectRatio, |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kMinHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
} |
@@ -1176,6 +1444,15 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealAspectRatio) { |
EXPECT_GE(kIdealAspectRatio, min_aspect_ratio); |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ // The track is cropped to support the ideal aspect ratio. |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(std::round(result.Height() * kIdealAspectRatio), |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(min_aspect_ratio, |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(max_aspect_ratio, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -1184,11 +1461,22 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealAspectRatio) { |
auto result = SelectSettings(); |
EXPECT_TRUE(result.HasValue()); |
// The only device that supports the ideal aspect ratio is the high-res |
- // device. The least expensive way to support it with the 1920x1080 format |
- // cropped to 1500x1. |
+ // device. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1920, result.Width()); |
EXPECT_EQ(1080, result.Height()); |
+ // The most exact way to support the ideal aspect ratio would be to crop to |
+ // 1500x1. However, the algorithm tries to crop to 1920x1.28 and rounds. |
+ // In this case, the effect of rounding is noticeable because of the |
+ // resulting low value for height. For more typical resolution values, |
+ // the at-most 1-pixel error caused by rounding is not an issue. |
+ EXPECT_EQ(std::round(result.Width() / kIdealAspectRatio), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -1197,9 +1485,16 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealAspectRatio) { |
auto result = SelectSettings(); |
EXPECT_TRUE(result.HasValue()); |
// The only device that supports the ideal aspect ratio is the high-res |
- // device with its highest resolution, cropped to 2000x1. |
+ // device with its highest resolution. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ EXPECT_EQ(std::round(result.Width() / kIdealAspectRatio), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
@@ -1211,12 +1506,20 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealAspectRatio) { |
// device with its highest resolution, cropped to 2304x1. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ // In this case there is no rounding error. |
+ EXPECT_EQ(1, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
const double kIdealAspectRatio = 2.0; |
+ const int kExactHeight = 400; |
constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); |
- constraint_factory_.basic().height.setExact(400); |
+ constraint_factory_.basic().height.setExact(kExactHeight); |
auto result = SelectSettings(); |
EXPECT_TRUE(result.HasValue()); |
// The first device to support the ideal aspect ratio and the resolution |
@@ -1225,12 +1528,21 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealAspectRatio) { |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(800, result.Width()); |
EXPECT_EQ(600, result.Height()); |
+ EXPECT_EQ(kExactHeight, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kExactHeight * kIdealAspectRatio, |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(1.0 / kExactHeight, |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kExactHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
{ |
const double kIdealAspectRatio = 3.0; |
+ const int kExactHeight = 400; |
constraint_factory_.basic().aspectRatio.setIdeal(kIdealAspectRatio); |
- constraint_factory_.basic().height.setExact(400); |
+ constraint_factory_.basic().height.setExact(kExactHeight); |
auto result = SelectSettings(); |
EXPECT_TRUE(result.HasValue()); |
// The only device that supports the ideal aspect ratio and the resolution |
@@ -1239,6 +1551,14 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, IdealAspectRatio) { |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(1280, result.Width()); |
EXPECT_EQ(720, result.Height()); |
+ EXPECT_EQ(kExactHeight, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(kExactHeight * kIdealAspectRatio, |
+ result.track_adapter_settings().max_width); |
+ EXPECT_EQ(1.0 / kExactHeight, |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(static_cast<double>(result.Width()) / kExactHeight, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
} |
@@ -1257,6 +1577,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
auto result = SelectSettings(); |
EXPECT_EQ(default_device_->device_id, result.device_id()); |
EXPECT_EQ(*default_closest_format_, result.Format()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
blink::WebMediaTrackConstraintSet& advanced2 = |
constraint_factory_.AddAdvanced(); |
@@ -1270,6 +1591,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(640, result.Width()); |
EXPECT_EQ(480, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(320.0 / 480.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(640.0 / 240.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
blink::WebMediaTrackConstraintSet& advanced3 = |
constraint_factory_.AddAdvanced(); |
@@ -1281,6 +1607,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(640, result.Width()); |
EXPECT_EQ(480, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(320.0 / 480.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(640.0 / 240.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, 10.0); |
blink::WebMediaTrackConstraintSet& advanced4 = |
constraint_factory_.AddAdvanced(); |
@@ -1294,6 +1625,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(640, result.Width()); |
EXPECT_EQ(480, result.Height()); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(320.0 / 480.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(640.0 / 240.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, 10.0); |
constraint_factory_.basic().width.setIdeal(100); |
constraint_factory_.basic().height.setIdeal(100); |
@@ -1308,6 +1644,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(600, result.Width()); |
EXPECT_EQ(400, result.Height()); |
+ EXPECT_EQ(320, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(240, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(320.0 / 400.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(600.0 / 240.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, 10.0); |
constraint_factory_.basic().width.setIdeal(2000); |
constraint_factory_.basic().height.setIdeal(1500); |
@@ -1318,6 +1659,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(640, result.Width()); |
EXPECT_EQ(480, result.Height()); |
+ EXPECT_EQ(640, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(480, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(320.0 / 480.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(640.0 / 240.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, 10.0); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1344,6 +1690,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(1920, result.Width()); |
EXPECT_EQ(1080, result.Height()); |
EXPECT_EQ(60.0, result.FrameRate()); |
+ EXPECT_EQ(1920, result.track_adapter_settings().max_width); |
+ EXPECT_EQ(1080, result.track_adapter_settings().max_height); |
+ EXPECT_EQ(1920.0 / 1080.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(1920.0 / 1080.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result, 60.0); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedNoiseReduction) { |
@@ -1363,6 +1714,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedNoiseReduction) { |
EXPECT_LE(1920, result.Width()); |
EXPECT_LE(1080, result.Height()); |
EXPECT_TRUE(result.noise_reduction() && !*result.noise_reduction()); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(1920.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width() / 1080.0, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1388,6 +1746,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_LE(640, result.Width()); |
EXPECT_LE(480, result.Height()); |
EXPECT_TRUE(result.noise_reduction() && *result.noise_reduction()); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(640.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width() / 480.0, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
// Same test without noise reduction |
@@ -1409,6 +1774,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_LE(1080, result.Height()); |
// Should select default noise reduction setting. |
EXPECT_TRUE(!result.noise_reduction()); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(1920.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width() / 1080.0, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
} |
@@ -1431,6 +1803,11 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(640, result.Width()); |
EXPECT_EQ(480, result.Height()); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(640.0 / 480.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(640.0 / 480.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1455,6 +1832,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(200, result.Width()); |
EXPECT_EQ(200, result.Height()); |
EXPECT_EQ(40, result.FrameRate()); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(1.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1479,6 +1862,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(1000, result.Width()); |
EXPECT_EQ(1000, result.Height()); |
EXPECT_EQ(20, result.FrameRate()); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(800.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width() / 600.0, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1497,6 +1887,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
// requested aspect ratio. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ // The track is cropped to support the exact aspect ratio. |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(std::round(result.Height() / 2300.0), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(2300.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(2300.0, result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1515,6 +1912,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
// requested aspect ratio. |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(*high_res_highest_format_, result.Format()); |
+ // The track is cropped to support the min aspect ratio. |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(std::round(result.Height() / 2300.0), |
+ result.track_adapter_settings().max_height); |
+ EXPECT_EQ(2300.0, result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1531,6 +1935,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
// The second advanced set must be ignored because it contradicts the first |
// set. |
EXPECT_EQ(40.0, result.FrameRate()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1547,6 +1953,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
// The second advanced set must be ignored because it contradicts the first |
// set. |
EXPECT_LE(40.0, result.FrameRate()); |
+ CheckTrackAdapterSettingsEqualsResolution(result); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1570,6 +1978,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(low_res_device_->device_id, result.device_id()); |
EXPECT_EQ(30.0, result.FrameRate()); |
EXPECT_GE(1920, result.Width()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1594,6 +2003,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_EQ(high_res_device_->device_id, result.device_id()); |
EXPECT_EQ(60.0, result.FrameRate()); |
EXPECT_GE(1080, result.Height()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedDeviceID) { |
@@ -1615,6 +2025,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedDeviceID) { |
// kDeviceID2 must be selected because it is the only one that satisfies both |
// advanced sets. |
EXPECT_EQ(std::string(kDeviceID2), result.device_id()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1637,6 +2048,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
// The second advanced set must be ignored because it contradicts the first |
// set. |
EXPECT_EQ(std::string(kDeviceID1), result.device_id()); |
+ CheckTrackAdapterSettingsEqualsFormat(result); |
} |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
@@ -1662,6 +2074,13 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
EXPECT_LE(640, result.Width()); |
EXPECT_LE(480, result.Height()); |
EXPECT_EQ(50, static_cast<int>(result.PowerLineFrequency())); |
+ EXPECT_EQ(result.Width(), result.track_adapter_settings().max_width); |
+ EXPECT_EQ(result.Height(), result.track_adapter_settings().max_height); |
+ EXPECT_EQ(640.0 / result.Height(), |
+ result.track_adapter_settings().min_aspect_ratio); |
+ EXPECT_EQ(result.Width() / 480.0, |
+ result.track_adapter_settings().max_aspect_ratio); |
+ CheckTrackAdapterSettingsEqualsFrameRate(result); |
} |
} |
@@ -1670,7 +2089,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, NoDevicesNoConstraints) { |
constraint_factory_.Reset(); |
VideoDeviceCaptureCapabilities capabilities; |
- auto result = SelectVideoDeviceCaptureSourceSettings( |
+ auto result = SelectSettingsVideoDeviceCapture( |
capabilities, constraint_factory_.CreateWebMediaConstraints()); |
EXPECT_FALSE(result.HasValue()); |
EXPECT_TRUE(std::string(result.failed_constraint_name()).empty()); |
@@ -1680,7 +2099,7 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, NoDevicesWithConstraints) { |
constraint_factory_.Reset(); |
constraint_factory_.basic().height.setExact(100); |
VideoDeviceCaptureCapabilities capabilities; |
- auto result = SelectVideoDeviceCaptureSourceSettings( |
+ auto result = SelectSettingsVideoDeviceCapture( |
capabilities, constraint_factory_.CreateWebMediaConstraints()); |
EXPECT_FALSE(result.HasValue()); |
EXPECT_TRUE(std::string(result.failed_constraint_name()).empty()); |