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 5247f396be50e83bfb11c6fb551560075d9df152..126f06751fc95ce1140cc431bd7e8d95ad6845f7 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 |
@@ -100,6 +100,11 @@ class MediaStreamConstraintsUtilVideoDeviceTest : public testing::Test { |
media::PowerLineFrequency::FREQUENCY_60HZ, |
}; |
+ capabilities_.noise_reduction_capabilities = { |
+ rtc::Optional<bool>(), rtc::Optional<bool>(true), |
+ rtc::Optional<bool>(false), |
+ }; |
+ |
default_device_ = capabilities_.device_capabilities[0].get(); |
low_res_device_ = capabilities_.device_capabilities[1].get(); |
high_res_device_ = capabilities_.device_capabilities[2].get(); |
@@ -138,6 +143,10 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, Unconstrained) { |
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); |
} |
// The "Overconstrained" tests verify that failure of any single required |
@@ -293,6 +302,34 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
result.failed_constraint_name); |
} |
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
+ OverconstrainedOnNoiseReduction) { |
+ // Simulate a system that does not support noise reduction. |
+ // Manually adding device capabilities because VideoDeviceCaptureCapabilities |
+ // is move only. |
+ VideoDeviceCaptureCapabilities capabilities; |
+ ::mojom::VideoInputDeviceCapabilitiesPtr device = |
+ ::mojom::VideoInputDeviceCapabilities::New(); |
+ device->device_id = kDeviceID1; |
+ device->facing_mode = ::mojom::FacingMode::NONE; |
+ device->formats = { |
+ media::VideoCaptureFormat(gfx::Size(200, 200), 40.0f, |
+ media::PIXEL_FORMAT_I420), |
+ }; |
+ capabilities.device_capabilities.push_back(std::move(device)); |
+ capabilities.power_line_capabilities = capabilities_.power_line_capabilities; |
+ capabilities.noise_reduction_capabilities = {rtc::Optional<bool>(false)}; |
+ |
+ constraint_factory_.Reset(); |
+ constraint_factory_.basic().googNoiseReduction.setExact(true); |
+ auto constraints = constraint_factory_.CreateWebMediaConstraints(); |
+ auto result = |
+ SelectVideoDeviceCaptureSourceSettings(capabilities, constraints); |
+ EXPECT_FALSE(result.HasValue()); |
+ EXPECT_EQ(constraint_factory_.basic().googNoiseReduction.name(), |
+ result.failed_constraint_name); |
+} |
+ |
// The "Mandatory" and "Ideal" tests check that various selection criteria work |
// for each individual constraint in the basic constraint set. |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryDeviceID) { |
@@ -385,6 +422,22 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryPowerLineFrequency) { |
} |
} |
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryNoiseReduction) { |
+ constraint_factory_.Reset(); |
+ const bool kNoiseReductionValues[] = {true, false}; |
+ for (auto noise_reduction : kNoiseReductionValues) { |
+ constraint_factory_.basic().googNoiseReduction.setExact(noise_reduction); |
+ auto result = SelectSettings(); |
+ EXPECT_TRUE(result.HasValue()); |
+ EXPECT_EQ(noise_reduction, result.noise_reduction); |
+ // 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()); |
+ } |
+} |
+ |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, MandatoryExactHeight) { |
constraint_factory_.Reset(); |
const int kHeight = MediaStreamVideoSource::kDefaultHeight; |
@@ -1288,6 +1341,52 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
} |
} |
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedNoiseReduction) { |
+ { |
+ constraint_factory_.Reset(); |
+ blink::WebMediaTrackConstraintSet& advanced1 = |
+ constraint_factory_.AddAdvanced(); |
+ advanced1.width.setExact(640); |
+ advanced1.height.setExact(480); |
+ blink::WebMediaTrackConstraintSet& advanced2 = |
+ constraint_factory_.AddAdvanced(); |
+ advanced2.width.setExact(1920); |
+ advanced2.height.setExact(1080); |
+ advanced2.googNoiseReduction.setExact(false); |
+ auto result = SelectSettings(); |
+ EXPECT_TRUE(result.HasValue()); |
+ EXPECT_EQ(high_res_device_->device_id, result.device_id); |
+ EXPECT_EQ(1920, result.Width()); |
+ EXPECT_EQ(1080, result.Height()); |
+ EXPECT_TRUE(result.noise_reduction && !*result.noise_reduction); |
+ } |
+} |
+ |
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, |
+ AdvancedContradictoryNoiseReduction) { |
+ { |
+ constraint_factory_.Reset(); |
+ blink::WebMediaTrackConstraintSet& advanced1 = |
+ constraint_factory_.AddAdvanced(); |
+ advanced1.width.setExact(640); |
+ advanced1.height.setExact(480); |
+ advanced1.googNoiseReduction.setExact(true); |
+ blink::WebMediaTrackConstraintSet& advanced2 = |
+ constraint_factory_.AddAdvanced(); |
+ advanced2.width.setExact(1920); |
+ advanced2.height.setExact(1080); |
+ advanced2.googNoiseReduction.setExact(false); |
+ auto result = SelectSettings(); |
+ EXPECT_TRUE(result.HasValue()); |
+ // The second advanced set cannot be satisfied because it contradicts the |
+ // first set. The low-res device should be selected in that case. |
hbos_chromium
2017/02/27 11:57:07
With Exacts a device will satisfy the first OR the
Guido Urdaneta
2017/02/27 17:14:21
Done.
|
+ EXPECT_EQ(low_res_device_->device_id, result.device_id); |
+ EXPECT_EQ(640, result.Width()); |
+ EXPECT_EQ(480, result.Height()); |
+ EXPECT_TRUE(result.noise_reduction && *result.noise_reduction); |
+ } |
+} |
+ |
// The "NoDevices" tests verify that the algorithm returns the expected result |
// when there are no candidates to choose from. |
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, NoDevicesNoConstraints) { |