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

Unified Diff: content/renderer/media/media_stream_constraints_util_video_device_unittest.cc

Issue 2719153002: Patch constraints algorithm for device video-capture sources. (Closed)
Patch Set: add extra tests for string and powerline frequency for improved coverage Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
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 beac59c2e82c2bbbd89160316b6deecc59a1ece0..1c8c7f911237cfad88dd2060a954b540a46a21d5 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
@@ -1248,12 +1248,12 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedExactResolution) {
constraint_factory_.Reset();
blink::WebMediaTrackConstraintSet& advanced1 =
constraint_factory_.AddAdvanced();
- advanced1.width.setExact(4000);
- advanced1.height.setExact(4000);
+ advanced1.width.setMin(4000);
+ advanced1.height.setMin(4000);
blink::WebMediaTrackConstraintSet& advanced2 =
constraint_factory_.AddAdvanced();
- advanced2.width.setExact(3000);
- advanced2.height.setExact(3000);
+ advanced2.width.setMin(3000);
+ advanced2.height.setMin(3000);
auto result = SelectSettings();
// No device supports the advanced constraint sets.
// Tie-breaker rule that applies is closeness to default settings.
hbos_chromium 2017/02/28 11:41:54 adv1 is superflous given adv2. What about...? adv
Guido Urdaneta 2017/02/28 16:44:00 Replaced with a test where each advanced set cause
@@ -1262,8 +1262,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedExactResolution) {
blink::WebMediaTrackConstraintSet& advanced3 =
constraint_factory_.AddAdvanced();
- advanced3.width.setExact(1920);
- advanced3.height.setExact(1080);
+ advanced3.width.setMin(1920);
+ advanced3.height.setMin(1080);
result = SelectSettings();
EXPECT_TRUE(result.HasValue());
// The high-res device natively supports the third advanced constraint set
@@ -1277,8 +1277,8 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedExactResolution) {
blink::WebMediaTrackConstraintSet& advanced4 =
constraint_factory_.AddAdvanced();
- advanced4.width.setExact(640);
- advanced4.height.setExact(480);
+ advanced4.width.setMin(640);
+ advanced4.height.setMin(480);
result = SelectSettings();
EXPECT_TRUE(result.HasValue());
// First tie-breaker rule that applies is support for advanced constraints
@@ -1341,18 +1341,18 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedNoiseReduction) {
constraint_factory_.Reset();
blink::WebMediaTrackConstraintSet& advanced1 =
constraint_factory_.AddAdvanced();
- advanced1.width.setExact(640);
- advanced1.height.setExact(480);
+ advanced1.width.setMin(640);
+ advanced1.height.setMin(480);
blink::WebMediaTrackConstraintSet& advanced2 =
constraint_factory_.AddAdvanced();
- advanced2.width.setExact(1920);
- advanced2.height.setExact(1080);
+ advanced2.width.setMin(1920);
+ advanced2.height.setMin(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_LE(1920, result.Width());
+ EXPECT_LE(1080, result.Height());
EXPECT_TRUE(result.noise_reduction && !*result.noise_reduction);
}
@@ -1403,6 +1403,184 @@ TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
}
}
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryExactResolution) {
+ 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);
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set must be ignored because it contradicts the first
+ // set. The low-res device is the one that best supports the requested
+ // resolution.
+ EXPECT_EQ(low_res_device_->device_id, result.device_id);
+ EXPECT_EQ(640, result.Width());
+ EXPECT_EQ(480, result.Height());
hbos_chromium 2017/02/28 11:41:54 These tests are all good, but we want if possible
Guido Urdaneta 2017/02/28 16:44:00 Added tests similar to the proposed ones with widt
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryResolutionRange) {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ advanced1.width.setMax(640);
+ advanced1.height.setMax(480);
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.width.setMin(1920);
+ advanced2.height.setMin(1080);
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set must be ignored because it contradicts the first
+ // set.
+ EXPECT_EQ(default_device_->device_id, result.device_id);
+ EXPECT_GE(640, result.Width());
+ EXPECT_GE(480, result.Height());
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryExactAspectRatio) {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ advanced1.aspectRatio.setExact(2300.0);
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.aspectRatio.setExact(3.0);
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set must be ignored because it contradicts the first
+ // set. Only the high-res device in the highest-resolution format supports the
+ // requested aspect ratio.
+ EXPECT_EQ(high_res_device_->device_id, result.device_id);
+ EXPECT_EQ(*high_res_highest_format_, result.Format());
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryAspectRatioRange) {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ advanced1.aspectRatio.setMin(2300.0);
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.aspectRatio.setMax(3.0);
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set must be ignored because it contradicts the first
+ // set. Only the high-res device in the highest-resolution format supports the
+ // requested aspect ratio.
+ EXPECT_EQ(high_res_device_->device_id, result.device_id);
+ EXPECT_EQ(*high_res_highest_format_, result.Format());
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryExactFrameRate) {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ advanced1.frameRate.setExact(40.0);
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.frameRate.setExact(45.0);
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set must be ignored because it contradicts the first
+ // set.
+ EXPECT_EQ(40.0, result.FrameRate());
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryFrameRateRange) {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ advanced1.frameRate.setMin(40.0);
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.frameRate.setMax(35.0);
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set must be ignored because it contradicts the first
+ // set.
+ EXPECT_LE(40.0, result.FrameRate());
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, AdvancedDeviceID) {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ blink::WebString id_vector1[] = {blink::WebString::fromASCII(kDeviceID1),
+ blink::WebString::fromASCII(kDeviceID2)};
+ advanced1.deviceId.setExact(
+ blink::WebVector<blink::WebString>(id_vector1, arraysize(id_vector1)));
+ blink::WebString id_vector2[] = {blink::WebString::fromASCII(kDeviceID2),
+ blink::WebString::fromASCII(kDeviceID3)};
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.deviceId.setExact(
+ blink::WebVector<blink::WebString>(id_vector2, arraysize(id_vector2)));
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // kDeviceID2 must be selected because it is the only one that satisfies both
+ // advanced sets.
+ EXPECT_EQ(std::string(kDeviceID2), result.device_id);
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryDeviceID) {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ blink::WebString id_vector1[] = {blink::WebString::fromASCII(kDeviceID1),
+ blink::WebString::fromASCII(kDeviceID2)};
+ advanced1.deviceId.setExact(
+ blink::WebVector<blink::WebString>(id_vector1, arraysize(id_vector1)));
+ blink::WebString id_vector2[] = {blink::WebString::fromASCII(kDeviceID3),
+ blink::WebString::fromASCII(kDeviceID4)};
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.deviceId.setExact(
+ blink::WebVector<blink::WebString>(id_vector2, arraysize(id_vector2)));
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set must be ignored because it contradicts the first
+ // set.
+ EXPECT_EQ(std::string(kDeviceID1), result.device_id);
+}
+
+TEST_F(MediaStreamConstraintsUtilVideoDeviceTest,
+ AdvancedContradictoryPowerLineFrequency) {
+ {
+ constraint_factory_.Reset();
+ blink::WebMediaTrackConstraintSet& advanced1 =
+ constraint_factory_.AddAdvanced();
+ advanced1.width.setMin(640);
+ advanced1.height.setMin(480);
+ advanced1.googPowerLineFrequency.setExact(50);
+ blink::WebMediaTrackConstraintSet& advanced2 =
+ constraint_factory_.AddAdvanced();
+ advanced2.width.setMin(1920);
+ advanced2.height.setMin(1080);
+ advanced2.googPowerLineFrequency.setExact(60);
+ auto result = SelectSettings();
+ EXPECT_TRUE(result.HasValue());
+ // The second advanced set cannot be satisfied because it contradicts the
+ // first set. The default device supports the first set and should be
+ // selected.
+ EXPECT_EQ(default_device_->device_id, result.device_id);
+ EXPECT_LE(640, result.Width());
+ EXPECT_LE(480, result.Height());
+ EXPECT_EQ(50, static_cast<int>(result.PowerLineFrequency()));
+ }
+}
+
// The "NoDevices" tests verify that the algorithm returns the expected result
// when there are no candidates to choose from.
TEST_F(MediaStreamConstraintsUtilVideoDeviceTest, NoDevicesNoConstraints) {

Powered by Google App Engine
This is Rietveld 408576698