OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "content/renderer/media/media_stream_video_source.h" | 10 #include "content/renderer/media/media_stream_video_source.h" |
| 11 #include "content/renderer/media/media_stream_video_track.h" |
11 #include "content/renderer/media/mock_media_stream_dependency_factory.h" | 12 #include "content/renderer/media/mock_media_stream_dependency_factory.h" |
12 #include "content/renderer/media/mock_media_stream_video_source.h" | 13 #include "content/renderer/media/mock_media_stream_video_source.h" |
13 #include "media/base/video_frame.h" | 14 #include "media/base/video_frame.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 | 16 |
16 namespace content { | 17 namespace content { |
17 | 18 |
18 class ConstraintsFactory { | 19 class ConstraintsFactory { |
19 public: | 20 public: |
20 void AddMandatory(const std::string& key, int value) { | 21 void AddMandatory(const std::string& key, int value) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 blink::WebMediaStreamSource::TypeVideo, | 75 blink::WebMediaStreamSource::TypeVideo, |
75 base::UTF8ToUTF16("dummy_source_name")); | 76 base::UTF8ToUTF16("dummy_source_name")); |
76 webkit_source_.setExtraData(mock_source_); | 77 webkit_source_.setExtraData(mock_source_); |
77 } | 78 } |
78 | 79 |
79 protected: | 80 protected: |
80 // Create a track that's associated with |webkit_source_|. | 81 // Create a track that's associated with |webkit_source_|. |
81 blink::WebMediaStreamTrack CreateTrack( | 82 blink::WebMediaStreamTrack CreateTrack( |
82 const std::string& id, | 83 const std::string& id, |
83 const blink::WebMediaConstraints& constraints) { | 84 const blink::WebMediaConstraints& constraints) { |
| 85 |
84 blink::WebMediaStreamTrack track; | 86 blink::WebMediaStreamTrack track; |
85 track.initialize(base::UTF8ToUTF16(id), webkit_source_); | 87 track.initialize(base::UTF8ToUTF16(id), webkit_source_); |
| 88 track.setExtraData(new MediaStreamVideoTrack(mock_source_, NULL)); |
86 | 89 |
87 MediaStreamVideoSource* source = | 90 mock_source_->AddTrack( |
88 static_cast<MediaStreamVideoSource*>(track.source().extraData()); | 91 track, |
89 | 92 constraints, |
90 source->AddTrack(track, | 93 base::Bind( |
91 constraints, | 94 &MediaStreamVideoSourceTest::OnConstraintsApplied, |
92 base::Bind( | 95 base::Unretained(this))); |
93 &MediaStreamVideoSourceTest::OnConstraintsApplied, | |
94 base::Unretained(this))); | |
95 return track; | 96 return track; |
96 } | 97 } |
97 | 98 |
98 blink::WebMediaStreamTrack CreateTrackAndStartSource( | 99 blink::WebMediaStreamTrack CreateTrackAndStartSource( |
99 const blink::WebMediaConstraints& constraints, | 100 const blink::WebMediaConstraints& constraints, |
100 int expected_width, | 101 int expected_width, |
101 int expected_height, | 102 int expected_height, |
102 int expected_frame_rate) { | 103 int expected_frame_rate) { |
103 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 104 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
104 | 105 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 int number_of_failed_constraints_applied_; | 145 int number_of_failed_constraints_applied_; |
145 MockMediaStreamDependencyFactory factory_; | 146 MockMediaStreamDependencyFactory factory_; |
146 blink::WebMediaStreamSource webkit_source_; | 147 blink::WebMediaStreamSource webkit_source_; |
147 // |mock_source_| is owned by |webkit_source_|. | 148 // |mock_source_| is owned by |webkit_source_|. |
148 MockMediaStreamVideoSource* mock_source_; | 149 MockMediaStreamVideoSource* mock_source_; |
149 }; | 150 }; |
150 | 151 |
151 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { | 152 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { |
152 blink::WebMediaConstraints constraints; | 153 blink::WebMediaConstraints constraints; |
153 constraints.initialize(); | 154 constraints.initialize(); |
154 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 155 CreateTrack("123", constraints); |
155 mock_source()->CompleteGetSupportedFormats(); | 156 mock_source()->CompleteGetSupportedFormats(); |
156 mock_source()->StartMockedSource(); | 157 mock_source()->StartMockedSource(); |
157 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 158 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
158 } | 159 } |
159 | 160 |
160 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { | 161 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { |
161 blink::WebMediaConstraints constraints; | 162 blink::WebMediaConstraints constraints; |
162 constraints.initialize(); | 163 constraints.initialize(); |
163 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 164 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); |
164 mock_source()->CompleteGetSupportedFormats(); | 165 mock_source()->CompleteGetSupportedFormats(); |
165 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 166 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); |
166 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); | 167 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); |
167 mock_source()->StartMockedSource(); | 168 mock_source()->StartMockedSource(); |
168 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 169 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
169 } | 170 } |
170 | 171 |
171 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { | 172 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { |
172 blink::WebMediaConstraints constraints; | 173 blink::WebMediaConstraints constraints; |
173 constraints.initialize(); | 174 constraints.initialize(); |
174 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 175 CreateTrack("123", constraints); |
175 mock_source()->CompleteGetSupportedFormats(); | 176 mock_source()->CompleteGetSupportedFormats(); |
176 mock_source()->StartMockedSource(); | 177 mock_source()->StartMockedSource(); |
177 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 178 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
178 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 179 CreateTrack("123", constraints); |
179 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 180 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
180 } | 181 } |
181 | 182 |
182 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { | 183 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { |
183 blink::WebMediaConstraints constraints; | 184 blink::WebMediaConstraints constraints; |
184 constraints.initialize(); | 185 constraints.initialize(); |
185 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 186 CreateTrack("123", constraints); |
186 mock_source()->CompleteGetSupportedFormats(); | 187 mock_source()->CompleteGetSupportedFormats(); |
187 mock_source()->FailToStartMockedSource(); | 188 mock_source()->FailToStartMockedSource(); |
188 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 189 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
189 } | 190 } |
190 | 191 |
191 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) { | 192 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) { |
192 blink::WebMediaConstraints constraints; | 193 blink::WebMediaConstraints constraints; |
193 constraints.initialize(); | 194 constraints.initialize(); |
194 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 195 CreateTrack("123", constraints); |
195 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 196 CreateTrack("123", constraints); |
196 mock_source()->CompleteGetSupportedFormats(); | 197 mock_source()->CompleteGetSupportedFormats(); |
197 mock_source()->StartMockedSource(); | 198 mock_source()->StartMockedSource(); |
198 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 199 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
199 } | 200 } |
200 | 201 |
201 // Test that the capture output is CIF if we set max constraints to CIF. | 202 // Test that the capture output is CIF if we set max constraints to CIF. |
202 // and the capture device support CIF. | 203 // and the capture device support CIF. |
203 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) { | 204 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) { |
204 ConstraintsFactory factory; | 205 ConstraintsFactory factory; |
205 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 352); | 206 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 352); |
(...skipping 23 matching lines...) Expand all Loading... |
229 ConstraintsFactory factory; | 230 ConstraintsFactory factory; |
230 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); | 231 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); |
231 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); | 232 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); |
232 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, | 233 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, |
233 640.0 / 480); | 234 640.0 / 480); |
234 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); | 235 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); |
235 | 236 |
236 CreateTrackAndStartSource(factory.CreateConstraints(), 640, 480, 30); | 237 CreateTrackAndStartSource(factory.CreateConstraints(), 640, 480, 30); |
237 } | 238 } |
238 | 239 |
239 // Test that ApplyConstraints fail if the mandatory aspect ratio | 240 // Test that AddTrack fail if the mandatory aspect ratio |
240 // is set higher than supported. | 241 // is set higher than supported. |
241 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) { | 242 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) { |
242 ConstraintsFactory factory; | 243 ConstraintsFactory factory; |
243 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2); | 244 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2); |
244 CreateTrack("123", factory.CreateConstraints()); | 245 CreateTrack("123", factory.CreateConstraints()); |
245 mock_source()->CompleteGetSupportedFormats(); | 246 mock_source()->CompleteGetSupportedFormats(); |
246 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 247 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
247 } | 248 } |
248 | 249 |
249 // Test that the source ignores an optional aspect ratio that is higher than | 250 // Test that the source ignores an optional aspect ratio that is higher than |
(...skipping 26 matching lines...) Expand all Loading... |
276 constraints.initialize(); | 277 constraints.initialize(); |
277 CreateTrackAndStartSource(constraints, | 278 CreateTrackAndStartSource(constraints, |
278 MediaStreamVideoSource::kDefaultWidth, | 279 MediaStreamVideoSource::kDefaultWidth, |
279 MediaStreamVideoSource::kDefaultHeight, | 280 MediaStreamVideoSource::kDefaultHeight, |
280 30); | 281 30); |
281 } | 282 } |
282 | 283 |
283 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { | 284 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { |
284 ConstraintsFactory factory; | 285 ConstraintsFactory factory; |
285 factory.AddMandatory("weird key", 640); | 286 factory.AddMandatory("weird key", 640); |
286 | |
287 CreateTrack("123", factory.CreateConstraints()); | 287 CreateTrack("123", factory.CreateConstraints()); |
288 mock_source()->CompleteGetSupportedFormats(); | 288 mock_source()->CompleteGetSupportedFormats(); |
289 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 289 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
290 } | 290 } |
291 | 291 |
292 // Test that the source ignores an unknown optional constraint. | 292 // Test that the source ignores an unknown optional constraint. |
293 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { | 293 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { |
294 ConstraintsFactory factory; | 294 ConstraintsFactory factory; |
295 factory.AddOptional("weird key", 640); | 295 factory.AddOptional("weird key", 640); |
296 | 296 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 mock_source()->DeliverVideoFrame(frame); | 347 mock_source()->DeliverVideoFrame(frame); |
348 EXPECT_EQ(1, adapter->GetFrameNum()); | 348 EXPECT_EQ(1, adapter->GetFrameNum()); |
349 EXPECT_EQ(MediaStreamVideoSource::kDefaultWidth, | 349 EXPECT_EQ(MediaStreamVideoSource::kDefaultWidth, |
350 adapter->GetLastFrameWidth()); | 350 adapter->GetLastFrameWidth()); |
351 EXPECT_EQ(MediaStreamVideoSource::kDefaultHeight, | 351 EXPECT_EQ(MediaStreamVideoSource::kDefaultHeight, |
352 adapter->GetLastFrameHeight()); | 352 adapter->GetLastFrameHeight()); |
353 } | 353 } |
354 | 354 |
355 | 355 |
356 } // namespace content | 356 } // namespace content |
OLD | NEW |