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

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

Issue 2790823002: Spec compliant video constraints for getUserMedia behind flag. (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "base/test/scoped_feature_list.h"
13 #include "content/child/child_process.h" 14 #include "content/child/child_process.h"
15 #include "content/public/common/content_features.h"
14 #include "content/renderer/media/media_stream_video_source.h" 16 #include "content/renderer/media/media_stream_video_source.h"
15 #include "content/renderer/media/media_stream_video_track.h" 17 #include "content/renderer/media/media_stream_video_track.h"
16 #include "content/renderer/media/mock_constraint_factory.h" 18 #include "content/renderer/media/mock_constraint_factory.h"
17 #include "content/renderer/media/mock_media_stream_video_sink.h" 19 #include "content/renderer/media/mock_media_stream_video_sink.h"
18 #include "content/renderer/media/mock_media_stream_video_source.h" 20 #include "content/renderer/media/mock_media_stream_video_source.h"
21 #include "content/renderer/media/video_track_adapter.h"
19 #include "media/base/limits.h" 22 #include "media/base/limits.h"
20 #include "media/base/video_frame.h" 23 #include "media/base/video_frame.h"
21 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
22 #include "third_party/WebKit/public/web/WebHeap.h" 25 #include "third_party/WebKit/public/web/WebHeap.h"
23 26
24 using ::testing::_; 27 using ::testing::_;
25 using ::testing::DoAll; 28 using ::testing::DoAll;
26 using ::testing::SaveArg; 29 using ::testing::SaveArg;
27 30
28 namespace content { 31 namespace content {
29 32
30 ACTION_P(RunClosure, closure) { 33 ACTION_P(RunClosure, closure) {
31 closure.Run(); 34 closure.Run();
32 } 35 }
33 36
34 class MediaStreamVideoSourceTest : public ::testing::Test { 37 class MediaStreamVideoSourceTest : public ::testing::Test {
35 public: 38 public:
36 MediaStreamVideoSourceTest() 39 MediaStreamVideoSourceTest()
37 : child_process_(new ChildProcess()), 40 : child_process_(new ChildProcess()),
38 number_of_successful_constraints_applied_(0), 41 number_of_successful_constraints_applied_(0),
39 number_of_failed_constraints_applied_(0), 42 number_of_failed_constraints_applied_(0),
40 result_(MEDIA_DEVICE_OK), 43 result_(MEDIA_DEVICE_OK),
41 result_name_(""), 44 result_name_(""),
42 mock_source_(new MockMediaStreamVideoSource(true)) { 45 mock_source_(new MockMediaStreamVideoSource(true)),
46 mock_source2_(new MockMediaStreamVideoSource(
47 media::VideoCaptureFormat(gfx::Size(1280, 720),
48 1000.0,
49 media::PIXEL_FORMAT_I420),
50 false)) {
43 media::VideoCaptureFormats formats; 51 media::VideoCaptureFormats formats;
44 formats.push_back(media::VideoCaptureFormat( 52 formats.push_back(media::VideoCaptureFormat(
45 gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420)); 53 gfx::Size(1280, 720), 30, media::PIXEL_FORMAT_I420));
46 formats.push_back(media::VideoCaptureFormat( 54 formats.push_back(media::VideoCaptureFormat(
47 gfx::Size(640, 480), 30, media::PIXEL_FORMAT_I420)); 55 gfx::Size(640, 480), 30, media::PIXEL_FORMAT_I420));
48 formats.push_back(media::VideoCaptureFormat( 56 formats.push_back(media::VideoCaptureFormat(
49 gfx::Size(352, 288), 30, media::PIXEL_FORMAT_I420)); 57 gfx::Size(352, 288), 30, media::PIXEL_FORMAT_I420));
50 formats.push_back(media::VideoCaptureFormat( 58 formats.push_back(media::VideoCaptureFormat(
51 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420)); 59 gfx::Size(320, 240), 30, media::PIXEL_FORMAT_I420));
52 mock_source_->SetSupportedFormats(formats); 60 mock_source_->SetSupportedFormats(formats);
53 webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"), 61 webkit_source_.initialize(blink::WebString::fromASCII("dummy_source_id"),
54 blink::WebMediaStreamSource::TypeVideo, 62 blink::WebMediaStreamSource::TypeVideo,
55 blink::WebString::fromASCII("dummy_source_name"), 63 blink::WebString::fromASCII("dummy_source_name"),
56 false /* remote */); 64 false /* remote */);
57 webkit_source_.setExtraData(mock_source_); 65 webkit_source_.setExtraData(mock_source_);
66 webkit_source2_.initialize(blink::WebString::fromASCII("dummy_source_id"),
67 blink::WebMediaStreamSource::TypeVideo,
68 blink::WebString::fromASCII("dummy_source_name"),
69 false /* remote */);
70 webkit_source2_.setExtraData(mock_source2_);
58 } 71 }
59 72
60 void TearDown() override { 73 void TearDown() override {
61 webkit_source_.reset(); 74 webkit_source_.reset();
75 webkit_source2_.reset();
62 blink::WebHeap::collectAllGarbageForTesting(); 76 blink::WebHeap::collectAllGarbageForTesting();
63 } 77 }
64 78
65 protected: 79 protected:
66 // Create a track that's associated with |webkit_source_|. 80 // Create a track that's associated with |webkit_source_|.
67 blink::WebMediaStreamTrack CreateTrack( 81 blink::WebMediaStreamTrack CreateTrack(
68 const std::string& id, 82 const std::string& id,
69 const blink::WebMediaConstraints& constraints) { 83 const blink::WebMediaConstraints& constraints) {
70 bool enabled = true; 84 bool enabled = true;
71 return MediaStreamVideoTrack::CreateVideoTrack( 85 return MediaStreamVideoTrack::CreateVideoTrack(
72 mock_source_, constraints, 86 mock_source_, constraints,
73 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied, 87 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
74 base::Unretained(this)), 88 base::Unretained(this)),
75 enabled); 89 enabled);
76 } 90 }
77 91
92 blink::WebMediaStreamTrack CreateTrack(const std::string& id) {
93 bool enabled = true;
94 return MediaStreamVideoTrack::CreateVideoTrack(
95 mock_source2_,
96 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
97 base::Unretained(this)),
98 enabled);
99 }
100
101 blink::WebMediaStreamTrack CreateTrack(
102 const std::string& id,
103 const VideoTrackAdapterSettings& adapter_settings,
104 const base::Optional<bool>& noise_reduction,
105 bool is_screencast,
106 double min_frame_rate) {
107 bool enabled = true;
108 return MediaStreamVideoTrack::CreateVideoTrack(
109 mock_source2_, adapter_settings, noise_reduction, is_screencast,
110 min_frame_rate,
111 base::Bind(&MediaStreamVideoSourceTest::OnConstraintsApplied,
112 base::Unretained(this)),
113 enabled);
114 }
115
78 blink::WebMediaStreamTrack CreateTrackAndStartSource( 116 blink::WebMediaStreamTrack CreateTrackAndStartSource(
79 const blink::WebMediaConstraints& constraints, 117 const blink::WebMediaConstraints& constraints,
80 int expected_width, 118 int expected_width,
81 int expected_height, 119 int expected_height,
82 int expected_frame_rate) { 120 int expected_frame_rate) {
121 DCHECK(IsOldVideoConstraints());
83 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); 122 blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
84 123
85 mock_source_->CompleteGetSupportedFormats(); 124 mock_source_->CompleteGetSupportedFormats();
86 const media::VideoCaptureFormat& format = mock_source()->start_format(); 125 const media::VideoCaptureFormat& format = mock_source()->start_format();
87 EXPECT_EQ(expected_width, format.frame_size.width()); 126 EXPECT_EQ(expected_width, format.frame_size.width());
88 EXPECT_EQ(expected_height, format.frame_size.height()); 127 EXPECT_EQ(expected_height, format.frame_size.height());
89 EXPECT_EQ(expected_frame_rate, format.frame_rate); 128 EXPECT_EQ(expected_frame_rate, format.frame_rate);
90 129
91 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); 130 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
92 mock_source_->StartMockedSource(); 131 mock_source_->StartMockedSource();
93 // Once the source has started successfully we expect that the 132 // Once the source has started successfully we expect that the
94 // ConstraintsCallback in MediaStreamSource::AddTrack completes. 133 // ConstraintsCallback in MediaStreamSource::AddTrack completes.
95 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 134 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
96 return track; 135 return track;
97 } 136 }
98 137
138 blink::WebMediaStreamTrack CreateTrackAndStartSource(int width,
139 int height,
140 double frame_rate) {
141 DCHECK(!IsOldVideoConstraints());
142 blink::WebMediaStreamTrack track = CreateTrack(
143 "123",
144 VideoTrackAdapterSettings(width, height, 0.0, HUGE_VAL, frame_rate),
145 base::Optional<bool>(), false, 0.0);
146
147 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
148 mock_source2_->StartMockedSource();
149 // Once the source has started successfully we expect that the
150 // ConstraintsCallback in MediaStreamSource::AddTrack completes.
151 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
152 return track;
153 }
154
99 int NumberOfSuccessConstraintsCallbacks() const { 155 int NumberOfSuccessConstraintsCallbacks() const {
100 return number_of_successful_constraints_applied_; 156 return number_of_successful_constraints_applied_;
101 } 157 }
102 158
103 int NumberOfFailedConstraintsCallbacks() const { 159 int NumberOfFailedConstraintsCallbacks() const {
104 return number_of_failed_constraints_applied_; 160 return number_of_failed_constraints_applied_;
105 } 161 }
106 162
107 content::MediaStreamRequestResult error_type() const { return result_; } 163 content::MediaStreamRequestResult error_type() const { return result_; }
108 blink::WebString error_name() const { return result_name_; } 164 blink::WebString error_name() const { return result_name_; }
109 165
110 MockMediaStreamVideoSource* mock_source() { return mock_source_; } 166 MockMediaStreamVideoSource* mock_source() {
167 return IsOldVideoConstraints() ? mock_source_ : mock_source2_;
168 }
169
170 const blink::WebMediaStreamSource& webkit_source() {
171 return IsOldVideoConstraints() ? webkit_source_ : webkit_source2_;
172 }
111 173
112 // Test that the source crops/scales to the requested width and 174 // Test that the source crops/scales to the requested width and
113 // height even though the camera delivers a larger frame. 175 // height even though the camera delivers a larger frame.
114 void TestSourceCropFrame(int capture_width, 176 void TestSourceCropFrame(int capture_width,
115 int capture_height, 177 int capture_height,
116 const blink::WebMediaConstraints& constraints, 178 const blink::WebMediaConstraints& constraints,
117 int expected_width, 179 int expected_width,
118 int expected_height) { 180 int expected_height) {
181 DCHECK(IsOldVideoConstraints());
119 // Expect the source to start capture with the supported resolution. 182 // Expect the source to start capture with the supported resolution.
120 blink::WebMediaStreamTrack track = 183 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
121 CreateTrackAndStartSource(constraints, capture_width, capture_height, 184 constraints, capture_width, capture_height, 30);
122 30);
123 185
124 MockMediaStreamVideoSink sink; 186 MockMediaStreamVideoSink sink;
125 sink.ConnectToTrack(track); 187 sink.ConnectToTrack(track);
126 DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink); 188 DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink);
189 EXPECT_EQ(1, sink.number_of_frames());
190
191 // Expect the delivered frame to be cropped.
192 EXPECT_EQ(expected_height, sink.frame_size().height());
193 EXPECT_EQ(expected_width, sink.frame_size().width());
194 sink.DisconnectFromTrack();
195 }
196
197 void TestSourceCropFrame(int capture_width,
198 int capture_height,
199 int expected_width,
200 int expected_height) {
201 DCHECK(!IsOldVideoConstraints());
202 // Configure the track to crop to the expected resolution.
203 blink::WebMediaStreamTrack track =
204 CreateTrackAndStartSource(expected_width, expected_height, 30.0);
205
206 // Produce frames at the capture resolution.
207 MockMediaStreamVideoSink sink;
208 sink.ConnectToTrack(track);
209 DeliverVideoFrameAndWaitForRenderer(capture_width, capture_height, &sink);
127 EXPECT_EQ(1, sink.number_of_frames()); 210 EXPECT_EQ(1, sink.number_of_frames());
128 211
129 // Expect the delivered frame to be cropped. 212 // Expect the delivered frame to be cropped.
130 EXPECT_EQ(expected_height, sink.frame_size().height()); 213 EXPECT_EQ(expected_height, sink.frame_size().height());
131 EXPECT_EQ(expected_width, sink.frame_size().width()); 214 EXPECT_EQ(expected_width, sink.frame_size().width());
132 sink.DisconnectFromTrack(); 215 sink.DisconnectFromTrack();
133 } 216 }
134 217
135 void DeliverVideoFrameAndWaitForRenderer(int width, int height, 218 void DeliverVideoFrameAndWaitForRenderer(int width, int height,
136 MockMediaStreamVideoSink* sink) { 219 MockMediaStreamVideoSink* sink) {
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 EXPECT_EQ(expected_height1, sink1.frame_size().height()); 276 EXPECT_EQ(expected_height1, sink1.frame_size().height());
194 277
195 EXPECT_EQ(1, sink2.number_of_frames()); 278 EXPECT_EQ(1, sink2.number_of_frames());
196 EXPECT_EQ(expected_width2, sink2.frame_size().width()); 279 EXPECT_EQ(expected_width2, sink2.frame_size().width());
197 EXPECT_EQ(expected_height2, sink2.frame_size().height()); 280 EXPECT_EQ(expected_height2, sink2.frame_size().height());
198 281
199 sink1.DisconnectFromTrack(); 282 sink1.DisconnectFromTrack();
200 sink2.DisconnectFromTrack(); 283 sink2.DisconnectFromTrack();
201 } 284 }
202 285
286 void TestTwoTracksWithDifferentSettings(int capture_width,
287 int capture_height,
288 int expected_width1,
289 int expected_height1,
290 int expected_width2,
291 int expected_height2) {
292 blink::WebMediaStreamTrack track1 =
293 CreateTrackAndStartSource(expected_width1, expected_height1,
294 MediaStreamVideoSource::kDefaultFrameRate);
295
296 blink::WebMediaStreamTrack track2 =
297 CreateTrack("dummy",
298 VideoTrackAdapterSettings(
299 expected_width2, expected_height2, 0.0, HUGE_VAL,
300 MediaStreamVideoSource::kDefaultFrameRate),
301 base::Optional<bool>(), false, 0.0);
302
303 MockMediaStreamVideoSink sink1;
304 sink1.ConnectToTrack(track1);
305 EXPECT_EQ(0, sink1.number_of_frames());
306
307 MockMediaStreamVideoSink sink2;
308 sink2.ConnectToTrack(track2);
309 EXPECT_EQ(0, sink2.number_of_frames());
310
311 DeliverVideoFrameAndWaitForTwoRenderers(capture_width, capture_height,
312 &sink1, &sink2);
313
314 EXPECT_EQ(1, sink1.number_of_frames());
315 EXPECT_EQ(expected_width1, sink1.frame_size().width());
316 EXPECT_EQ(expected_height1, sink1.frame_size().height());
317
318 EXPECT_EQ(1, sink2.number_of_frames());
319 EXPECT_EQ(expected_width2, sink2.frame_size().width());
320 EXPECT_EQ(expected_height2, sink2.frame_size().height());
321
322 sink1.DisconnectFromTrack();
323 sink2.DisconnectFromTrack();
324 }
203 void SetSourceSupportedFormats(const media::VideoCaptureFormats& formats) { 325 void SetSourceSupportedFormats(const media::VideoCaptureFormats& formats) {
204 mock_source_->SetSupportedFormats(formats); 326 mock_source_->SetSupportedFormats(formats);
205 } 327 }
206 328
207 void ReleaseTrackAndSourceOnAddTrackCallback( 329 void ReleaseTrackAndSourceOnAddTrackCallback(
208 const blink::WebMediaStreamTrack& track_to_release) { 330 const blink::WebMediaStreamTrack& track_to_release) {
209 track_to_release_ = track_to_release; 331 track_to_release_ = track_to_release;
210 } 332 }
211 333
212 private: 334 private:
213 void OnConstraintsApplied(MediaStreamSource* source, 335 void OnConstraintsApplied(MediaStreamSource* source,
214 MediaStreamRequestResult result, 336 MediaStreamRequestResult result,
215 const blink::WebString& result_name) { 337 const blink::WebString& result_name) {
216 ASSERT_EQ(source, webkit_source_.getExtraData()); 338 ASSERT_EQ(source, webkit_source().getExtraData());
217 339
218 if (result == MEDIA_DEVICE_OK) { 340 if (result == MEDIA_DEVICE_OK) {
219 ++number_of_successful_constraints_applied_; 341 ++number_of_successful_constraints_applied_;
220 } else { 342 } else {
221 result_ = result; 343 result_ = result;
222 result_name_ = result_name; 344 result_name_ = result_name;
223 ++number_of_failed_constraints_applied_; 345 ++number_of_failed_constraints_applied_;
224 } 346 }
225 347
226 if (!track_to_release_.isNull()) { 348 if (!track_to_release_.isNull()) {
227 mock_source_ = NULL; 349 mock_source_ = nullptr;
228 webkit_source_.reset(); 350 webkit_source_.reset();
351 mock_source2_ = nullptr;
352 webkit_source2_.reset();
229 track_to_release_.reset(); 353 track_to_release_.reset();
230 } 354 }
231 } 355 }
232 const base::MessageLoopForUI message_loop_; 356 const base::MessageLoopForUI message_loop_;
233 const std::unique_ptr<ChildProcess> child_process_; 357 const std::unique_ptr<ChildProcess> child_process_;
234 blink::WebMediaStreamTrack track_to_release_; 358 blink::WebMediaStreamTrack track_to_release_;
235 int number_of_successful_constraints_applied_; 359 int number_of_successful_constraints_applied_;
236 int number_of_failed_constraints_applied_; 360 int number_of_failed_constraints_applied_;
237 content::MediaStreamRequestResult result_; 361 content::MediaStreamRequestResult result_;
238 blink::WebString result_name_; 362 blink::WebString result_name_;
239 blink::WebMediaStreamSource webkit_source_; 363 blink::WebMediaStreamSource webkit_source_;
240 // |mock_source_| is owned by |webkit_source_|. 364 // |mock_source_| is owned by |webkit_source_|.
241 MockMediaStreamVideoSource* mock_source_; 365 MockMediaStreamVideoSource* mock_source_;
366 blink::WebMediaStreamSource webkit_source2_;
367 // |mock_source2_| is owned by |webkit_source2_|.
368 MockMediaStreamVideoSource* mock_source2_;
242 }; 369 };
243 370
244 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { 371 // TODO(guidou): Remove this test. http://crbug.com/706408
372 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSourceOldConstraints) {
373 base::test::ScopedFeatureList scoped_feature_list;
374 scoped_feature_list.InitAndEnableFeature(
375 features::kMediaStreamOldVideoConstraints);
245 blink::WebMediaConstraints constraints; 376 blink::WebMediaConstraints constraints;
246 constraints.initialize(); 377 constraints.initialize();
247 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); 378 blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
248 mock_source()->CompleteGetSupportedFormats(); 379 mock_source()->CompleteGetSupportedFormats();
249 mock_source()->StartMockedSource(); 380 mock_source()->StartMockedSource();
250 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 381 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
251 } 382 }
252 383
253 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { 384 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) {
385 base::test::ScopedFeatureList scoped_feature_list;
386 scoped_feature_list.InitAndDisableFeature(
387 features::kMediaStreamOldVideoConstraints);
388 blink::WebMediaStreamTrack track = CreateTrack("123");
389 mock_source()->StartMockedSource();
390 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
391 }
392
393 // TODO(guidou): Remove this test. http://crbug.com/706408
394 TEST_F(MediaStreamVideoSourceTest,
395 AddTwoTracksBeforeSourceStartsOldConstraints) {
396 base::test::ScopedFeatureList scoped_feature_list;
397 scoped_feature_list.InitAndEnableFeature(
398 features::kMediaStreamOldVideoConstraints);
254 blink::WebMediaConstraints constraints; 399 blink::WebMediaConstraints constraints;
255 constraints.initialize(); 400 constraints.initialize();
256 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); 401 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
257 mock_source()->CompleteGetSupportedFormats(); 402 mock_source()->CompleteGetSupportedFormats();
258 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); 403 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints);
259 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); 404 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
260 mock_source()->StartMockedSource(); 405 mock_source()->StartMockedSource();
261 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); 406 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
262 } 407 }
263 408
264 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { 409 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) {
410 base::test::ScopedFeatureList scoped_feature_list;
411 scoped_feature_list.InitAndDisableFeature(
412 features::kMediaStreamOldVideoConstraints);
413 blink::WebMediaStreamTrack track1 = CreateTrack("123");
414 blink::WebMediaStreamTrack track2 = CreateTrack("123");
415 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
416 mock_source()->StartMockedSource();
417 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
418 }
419
420 // TODO(guidou): Remove this test. http://crbug.com/706408
421 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStartsOldConstraints) {
422 base::test::ScopedFeatureList scoped_feature_list;
423 scoped_feature_list.InitAndEnableFeature(
424 features::kMediaStreamOldVideoConstraints);
265 blink::WebMediaConstraints constraints; 425 blink::WebMediaConstraints constraints;
266 constraints.initialize(); 426 constraints.initialize();
267 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); 427 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
268 mock_source()->CompleteGetSupportedFormats(); 428 mock_source()->CompleteGetSupportedFormats();
269 mock_source()->StartMockedSource(); 429 mock_source()->StartMockedSource();
270 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 430 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
271 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); 431 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints);
272 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); 432 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
273 } 433 }
274 434
275 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { 435 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) {
436 base::test::ScopedFeatureList scoped_feature_list;
437 scoped_feature_list.InitAndDisableFeature(
438 features::kMediaStreamOldVideoConstraints);
439 blink::WebMediaStreamTrack track1 = CreateTrack("123");
440 mock_source()->StartMockedSource();
441 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
442 blink::WebMediaStreamTrack track2 = CreateTrack("123");
443 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
444 }
445
446 // TODO(guidou): Remove this test. http://crbug.com/706408
447 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSourceOldConstraints) {
448 base::test::ScopedFeatureList scoped_feature_list;
449 scoped_feature_list.InitAndEnableFeature(
450 features::kMediaStreamOldVideoConstraints);
276 blink::WebMediaConstraints constraints; 451 blink::WebMediaConstraints constraints;
277 constraints.initialize(); 452 constraints.initialize();
278 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); 453 blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
279 mock_source()->CompleteGetSupportedFormats(); 454 mock_source()->CompleteGetSupportedFormats();
280 mock_source()->FailToStartMockedSource(); 455 mock_source()->FailToStartMockedSource();
281 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 456 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
282 } 457 }
283 458
284 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) { 459 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) {
460 base::test::ScopedFeatureList scoped_feature_list;
461 scoped_feature_list.InitAndDisableFeature(
462 features::kMediaStreamOldVideoConstraints);
463 blink::WebMediaStreamTrack track = CreateTrack("123");
464 mock_source()->FailToStartMockedSource();
465 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
466 }
467
468 // Does not apply with spec-compliant constraints.
469 // TODO(guidou): Remove this test. http://crbug.com/706408
470 TEST_F(MediaStreamVideoSourceTest,
471 AddTwoTracksBeforeGetSupportedFormatsOldConstraints) {
472 base::test::ScopedFeatureList scoped_feature_list;
473 scoped_feature_list.InitAndEnableFeature(
474 features::kMediaStreamOldVideoConstraints);
285 blink::WebMediaConstraints constraints; 475 blink::WebMediaConstraints constraints;
286 constraints.initialize(); 476 constraints.initialize();
287 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); 477 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
288 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); 478 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints);
289 mock_source()->CompleteGetSupportedFormats(); 479 mock_source()->CompleteGetSupportedFormats();
290 mock_source()->StartMockedSource(); 480 mock_source()->StartMockedSource();
291 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); 481 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
292 } 482 }
293 483
294 // Test that the capture output is CIF if we set max constraints to CIF. 484 // Test that the capture output is CIF if we set max constraints to CIF.
295 // and the capture device support CIF. 485 // and the capture device support CIF.
296 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) { 486 // Does not apply with spec-compliant constraints.
487 // TODO(guidou): Remove this test. http://crbug.com/706408
488 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5FpsOldConstraints) {
489 base::test::ScopedFeatureList scoped_feature_list;
490 scoped_feature_list.InitAndEnableFeature(
491 features::kMediaStreamOldVideoConstraints);
297 MockConstraintFactory factory; 492 MockConstraintFactory factory;
298 factory.basic().width.setMax(352); 493 factory.basic().width.setMax(352);
299 factory.basic().height.setMax(288); 494 factory.basic().height.setMax(288);
300 factory.basic().frameRate.setMax(5.0); 495 factory.basic().frameRate.setMax(5.0);
301 496
302 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 352, 288, 5); 497 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 352, 288, 5);
303 } 498 }
304 499
305 // Test that the capture output is 720P if the camera support it and the 500 // Test that the capture output is 720P if the camera support it and the
306 // optional constraint is set to 720P. 501 // optional constraint is set to 720P.
307 TEST_F(MediaStreamVideoSourceTest, MandatoryMinVgaOptional720P) { 502 // Does not apply with spec-compliant constraints.
503 // TODO(guidou): Remove this test. http://crbug.com/706408
504 TEST_F(MediaStreamVideoSourceTest, MandatoryMinVgaOptional720POldConstraints) {
505 base::test::ScopedFeatureList scoped_feature_list;
506 scoped_feature_list.InitAndEnableFeature(
507 features::kMediaStreamOldVideoConstraints);
308 MockConstraintFactory factory; 508 MockConstraintFactory factory;
309 factory.basic().width.setMin(640); 509 factory.basic().width.setMin(640);
310 factory.basic().height.setMin(480); 510 factory.basic().height.setMin(480);
311 factory.AddAdvanced().width.setMin(1280); 511 factory.AddAdvanced().width.setMin(1280);
312 factory.AddAdvanced().aspectRatio.setMin(1280.0 / 720); 512 factory.AddAdvanced().aspectRatio.setMin(1280.0 / 720);
313 513
314 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); 514 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30);
315 } 515 }
316 516
317 // Test that the capture output is 720P if the camera supports it and the 517 // Test that the capture output is 720P if the camera supports it and the
318 // mandatory constraint is exactly width 1280. 518 // mandatory constraint is exactly width 1280.
319 TEST_F(MediaStreamVideoSourceTest, MandatoryExact720P) { 519 // Does not apply with spec-compliant constraints.
520 // TODO(guidou): Remove this test. http://crbug.com/706408
521 TEST_F(MediaStreamVideoSourceTest, MandatoryExact720POldConstraints) {
522 base::test::ScopedFeatureList scoped_feature_list;
523 scoped_feature_list.InitAndEnableFeature(
524 features::kMediaStreamOldVideoConstraints);
320 MockConstraintFactory factory; 525 MockConstraintFactory factory;
321 factory.basic().width.setExact(1280); 526 factory.basic().width.setExact(1280);
322 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); 527 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30);
323 } 528 }
324 529
325 // Test that the capture output have aspect ratio 4:3 if a mandatory constraint 530 // Test that the capture output have aspect ratio 4:3 if a mandatory constraint
326 // require it even if an optional constraint request a higher resolution 531 // require it even if an optional constraint request a higher resolution
327 // that don't have this aspect ratio. 532 // that don't have this aspect ratio.
328 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) { 533 // TODO(guidou): Remove this test. http://crbug.com/706408
534 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3OldConstraints) {
535 base::test::ScopedFeatureList scoped_feature_list;
536 scoped_feature_list.InitAndEnableFeature(
537 features::kMediaStreamOldVideoConstraints);
329 MockConstraintFactory factory; 538 MockConstraintFactory factory;
330 factory.basic().width.setMin(640); 539 factory.basic().width.setMin(640);
331 factory.basic().height.setMin(480); 540 factory.basic().height.setMin(480);
332 factory.basic().aspectRatio.setMax(640.0 / 480); 541 factory.basic().aspectRatio.setMax(640.0 / 480);
333 factory.AddAdvanced().width.setMin(1280); 542 factory.AddAdvanced().width.setMin(1280);
334 543
335 TestSourceCropFrame(1280, 720, 544 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 960, 720);
336 factory.CreateWebMediaConstraints(), 960, 720); 545 }
546
547 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio4To3) {
548 base::test::ScopedFeatureList scoped_feature_list;
549 scoped_feature_list.InitAndDisableFeature(
550 features::kMediaStreamOldVideoConstraints);
551 TestSourceCropFrame(1280, 720, 960, 720);
337 } 552 }
338 553
339 // Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2. 554 // Test that AddTrack succeeds if the mandatory min aspect ratio it set to 2.
340 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2) { 555 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2OldConstraints) {
556 base::test::ScopedFeatureList scoped_feature_list;
557 scoped_feature_list.InitAndEnableFeature(
558 features::kMediaStreamOldVideoConstraints);
341 MockConstraintFactory factory; 559 MockConstraintFactory factory;
342 factory.basic().aspectRatio.setMin(2.0); 560 factory.basic().aspectRatio.setMin(2.0);
343 561
344 TestSourceCropFrame(MediaStreamVideoSource::kDefaultWidth, 562 TestSourceCropFrame(MediaStreamVideoSource::kDefaultWidth,
345 MediaStreamVideoSource::kDefaultHeight, 563 MediaStreamVideoSource::kDefaultHeight,
346 factory.CreateWebMediaConstraints(), 640, 320); 564 factory.CreateWebMediaConstraints(), 640, 320);
347 } 565 }
348 566
349 TEST_F(MediaStreamVideoSourceTest, MinAspectRatioLargerThanMaxAspectRatio) { 567 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatio2) {
568 base::test::ScopedFeatureList scoped_feature_list;
569 scoped_feature_list.InitAndDisableFeature(
570 features::kMediaStreamOldVideoConstraints);
571 TestSourceCropFrame(1280, 720, 960, 720);
572 }
573
574 // Does not apply with spec-compliant constraints.
575 // TODO(guidou): Remove this test. http://crbug.com/706408
576 TEST_F(MediaStreamVideoSourceTest,
577 MinAspectRatioLargerThanMaxAspectRatioOldConstraints) {
578 base::test::ScopedFeatureList scoped_feature_list;
579 scoped_feature_list.InitAndEnableFeature(
580 features::kMediaStreamOldVideoConstraints);
350 MockConstraintFactory factory; 581 MockConstraintFactory factory;
351 factory.basic().aspectRatio.setMin(2.0); 582 factory.basic().aspectRatio.setMin(2.0);
352 factory.basic().aspectRatio.setMax(1.0); 583 factory.basic().aspectRatio.setMax(1.0);
353 blink::WebMediaStreamTrack track = CreateTrack( 584 blink::WebMediaStreamTrack track =
354 "123", factory.CreateWebMediaConstraints()); 585 CreateTrack("123", factory.CreateWebMediaConstraints());
355 mock_source()->CompleteGetSupportedFormats(); 586 mock_source()->CompleteGetSupportedFormats();
356 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 587 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
357 } 588 }
358 589
359 TEST_F(MediaStreamVideoSourceTest, MinWidthLargerThanMaxWidth) { 590 // Does not apply with spec-compliant constraints.
591 // TODO(guidou): Remove this test. http://crbug.com/706408
592 TEST_F(MediaStreamVideoSourceTest, MinWidthLargerThanMaxWidthOldConstraints) {
593 base::test::ScopedFeatureList scoped_feature_list;
594 scoped_feature_list.InitAndEnableFeature(
595 features::kMediaStreamOldVideoConstraints);
360 MockConstraintFactory factory; 596 MockConstraintFactory factory;
361 factory.basic().width.setMin(640); 597 factory.basic().width.setMin(640);
362 factory.basic().width.setMax(320); 598 factory.basic().width.setMax(320);
363 blink::WebMediaStreamTrack track = CreateTrack( 599 blink::WebMediaStreamTrack track =
364 "123", factory.CreateWebMediaConstraints()); 600 CreateTrack("123", factory.CreateWebMediaConstraints());
365 mock_source()->CompleteGetSupportedFormats(); 601 mock_source()->CompleteGetSupportedFormats();
366 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 602 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
367 } 603 }
368 604
369 TEST_F(MediaStreamVideoSourceTest, MinHeightLargerThanMaxHeight) { 605 // Does not apply with spec-compliant constraints.
606 // TODO(guidou): Remove this test. http://crbug.com/706408
607 TEST_F(MediaStreamVideoSourceTest, MinHeightLargerThanMaxHeightOldConstraints) {
608 base::test::ScopedFeatureList scoped_feature_list;
609 scoped_feature_list.InitAndEnableFeature(
610 features::kMediaStreamOldVideoConstraints);
370 MockConstraintFactory factory; 611 MockConstraintFactory factory;
371 factory.basic().height.setMin(480); 612 factory.basic().height.setMin(480);
372 factory.basic().height.setMax(360); 613 factory.basic().height.setMax(360);
373 614
374 blink::WebMediaStreamTrack track = CreateTrack( 615 blink::WebMediaStreamTrack track =
375 "123", factory.CreateWebMediaConstraints()); 616 CreateTrack("123", factory.CreateWebMediaConstraints());
376 mock_source()->CompleteGetSupportedFormats(); 617 mock_source()->CompleteGetSupportedFormats();
377 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 618 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
378 } 619 }
379 620
380 TEST_F(MediaStreamVideoSourceTest, MinFrameRateLargerThanMaxFrameRate) { 621 // Does not apply with spec-compliant constraints.
622 // TODO(guidou): Remove this test. http://crbug.com/706408
623 TEST_F(MediaStreamVideoSourceTest,
624 MinFrameRateLargerThanMaxFrameRateOldConstraints) {
625 base::test::ScopedFeatureList scoped_feature_list;
626 scoped_feature_list.InitAndEnableFeature(
627 features::kMediaStreamOldVideoConstraints);
381 MockConstraintFactory factory; 628 MockConstraintFactory factory;
382 factory.basic().frameRate.setMin(25); 629 factory.basic().frameRate.setMin(25);
383 factory.basic().frameRate.setMax(15); 630 factory.basic().frameRate.setMax(15);
384 blink::WebMediaStreamTrack track = 631 blink::WebMediaStreamTrack track =
385 CreateTrack("123", factory.CreateWebMediaConstraints()); 632 CreateTrack("123", factory.CreateWebMediaConstraints());
386 mock_source()->CompleteGetSupportedFormats(); 633 mock_source()->CompleteGetSupportedFormats();
387 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 634 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
388 } 635 }
389 636
390 TEST_F(MediaStreamVideoSourceTest, ExactWidthNotSupported) { 637 // Does not apply with spec-compliant constraints.
638 // TODO(guidou): Remove this test. http://crbug.com/706408
639 TEST_F(MediaStreamVideoSourceTest, ExactWidthNotSupportedOldConstraints) {
640 base::test::ScopedFeatureList scoped_feature_list;
641 scoped_feature_list.InitAndEnableFeature(
642 features::kMediaStreamOldVideoConstraints);
391 MockConstraintFactory factory; 643 MockConstraintFactory factory;
392 factory.basic().width.setExact(12000); 644 factory.basic().width.setExact(12000);
393 blink::WebMediaStreamTrack track = 645 blink::WebMediaStreamTrack track =
394 CreateTrack("123", factory.CreateWebMediaConstraints()); 646 CreateTrack("123", factory.CreateWebMediaConstraints());
395 mock_source()->CompleteGetSupportedFormats(); 647 mock_source()->CompleteGetSupportedFormats();
396 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 648 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
397 } 649 }
398 650
399 TEST_F(MediaStreamVideoSourceTest, MinWidthNotSupported) { 651 // Does not apply with spec-compliant constraints.
652 // TODO(guidou): Remove this test. http://crbug.com/706408
653 TEST_F(MediaStreamVideoSourceTest, MinWidthNotSupportedOldConstraints) {
654 base::test::ScopedFeatureList scoped_feature_list;
655 scoped_feature_list.InitAndEnableFeature(
656 features::kMediaStreamOldVideoConstraints);
400 MockConstraintFactory factory; 657 MockConstraintFactory factory;
401 factory.basic().width.setMin(12000); 658 factory.basic().width.setMin(12000);
402 blink::WebMediaStreamTrack track = 659 blink::WebMediaStreamTrack track =
403 CreateTrack("123", factory.CreateWebMediaConstraints()); 660 CreateTrack("123", factory.CreateWebMediaConstraints());
404 mock_source()->CompleteGetSupportedFormats(); 661 mock_source()->CompleteGetSupportedFormats();
405 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 662 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
406 } 663 }
407 664
408 // Test that its safe to release the last reference of a blink track and the 665 // Test that its safe to release the last reference of a blink track and the
409 // source during the callback if adding a track succeeds. 666 // source during the callback if adding a track succeeds.
667 // TODO(guidou): Remove this test. http://crbug.com/706408
668 TEST_F(MediaStreamVideoSourceTest,
669 ReleaseTrackAndSourceOnSuccessCallBackOldConstraints) {
670 base::test::ScopedFeatureList scoped_feature_list;
671 scoped_feature_list.InitAndEnableFeature(
672 features::kMediaStreamOldVideoConstraints);
673 MockConstraintFactory factory;
674 blink::WebMediaStreamTrack track =
675 CreateTrack("123", factory.CreateWebMediaConstraints());
676 ReleaseTrackAndSourceOnAddTrackCallback(track);
677 mock_source()->CompleteGetSupportedFormats();
678 mock_source()->StartMockedSource();
679 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
680 }
681
410 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) { 682 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnSuccessCallBack) {
411 MockConstraintFactory factory; 683 base::test::ScopedFeatureList scoped_feature_list;
412 { 684 scoped_feature_list.InitAndDisableFeature(
413 blink::WebMediaStreamTrack track = 685 features::kMediaStreamOldVideoConstraints);
414 CreateTrack("123", factory.CreateWebMediaConstraints()); 686 blink::WebMediaStreamTrack track = CreateTrack("123");
415 ReleaseTrackAndSourceOnAddTrackCallback(track); 687 ReleaseTrackAndSourceOnAddTrackCallback(track);
416 }
417 mock_source()->CompleteGetSupportedFormats();
418 mock_source()->StartMockedSource(); 688 mock_source()->StartMockedSource();
419 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 689 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
420 } 690 }
421 691
422 // Test that its safe to release the last reference of a blink track and the 692 // Test that its safe to release the last reference of a blink track and the
423 // source during the callback if adding a track fails. 693 // source during the callback if adding a track fails.
424 TEST_F(MediaStreamVideoSourceTest, ReleaseTrackAndSourceOnFailureCallBack) { 694 // Does not apply with spec-compliant constraints.
695 // TODO(guidou): Remove this test. http://crbug.com/706408
696 TEST_F(MediaStreamVideoSourceTest,
697 ReleaseTrackAndSourceOnFailureCallBackOldConstraints) {
698 base::test::ScopedFeatureList scoped_feature_list;
699 scoped_feature_list.InitAndEnableFeature(
700 features::kMediaStreamOldVideoConstraints);
425 MockConstraintFactory factory; 701 MockConstraintFactory factory;
426 factory.basic().width.setMin(99999); 702 factory.basic().width.setMin(99999);
427 { 703 {
428 blink::WebMediaStreamTrack track = 704 blink::WebMediaStreamTrack track =
429 CreateTrack("123", factory.CreateWebMediaConstraints()); 705 CreateTrack("123", factory.CreateWebMediaConstraints());
430 ReleaseTrackAndSourceOnAddTrackCallback(track); 706 ReleaseTrackAndSourceOnAddTrackCallback(track);
431 } 707 }
432 mock_source()->CompleteGetSupportedFormats(); 708 mock_source()->CompleteGetSupportedFormats();
433 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 709 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
434 } 710 }
435 711
436 // Test that the source ignores an optional aspect ratio that is higher than 712 // Test that the source ignores an optional aspect ratio that is higher than
437 // supported. 713 // supported.
438 TEST_F(MediaStreamVideoSourceTest, OptionalAspectRatioTooHigh) { 714 // Does not apply with spec-compliant constraints.
715 // TODO(guidou): Remove this test. http://crbug.com/706408
716 TEST_F(MediaStreamVideoSourceTest, OptionalAspectRatioTooHighOldConstraints) {
717 base::test::ScopedFeatureList scoped_feature_list;
718 scoped_feature_list.InitAndEnableFeature(
719 features::kMediaStreamOldVideoConstraints);
439 MockConstraintFactory factory; 720 MockConstraintFactory factory;
440 factory.AddAdvanced().aspectRatio.setMin(2.0); 721 factory.AddAdvanced().aspectRatio.setMin(2.0);
441 blink::WebMediaStreamTrack track = CreateTrack( 722 blink::WebMediaStreamTrack track =
442 "123", factory.CreateWebMediaConstraints()); 723 CreateTrack("123", factory.CreateWebMediaConstraints());
443 mock_source()->CompleteGetSupportedFormats(); 724 mock_source()->CompleteGetSupportedFormats();
444 725
445 const media::VideoCaptureFormat& format = mock_source()->start_format(); 726 const media::VideoCaptureFormat& format = mock_source()->start_format();
446 const double aspect_ratio = static_cast<double>(format.frame_size.width()) / 727 const double aspect_ratio = static_cast<double>(format.frame_size.width()) /
447 format.frame_size.height(); 728 format.frame_size.height();
448 EXPECT_LT(aspect_ratio, 2); 729 EXPECT_LT(aspect_ratio, 2);
449 } 730 }
450 731
451 // Test that the source starts video with the default resolution if the 732 // Test that the source starts video with the default resolution if the
452 // that is the only supported. 733 // that is the only supported.
453 TEST_F(MediaStreamVideoSourceTest, DefaultCapability) { 734 // Does not apply with spec-compliant constraints.
735 // TODO(guidou): Remove this test. http://crbug.com/706408
736 TEST_F(MediaStreamVideoSourceTest, DefaultCapabilityOldConstraints) {
737 base::test::ScopedFeatureList scoped_feature_list;
738 scoped_feature_list.InitAndEnableFeature(
739 features::kMediaStreamOldVideoConstraints);
454 media::VideoCaptureFormats formats; 740 media::VideoCaptureFormats formats;
455 formats.push_back(media::VideoCaptureFormat( 741 formats.push_back(media::VideoCaptureFormat(
456 gfx::Size(MediaStreamVideoSource::kDefaultWidth, 742 gfx::Size(MediaStreamVideoSource::kDefaultWidth,
457 MediaStreamVideoSource::kDefaultHeight), 743 MediaStreamVideoSource::kDefaultHeight),
458 MediaStreamVideoSource::kDefaultFrameRate, 744 MediaStreamVideoSource::kDefaultFrameRate, media::PIXEL_FORMAT_I420));
459 media::PIXEL_FORMAT_I420));
460 mock_source()->SetSupportedFormats(formats); 745 mock_source()->SetSupportedFormats(formats);
461 746
462 blink::WebMediaConstraints constraints; 747 blink::WebMediaConstraints constraints;
463 constraints.initialize(); 748 constraints.initialize();
464 CreateTrackAndStartSource(constraints, 749 CreateTrackAndStartSource(constraints, MediaStreamVideoSource::kDefaultWidth,
465 MediaStreamVideoSource::kDefaultWidth, 750 MediaStreamVideoSource::kDefaultHeight, 30);
466 MediaStreamVideoSource::kDefaultHeight,
467 30);
468 } 751 }
469 752
470 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { 753 // Does not apply with spec-compliant constraints.
754 // TODO(guidou): Remove this test. http://crbug.com/706408
755 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraintOldConstraints) {
756 base::test::ScopedFeatureList scoped_feature_list;
757 scoped_feature_list.InitAndEnableFeature(
758 features::kMediaStreamOldVideoConstraints);
471 MockConstraintFactory factory; 759 MockConstraintFactory factory;
472 // Use a constraint that is only known for audio. 760 // Use a constraint that is only known for audio.
473 factory.basic().echoCancellation.setExact(true); 761 factory.basic().echoCancellation.setExact(true);
474 blink::WebMediaStreamTrack track = CreateTrack( 762 blink::WebMediaStreamTrack track =
475 "123", factory.CreateWebMediaConstraints()); 763 CreateTrack("123", factory.CreateWebMediaConstraints());
476 mock_source()->CompleteGetSupportedFormats(); 764 mock_source()->CompleteGetSupportedFormats();
477 EXPECT_EQ(MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED, error_type()); 765 EXPECT_EQ(MEDIA_DEVICE_CONSTRAINT_NOT_SATISFIED, error_type());
478 EXPECT_EQ("echoCancellation", error_name()); 766 EXPECT_EQ("echoCancellation", error_name());
479 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 767 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
480 } 768 }
481 769
482 // Test that the source ignores an unknown optional constraint. 770 // Test that the source ignores an unknown optional constraint.
483 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { 771 // Does not apply with spec-compliant constraints.
772 // TODO(guidou): Remove this test. http://crbug.com/706408
773 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraintOldConstraints) {
774 base::test::ScopedFeatureList scoped_feature_list;
775 scoped_feature_list.InitAndEnableFeature(
776 features::kMediaStreamOldVideoConstraints);
484 MockConstraintFactory factory; 777 MockConstraintFactory factory;
485 factory.AddAdvanced().echoCancellation.setExact(true); 778 factory.AddAdvanced().echoCancellation.setExact(true);
486 779
487 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 780 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(),
488 MediaStreamVideoSource::kDefaultWidth, 781 MediaStreamVideoSource::kDefaultWidth,
489 MediaStreamVideoSource::kDefaultHeight, 782 MediaStreamVideoSource::kDefaultHeight, 30);
490 30);
491 } 783 }
492 784
493 // Tests that the source starts video with the max width and height set by 785 // Tests that the source starts video with the max width and height set by
494 // constraints for screencast. 786 // constraints for screencast.
495 TEST_F(MediaStreamVideoSourceTest, ScreencastResolutionWithConstraint) { 787 // Does not apply with spec-compliant constraints.
788 // TODO(guidou): Remove this test. http://crbug.com/706408
789 TEST_F(MediaStreamVideoSourceTest,
790 ScreencastResolutionWithConstraintOldConstraints) {
791 base::test::ScopedFeatureList scoped_feature_list;
792 scoped_feature_list.InitAndEnableFeature(
793 features::kMediaStreamOldVideoConstraints);
496 media::VideoCaptureFormats formats; 794 media::VideoCaptureFormats formats;
497 formats.push_back(media::VideoCaptureFormat( 795 formats.push_back(media::VideoCaptureFormat(gfx::Size(480, 270), 30,
498 gfx::Size(480, 270), 30, media::PIXEL_FORMAT_I420)); 796 media::PIXEL_FORMAT_I420));
499 mock_source()->SetSupportedFormats(formats); 797 mock_source()->SetSupportedFormats(formats);
500 MockConstraintFactory factory; 798 MockConstraintFactory factory;
501 factory.basic().width.setMax(480); 799 factory.basic().width.setMax(480);
502 factory.basic().height.setMax(270); 800 factory.basic().height.setMax(270);
503 801
504 blink::WebMediaStreamTrack track = CreateTrackAndStartSource( 802 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
505 factory.CreateWebMediaConstraints(), 480, 270, 30); 803 factory.CreateWebMediaConstraints(), 480, 270, 30);
506 EXPECT_EQ(480, mock_source()->max_requested_height()); 804 EXPECT_EQ(480, mock_source()->max_requested_height());
507 EXPECT_EQ(270, mock_source()->max_requested_width()); 805 EXPECT_EQ(270, mock_source()->max_requested_width());
508 } 806 }
509 807
510 // Test that optional constraints are applied in order. 808 // Test that optional constraints are applied in order.
511 TEST_F(MediaStreamVideoSourceTest, OptionalConstraints) { 809 // Does not apply with spec-compliant constraints.
810 // TODO(guidou): Remove this test. http://crbug.com/706408
811 TEST_F(MediaStreamVideoSourceTest, OptionalConstraintsOldConstraints) {
812 base::test::ScopedFeatureList scoped_feature_list;
813 scoped_feature_list.InitAndEnableFeature(
814 features::kMediaStreamOldVideoConstraints);
512 MockConstraintFactory factory; 815 MockConstraintFactory factory;
513 // Min width of 2056 pixels can not be fulfilled. 816 // Min width of 2056 pixels can not be fulfilled.
514 factory.AddAdvanced().width.setMin(2056); 817 factory.AddAdvanced().width.setMin(2056);
515 factory.AddAdvanced().width.setMin(641); 818 factory.AddAdvanced().width.setMin(641);
516 // Since min width is set to 641 pixels, max width 640 can not be fulfilled. 819 // Since min width is set to 641 pixels, max width 640 can not be fulfilled.
517 factory.AddAdvanced().width.setMax(640); 820 factory.AddAdvanced().width.setMax(640);
518 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30); 821 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1280, 720, 30);
519 } 822 }
520 823
521 // Test that the source crops to the requested max width and 824 // Test that the source crops to the requested max width and
522 // height even though the camera delivers a larger frame. 825 // height even though the camera delivers a larger frame.
523 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameOptional640360) { 826 // Redundant with spec-compliant constraints.
827 // TODO(guidou): Remove this test. http://crbug.com/706408
828 TEST_F(MediaStreamVideoSourceTest,
829 DeliverCroppedVideoFrameOptional640360OldConstraints) {
830 base::test::ScopedFeatureList scoped_feature_list;
831 scoped_feature_list.InitAndEnableFeature(
832 features::kMediaStreamOldVideoConstraints);
524 MockConstraintFactory factory; 833 MockConstraintFactory factory;
525 factory.AddAdvanced().width.setMax(640); 834 factory.AddAdvanced().width.setMax(640);
526 factory.AddAdvanced().height.setMax(360); 835 factory.AddAdvanced().height.setMax(360);
527 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); 836 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360);
528 } 837 }
529 838
530 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameMandatory640360) { 839 // Redundant with spec-compliant constraints.
840 // TODO(guidou): Remove this test. http://crbug.com/706408
841 TEST_F(MediaStreamVideoSourceTest,
842 DeliverCroppedVideoFrameMandatory640360OldConstraints) {
843 base::test::ScopedFeatureList scoped_feature_list;
844 scoped_feature_list.InitAndEnableFeature(
845 features::kMediaStreamOldVideoConstraints);
531 MockConstraintFactory factory; 846 MockConstraintFactory factory;
532 factory.basic().width.setMax(640); 847 factory.basic().width.setMax(640);
533 factory.basic().height.setMax(360); 848 factory.basic().height.setMax(360);
534 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360); 849 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 640, 360);
535 } 850 }
536 851
537 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrameMandatory732489) { 852 // Redundant with spec-compliant constraints.
853 // TODO(guidou): Remove this test. http://crbug.com/706408
854 TEST_F(MediaStreamVideoSourceTest,
855 DeliverCroppedVideoFrameMandatory732489OldConstraints) {
856 base::test::ScopedFeatureList scoped_feature_list;
857 scoped_feature_list.InitAndEnableFeature(
858 features::kMediaStreamOldVideoConstraints);
538 MockConstraintFactory factory; 859 MockConstraintFactory factory;
539 factory.basic().width.setMax(732); 860 factory.basic().width.setMax(732);
540 factory.basic().height.setMax(489); 861 factory.basic().height.setMax(489);
541 factory.basic().width.setMin(732); 862 factory.basic().width.setMin(732);
542 factory.basic().height.setMin(489); 863 factory.basic().height.setMin(489);
543 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 732, 489); 864 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 732, 489);
544 } 865 }
545 866
546 // Test that the source crops to the requested max width and 867 // Test that the source crops to the requested max width and
547 // height even though the requested frame has odd size. 868 // height even though the requested frame has odd size.
548 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame637359) { 869 // Redundant with spec-compliant constraints.
870 // TODO(guidou): Remove this test. http://crbug.com/706408
871 TEST_F(MediaStreamVideoSourceTest,
872 DeliverCroppedVideoFrame637359OldConstraints) {
873 base::test::ScopedFeatureList scoped_feature_list;
874 scoped_feature_list.InitAndEnableFeature(
875 features::kMediaStreamOldVideoConstraints);
549 MockConstraintFactory factory; 876 MockConstraintFactory factory;
550 factory.AddAdvanced().width.setMax(637); 877 factory.AddAdvanced().width.setMax(637);
551 factory.AddAdvanced().height.setMax(359); 878 factory.AddAdvanced().height.setMax(359);
552 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 637, 359); 879 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 637, 359);
553 } 880 }
554 881
555 TEST_F(MediaStreamVideoSourceTest, DeliverCroppedVideoFrame320320) { 882 // Redundant with spec-compliant constraints.
883 // TODO(guidou): Remove this test. http://crbug.com/706408
884 TEST_F(MediaStreamVideoSourceTest,
885 DeliverCroppedVideoFrame320320OldConstraints) {
886 base::test::ScopedFeatureList scoped_feature_list;
887 scoped_feature_list.InitAndEnableFeature(
888 features::kMediaStreamOldVideoConstraints);
556 MockConstraintFactory factory; 889 MockConstraintFactory factory;
557 factory.basic().width.setMax(320); 890 factory.basic().width.setMax(320);
558 factory.basic().height.setMax(320); 891 factory.basic().height.setMax(320);
559 factory.basic().height.setMin(320); 892 factory.basic().height.setMin(320);
560 factory.basic().width.setMax(320); 893 factory.basic().width.setMax(320);
561 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 320, 320); 894 TestSourceCropFrame(640, 480, factory.CreateWebMediaConstraints(), 320, 320);
562 } 895 }
563 896
564 TEST_F(MediaStreamVideoSourceTest, DeliverSmallerSizeWhenTooLargeMax) { 897 // Redundant with spec-compliant constraints.
898 // TODO(guidou): Remove this test. http://crbug.com/706408
899 TEST_F(MediaStreamVideoSourceTest,
900 DeliverSmallerSizeWhenTooLargeMaxOldConstraints) {
901 base::test::ScopedFeatureList scoped_feature_list;
902 scoped_feature_list.InitAndEnableFeature(
903 features::kMediaStreamOldVideoConstraints);
565 MockConstraintFactory factory; 904 MockConstraintFactory factory;
566 factory.AddAdvanced().width.setMax(1920); 905 factory.AddAdvanced().width.setMax(1920);
567 factory.AddAdvanced().height.setMax(1080); 906 factory.AddAdvanced().height.setMax(1080);
568 factory.AddAdvanced().width.setMin(1280); 907 factory.AddAdvanced().width.setMin(1280);
569 factory.AddAdvanced().height.setMin(720); 908 factory.AddAdvanced().height.setMin(720);
570 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 909 TestSourceCropFrame(1280, 720, factory.CreateWebMediaConstraints(), 1280,
571 1280, 720); 910 720);
572 } 911 }
573 912
574 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) { 913 // TODO(guidou): Remove this test. http://crbug.com/706408
914 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGAOldConstraints) {
915 base::test::ScopedFeatureList scoped_feature_list;
916 scoped_feature_list.InitAndEnableFeature(
917 features::kMediaStreamOldVideoConstraints);
575 MockConstraintFactory factory1; 918 MockConstraintFactory factory1;
576 factory1.AddAdvanced().width.setMax(640); 919 factory1.AddAdvanced().width.setMax(640);
577 factory1.AddAdvanced().height.setMax(480); 920 factory1.AddAdvanced().height.setMax(480);
578 921
579 MockConstraintFactory factory2; 922 MockConstraintFactory factory2;
580 factory2.AddAdvanced().height.setMax(360); 923 factory2.AddAdvanced().height.setMax(360);
581 924
582 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 925 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
583 factory2.CreateWebMediaConstraints(), 926 factory2.CreateWebMediaConstraints(),
584 640, 480, 927 640, 480, 640, 480, 640, 360);
585 640, 480,
586 640, 360);
587 } 928 }
588 929
589 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) { 930 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVGAAndWVGA) {
931 base::test::ScopedFeatureList scoped_feature_list;
932 scoped_feature_list.InitAndDisableFeature(
933 features::kMediaStreamOldVideoConstraints);
934 TestTwoTracksWithDifferentSettings(640, 480, 640, 480, 640, 360);
935 }
936
937 // Redundant with spec-compliant constraints
938 // TODO(guidou): Remove this test. http://crbug.com/706408
939 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGAOldConstraints) {
940 base::test::ScopedFeatureList scoped_feature_list;
941 scoped_feature_list.InitAndEnableFeature(
942 features::kMediaStreamOldVideoConstraints);
590 MockConstraintFactory factory1; 943 MockConstraintFactory factory1;
591 factory1.AddAdvanced().width.setMin(1280); 944 factory1.AddAdvanced().width.setMin(1280);
592 factory1.AddAdvanced().height.setMin(720); 945 factory1.AddAdvanced().height.setMin(720);
593 946
594 MockConstraintFactory factory2; 947 MockConstraintFactory factory2;
595 factory2.basic().width.setMax(640); 948 factory2.basic().width.setMax(640);
596 factory2.basic().height.setMax(360); 949 factory2.basic().height.setMax(360);
597 950
598 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 951 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
599 factory2.CreateWebMediaConstraints(), 952 factory2.CreateWebMediaConstraints(),
600 1280, 720, 953 1280, 720, 1280, 720, 640, 360);
601 1280, 720,
602 640, 360);
603 } 954 }
604 955
605 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndW700H700) { 956 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndWVGA) {
957 base::test::ScopedFeatureList scoped_feature_list;
958 scoped_feature_list.InitAndDisableFeature(
959 features::kMediaStreamOldVideoConstraints);
960 TestTwoTracksWithDifferentSettings(1280, 720, 1280, 720, 640, 360);
961 }
962
963 // Redundant with spec-compliant constraints
964 // TODO(guidou): Remove this test. http://crbug.com/706408
965 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndW700H700OldConstraints) {
966 base::test::ScopedFeatureList scoped_feature_list;
967 scoped_feature_list.InitAndEnableFeature(
968 features::kMediaStreamOldVideoConstraints);
606 MockConstraintFactory factory1; 969 MockConstraintFactory factory1;
607 factory1.AddAdvanced().width.setMin(1280); 970 factory1.AddAdvanced().width.setMin(1280);
608 factory1.AddAdvanced().height.setMin(720); 971 factory1.AddAdvanced().height.setMin(720);
609 972
610 MockConstraintFactory factory2; 973 MockConstraintFactory factory2;
611 factory2.basic().width.setMax(700); 974 factory2.basic().width.setMax(700);
612 factory2.basic().height.setMax(700); 975 factory2.basic().height.setMax(700);
613 976
614 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 977 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
615 factory2.CreateWebMediaConstraints(), 978 factory2.CreateWebMediaConstraints(),
616 1280, 720, 979 1280, 720, 1280, 720, 700, 700);
617 1280, 720,
618 700, 700);
619 } 980 }
620 981
621 TEST_F(MediaStreamVideoSourceTest, TwoTracksWith720AndMaxAspectRatio4To3) { 982 // Redundant with spec-compliant constraints
983 // TODO(guidou): Remove this test. http://crbug.com/706408
984 TEST_F(MediaStreamVideoSourceTest,
985 TwoTracksWith720AndMaxAspectRatio4To3OldConstraints) {
986 base::test::ScopedFeatureList scoped_feature_list;
987 scoped_feature_list.InitAndEnableFeature(
988 features::kMediaStreamOldVideoConstraints);
622 MockConstraintFactory factory1; 989 MockConstraintFactory factory1;
623 factory1.AddAdvanced().width.setMin(1280); 990 factory1.AddAdvanced().width.setMin(1280);
624 factory1.AddAdvanced().height.setMin(720); 991 factory1.AddAdvanced().height.setMin(720);
625 992
626 MockConstraintFactory factory2; 993 MockConstraintFactory factory2;
627 factory2.basic().aspectRatio.setMax(640.0 / 480); 994 factory2.basic().aspectRatio.setMax(640.0 / 480);
628 995
629 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 996 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
630 factory2.CreateWebMediaConstraints(), 997 factory2.CreateWebMediaConstraints(),
631 1280, 720, 998 1280, 720, 1280, 720, 960, 720);
632 1280, 720,
633 960, 720);
634 } 999 }
635 1000
636 TEST_F(MediaStreamVideoSourceTest, TwoTracksWithVgaAndMinAspectRatio) { 1001 // Redundant with spec-compliant constraints
1002 // TODO(guidou): Remove this test. http://crbug.com/706408
1003 TEST_F(MediaStreamVideoSourceTest,
1004 TwoTracksWithVgaAndMinAspectRatioOldConstraints) {
1005 base::test::ScopedFeatureList scoped_feature_list;
1006 scoped_feature_list.InitAndEnableFeature(
1007 features::kMediaStreamOldVideoConstraints);
637 MockConstraintFactory factory1; 1008 MockConstraintFactory factory1;
638 factory1.AddAdvanced().width.setMax(640); 1009 factory1.AddAdvanced().width.setMax(640);
639 factory1.AddAdvanced().height.setMax(480); 1010 factory1.AddAdvanced().height.setMax(480);
640 1011
641 MockConstraintFactory factory2; 1012 MockConstraintFactory factory2;
642 factory2.basic().aspectRatio.setMin(640.0 / 360); 1013 factory2.basic().aspectRatio.setMin(640.0 / 360);
643 1014
644 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(), 1015 TestTwoTracksWithDifferentConstraints(factory1.CreateWebMediaConstraints(),
645 factory2.CreateWebMediaConstraints(), 1016 factory2.CreateWebMediaConstraints(),
646 640, 480, 1017 640, 480, 640, 480, 640, 360);
647 640, 480,
648 640, 360);
649 } 1018 }
650 1019
1020 // Does not apply with spec-compliant constraints
1021 // TODO(guidou): Remove this test. http://crbug.com/706408
651 TEST_F(MediaStreamVideoSourceTest, 1022 TEST_F(MediaStreamVideoSourceTest,
652 TwoTracksWithSecondTrackFrameRateHigherThanFirst) { 1023 TwoTracksWithSecondTrackFrameRateHigherThanFirstOldConstraints) {
1024 base::test::ScopedFeatureList scoped_feature_list;
1025 scoped_feature_list.InitAndEnableFeature(
1026 features::kMediaStreamOldVideoConstraints);
653 MockConstraintFactory factory1; 1027 MockConstraintFactory factory1;
654 factory1.basic().frameRate.setMin(15); 1028 factory1.basic().frameRate.setMin(15);
655 factory1.basic().frameRate.setMax(15); 1029 factory1.basic().frameRate.setMax(15);
656 1030
657 blink::WebMediaStreamTrack track1 = 1031 blink::WebMediaStreamTrack track1 =
658 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(), 1032 CreateTrackAndStartSource(factory1.CreateWebMediaConstraints(),
659 MediaStreamVideoSource::kDefaultWidth, 1033 MediaStreamVideoSource::kDefaultWidth,
660 MediaStreamVideoSource::kDefaultHeight, 1034 MediaStreamVideoSource::kDefaultHeight, 15);
661 15);
662 1035
663 MockConstraintFactory factory2; 1036 MockConstraintFactory factory2;
664 factory2.basic().frameRate.setMin(30); 1037 factory2.basic().frameRate.setMin(30);
665 blink::WebMediaStreamTrack track2 = CreateTrack( 1038 blink::WebMediaStreamTrack track2 =
666 "123", factory2.CreateWebMediaConstraints()); 1039 CreateTrack("123", factory2.CreateWebMediaConstraints());
667 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 1040 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
668 } 1041 }
669 1042
670 // Test that a source can change the frame resolution on the fly and that 1043 // Test that a source can change the frame resolution on the fly and that
671 // tracks sinks get the new frame size unless constraints force the frame to be 1044 // tracks sinks get the new frame size unless constraints force the frame to be
672 // cropped. 1045 // cropped.
673 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) { 1046 // TODO(guidou): Remove this test. http://crbug.com/706408
1047 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSizeOldConstraints) {
1048 base::test::ScopedFeatureList scoped_feature_list;
1049 scoped_feature_list.InitAndEnableFeature(
1050 features::kMediaStreamOldVideoConstraints);
674 MockConstraintFactory factory; 1051 MockConstraintFactory factory;
675 factory.AddAdvanced().width.setMax(800); 1052 factory.AddAdvanced().width.setMax(800);
676 factory.AddAdvanced().height.setMax(700); 1053 factory.AddAdvanced().height.setMax(700);
677 1054
678 // Expect the source to start capture with the supported resolution. 1055 // Expect the source to start capture with the supported resolution.
679 blink::WebMediaStreamTrack track = 1056 // Disable frame-rate adjustment in spec-compliant mode to ensure no frames
680 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 1057 // are dropped.
681 640, 480, 30); 1058 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
1059 factory.CreateWebMediaConstraints(), 640, 480, 30);
682 1060
683 MockMediaStreamVideoSink sink; 1061 MockMediaStreamVideoSink sink;
684 sink.ConnectToTrack(track); 1062 sink.ConnectToTrack(track);
685 EXPECT_EQ(0, sink.number_of_frames()); 1063 EXPECT_EQ(0, sink.number_of_frames());
686 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); 1064 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
687 EXPECT_EQ(1, sink.number_of_frames()); 1065 EXPECT_EQ(1, sink.number_of_frames());
688 // Expect the delivered frame to be passed unchanged since its smaller than 1066 // Expect the delivered frame to be passed unchanged since its smaller than
689 // max requested. 1067 // max requested.
690 EXPECT_EQ(320, sink.frame_size().width()); 1068 EXPECT_EQ(320, sink.frame_size().width());
691 EXPECT_EQ(240, sink.frame_size().height()); 1069 EXPECT_EQ(240, sink.frame_size().height());
692 1070
693 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); 1071 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
694 EXPECT_EQ(2, sink.number_of_frames()); 1072 EXPECT_EQ(2, sink.number_of_frames());
695 // Expect the delivered frame to be passed unchanged since its smaller than 1073 // Expect the delivered frame to be passed unchanged since its smaller than
696 // max requested. 1074 // max requested.
697 EXPECT_EQ(640, sink.frame_size().width()); 1075 EXPECT_EQ(640, sink.frame_size().width());
698 EXPECT_EQ(480, sink.frame_size().height()); 1076 EXPECT_EQ(480, sink.frame_size().height());
699 1077
700 DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink); 1078 DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink);
701
702 EXPECT_EQ(3, sink.number_of_frames()); 1079 EXPECT_EQ(3, sink.number_of_frames());
703 // Expect a frame to be cropped since its larger than max requested. 1080 // Expect a frame to be cropped since its larger than max requested.
704 EXPECT_EQ(800, sink.frame_size().width()); 1081 EXPECT_EQ(800, sink.frame_size().width());
1082 EXPECT_EQ(700, sink.frame_size().height());
1083
1084 sink.DisconnectFromTrack();
1085 }
1086
1087 TEST_F(MediaStreamVideoSourceTest, SourceChangeFrameSize) {
1088 base::test::ScopedFeatureList scoped_feature_list;
1089 scoped_feature_list.InitAndDisableFeature(
1090 features::kMediaStreamOldVideoConstraints);
1091 MockConstraintFactory factory;
1092 factory.AddAdvanced().width.setMax(800);
1093 factory.AddAdvanced().height.setMax(700);
1094
1095 // Expect the source to start capture with the supported resolution.
1096 // Disable frame-rate adjustment in spec-compliant mode to ensure no frames
1097 // are dropped.
1098 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(800, 700, 0.0);
1099
1100 MockMediaStreamVideoSink sink;
1101 sink.ConnectToTrack(track);
1102 EXPECT_EQ(0, sink.number_of_frames());
1103 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
1104 EXPECT_EQ(1, sink.number_of_frames());
1105 // Expect the delivered frame to be passed unchanged since its smaller than
1106 // max requested.
1107 EXPECT_EQ(320, sink.frame_size().width());
1108 EXPECT_EQ(240, sink.frame_size().height());
1109
1110 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
1111 EXPECT_EQ(2, sink.number_of_frames());
1112 // Expect the delivered frame to be passed unchanged since its smaller than
1113 // max requested.
1114 EXPECT_EQ(640, sink.frame_size().width());
1115 EXPECT_EQ(480, sink.frame_size().height());
1116
1117 DeliverVideoFrameAndWaitForRenderer(1280, 720, &sink);
1118 EXPECT_EQ(3, sink.number_of_frames());
1119 // Expect a frame to be cropped since its larger than max requested.
1120 EXPECT_EQ(800, sink.frame_size().width());
705 EXPECT_EQ(700, sink.frame_size().height()); 1121 EXPECT_EQ(700, sink.frame_size().height());
706 1122
707 sink.DisconnectFromTrack(); 1123 sink.DisconnectFromTrack();
708 } 1124 }
709 1125
710 // Test that the constraint negotiation can handle 0.0 fps as frame rate. 1126 // Test that the constraint negotiation can handle 0.0 fps as frame rate.
711 TEST_F(MediaStreamVideoSourceTest, Use0FpsSupportedFormat) { 1127 // Does not apply to spec-compliant constraints.
1128 // TODO(guidou): Remove this test. http://crbug.com/706408
1129 TEST_F(MediaStreamVideoSourceTest, Use0FpsSupportedFormatOldConstraints) {
1130 base::test::ScopedFeatureList scoped_feature_list;
1131 scoped_feature_list.InitAndEnableFeature(
1132 features::kMediaStreamOldVideoConstraints);
712 media::VideoCaptureFormats formats; 1133 media::VideoCaptureFormats formats;
713 formats.push_back(media::VideoCaptureFormat( 1134 formats.push_back(media::VideoCaptureFormat(gfx::Size(640, 480), 0.0f,
714 gfx::Size(640, 480), 0.0f, media::PIXEL_FORMAT_I420)); 1135 media::PIXEL_FORMAT_I420));
715 formats.push_back(media::VideoCaptureFormat( 1136 formats.push_back(media::VideoCaptureFormat(gfx::Size(320, 240), 0.0f,
716 gfx::Size(320, 240), 0.0f, media::PIXEL_FORMAT_I420)); 1137 media::PIXEL_FORMAT_I420));
717 mock_source()->SetSupportedFormats(formats); 1138 mock_source()->SetSupportedFormats(formats);
718 1139
719 blink::WebMediaConstraints constraints; 1140 blink::WebMediaConstraints constraints;
720 constraints.initialize(); 1141 constraints.initialize();
721 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); 1142 blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
722 mock_source()->CompleteGetSupportedFormats(); 1143 mock_source()->CompleteGetSupportedFormats();
723 mock_source()->StartMockedSource(); 1144 mock_source()->StartMockedSource();
724 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 1145 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
725 1146
726 MockMediaStreamVideoSink sink; 1147 MockMediaStreamVideoSink sink;
727 sink.ConnectToTrack(track); 1148 sink.ConnectToTrack(track);
728 EXPECT_EQ(0, sink.number_of_frames()); 1149 EXPECT_EQ(0, sink.number_of_frames());
729 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink); 1150 DeliverVideoFrameAndWaitForRenderer(320, 240, &sink);
730 EXPECT_EQ(1, sink.number_of_frames()); 1151 EXPECT_EQ(1, sink.number_of_frames());
731 // Expect the delivered frame to be passed unchanged since its smaller than 1152 // Expect the delivered frame to be passed unchanged since its smaller than
732 // max requested. 1153 // max requested.
733 EXPECT_EQ(320, sink.frame_size().width()); 1154 EXPECT_EQ(320, sink.frame_size().width());
734 EXPECT_EQ(240, sink.frame_size().height()); 1155 EXPECT_EQ(240, sink.frame_size().height());
735 sink.DisconnectFromTrack(); 1156 sink.DisconnectFromTrack();
736 } 1157 }
737 1158
738 // Test that a source producing no frames change the source ReadyState to muted. 1159 // Test that a source producing no frames change the source ReadyState to muted.
739 // that in a reasonable time frame the muted state turns to false. 1160 // that in a reasonable time frame the muted state turns to false.
740 TEST_F(MediaStreamVideoSourceTest, MutedSource) { 1161 // TODO(guidou): Remove this test. http://crbug.com/706408
1162 TEST_F(MediaStreamVideoSourceTest, MutedSourceOldConstraints) {
1163 base::test::ScopedFeatureList scoped_feature_list;
1164 scoped_feature_list.InitAndEnableFeature(
1165 features::kMediaStreamOldVideoConstraints);
741 // Setup the source for support a frame rate of 999 fps in order to test 1166 // Setup the source for support a frame rate of 999 fps in order to test
742 // the muted event faster. This is since the frame monitoring uses 1167 // the muted event faster. This is since the frame monitoring uses
743 // PostDelayedTask that is dependent on the source frame rate. 1168 // PostDelayedTask that is dependent on the source frame rate.
744 // Note that media::limits::kMaxFramesPerSecond is 1000. 1169 // Note that media::limits::kMaxFramesPerSecond is 1000.
745 media::VideoCaptureFormats formats; 1170 media::VideoCaptureFormats formats;
746 formats.push_back(media::VideoCaptureFormat( 1171 formats.push_back(media::VideoCaptureFormat(
747 gfx::Size(640, 480), media::limits::kMaxFramesPerSecond - 1, 1172 gfx::Size(640, 480), media::limits::kMaxFramesPerSecond - 1,
748 media::PIXEL_FORMAT_I420)); 1173 media::PIXEL_FORMAT_I420));
749 SetSourceSupportedFormats(formats); 1174 SetSourceSupportedFormats(formats);
750 1175
751 MockConstraintFactory factory; 1176 MockConstraintFactory factory;
752 blink::WebMediaStreamTrack track = 1177 blink::WebMediaStreamTrack track =
753 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 640, 480, 1178 CreateTrackAndStartSource(factory.CreateWebMediaConstraints(), 640, 480,
754 media::limits::kMaxFramesPerSecond - 1); 1179 media::limits::kMaxFramesPerSecond - 1);
1180
755 MockMediaStreamVideoSink sink; 1181 MockMediaStreamVideoSink sink;
756 sink.ConnectToTrack(track); 1182 sink.ConnectToTrack(track);
757 EXPECT_EQ(track.source().getReadyState(), 1183 EXPECT_EQ(track.source().getReadyState(),
1184 blink::WebMediaStreamSource::ReadyStateLive);
1185
1186 base::RunLoop run_loop;
1187 base::Closure quit_closure = run_loop.QuitClosure();
1188 bool muted_state = false;
1189 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
1190 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
1191 run_loop.Run();
1192 EXPECT_EQ(muted_state, true);
1193
1194 EXPECT_EQ(track.source().getReadyState(),
1195 blink::WebMediaStreamSource::ReadyStateMuted);
1196
1197 base::RunLoop run_loop2;
1198 base::Closure quit_closure2 = run_loop2.QuitClosure();
1199 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
1200 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2)));
1201 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
1202 run_loop2.Run();
1203
1204 EXPECT_EQ(muted_state, false);
1205 EXPECT_EQ(track.source().getReadyState(),
1206 blink::WebMediaStreamSource::ReadyStateLive);
1207
1208 sink.DisconnectFromTrack();
1209 }
1210
1211 // Test that a source producing no frames change the source ReadyState to muted.
1212 // that in a reasonable time frame the muted state turns to false.
1213 TEST_F(MediaStreamVideoSourceTest, MutedSource) {
1214 base::test::ScopedFeatureList scoped_feature_list;
1215 scoped_feature_list.InitAndDisableFeature(
1216 features::kMediaStreamOldVideoConstraints);
1217 // Setup the source for support a frame rate of 999 fps in order to test
1218 // the muted event faster. This is since the frame monitoring uses
1219 // PostDelayedTask that is dependent on the source frame rate.
1220 // Note that media::limits::kMaxFramesPerSecond is 1000.
1221 blink::WebMediaStreamTrack track = CreateTrackAndStartSource(
1222 640, 480, media::limits::kMaxFramesPerSecond - 2);
1223 MockMediaStreamVideoSink sink;
1224 sink.ConnectToTrack(track);
1225 EXPECT_EQ(track.source().getReadyState(),
758 blink::WebMediaStreamSource::ReadyStateLive); 1226 blink::WebMediaStreamSource::ReadyStateLive);
759 1227
760 base::RunLoop run_loop; 1228 base::RunLoop run_loop;
761 base::Closure quit_closure = run_loop.QuitClosure(); 1229 base::Closure quit_closure = run_loop.QuitClosure();
762 bool muted_state = false; 1230 bool muted_state = false;
763 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) 1231 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
764 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure))); 1232 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure)));
765 run_loop.Run(); 1233 run_loop.Run();
766 EXPECT_EQ(muted_state, true); 1234 EXPECT_EQ(muted_state, true);
767 1235
768 EXPECT_EQ(track.source().getReadyState(), 1236 EXPECT_EQ(track.source().getReadyState(),
769 blink::WebMediaStreamSource::ReadyStateMuted); 1237 blink::WebMediaStreamSource::ReadyStateMuted);
770 1238
771 base::RunLoop run_loop2; 1239 base::RunLoop run_loop2;
772 base::Closure quit_closure2 = run_loop2.QuitClosure(); 1240 base::Closure quit_closure2 = run_loop2.QuitClosure();
773 EXPECT_CALL(*mock_source(), DoSetMutedState(_)) 1241 EXPECT_CALL(*mock_source(), DoSetMutedState(_))
774 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2))); 1242 .WillOnce(DoAll(SaveArg<0>(&muted_state), RunClosure(quit_closure2)));
775 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink); 1243 DeliverVideoFrameAndWaitForRenderer(640, 480, &sink);
776 run_loop2.Run(); 1244 run_loop2.Run();
777 1245
778 EXPECT_EQ(muted_state, false); 1246 EXPECT_EQ(muted_state, false);
779 EXPECT_EQ(track.source().getReadyState(), 1247 EXPECT_EQ(track.source().getReadyState(),
780 blink::WebMediaStreamSource::ReadyStateLive); 1248 blink::WebMediaStreamSource::ReadyStateLive);
781 1249
782 sink.DisconnectFromTrack(); 1250 sink.DisconnectFromTrack();
783 } 1251 }
784 1252
785 // Test that an optional constraint with an invalid aspect ratio is ignored. 1253 // Test that an optional constraint with an invalid aspect ratio is ignored.
786 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalAspectRatioIgnored) { 1254 // Does not apply with spec-compliant constraints.
1255 // TODO(guidou): Remove this test. http://crbug.com/706408
1256 TEST_F(MediaStreamVideoSourceTest,
1257 InvalidOptionalAspectRatioIgnoredOldConstraints) {
1258 base::test::ScopedFeatureList scoped_feature_list;
1259 scoped_feature_list.InitAndEnableFeature(
1260 features::kMediaStreamOldVideoConstraints);
787 MockConstraintFactory factory; 1261 MockConstraintFactory factory;
788 factory.AddAdvanced().aspectRatio.setMax(0.0); 1262 factory.AddAdvanced().aspectRatio.setMax(0.0);
789 blink::WebMediaStreamTrack track = 1263 blink::WebMediaStreamTrack track =
790 CreateTrack("123", factory.CreateWebMediaConstraints()); 1264 CreateTrack("123", factory.CreateWebMediaConstraints());
791 mock_source()->CompleteGetSupportedFormats(); 1265 mock_source()->CompleteGetSupportedFormats();
792 EXPECT_EQ(0, NumberOfFailedConstraintsCallbacks()); 1266 EXPECT_EQ(0, NumberOfFailedConstraintsCallbacks());
793 } 1267 }
794 1268
795 // Test that setting an invalid mandatory aspect ratio fails. 1269 // Test that setting an invalid mandatory aspect ratio fails.
796 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryAspectRatioFails) { 1270 // Does not apply with spec-compliant constraints.
1271 // TODO(guidou): Remove this test. http://crbug.com/706408
1272 TEST_F(MediaStreamVideoSourceTest,
1273 InvalidMandatoryAspectRatioFailsOldConstraints) {
1274 base::test::ScopedFeatureList scoped_feature_list;
1275 scoped_feature_list.InitAndEnableFeature(
1276 features::kMediaStreamOldVideoConstraints);
797 MockConstraintFactory factory; 1277 MockConstraintFactory factory;
798 factory.basic().aspectRatio.setMax(0.0); 1278 factory.basic().aspectRatio.setMax(0.0);
799 blink::WebMediaStreamTrack track = 1279 blink::WebMediaStreamTrack track =
800 CreateTrack("123", factory.CreateWebMediaConstraints()); 1280 CreateTrack("123", factory.CreateWebMediaConstraints());
801 mock_source()->CompleteGetSupportedFormats(); 1281 mock_source()->CompleteGetSupportedFormats();
802 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 1282 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
803 } 1283 }
804 1284
805 } // namespace content 1285 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_source.cc ('k') | content/renderer/media/media_stream_video_track.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698