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

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

Issue 155853002: Chrome MediaStream VideoTrack implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed a comment. Created 6 years, 9 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 | Annotate | Revision Log
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/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
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) {
84 blink::WebMediaStreamTrack track; 85 return MediaStreamVideoTrack::CreateVideoTrack(
85 track.initialize(base::UTF8ToUTF16(id), webkit_source_); 86 mock_source_, constraints,
86 87 base::Bind(
87 MediaStreamVideoSource* source = 88 &MediaStreamVideoSourceTest::OnConstraintsApplied,
88 static_cast<MediaStreamVideoSource*>(track.source().extraData()); 89 base::Unretained(this)),
89 90 true, NULL);
Ronghua Wu (Left Chromium) 2014/03/04 01:04:11 prefer to have meaningful variables for these
perkj_chrome 2014/03/04 10:44:51 Done.
90 source->AddTrack(track,
91 constraints,
92 base::Bind(
93 &MediaStreamVideoSourceTest::OnConstraintsApplied,
94 base::Unretained(this)));
95 return track;
96 } 91 }
97 92
98 blink::WebMediaStreamTrack CreateTrackAndStartSource( 93 blink::WebMediaStreamTrack CreateTrackAndStartSource(
99 const blink::WebMediaConstraints& constraints, 94 const blink::WebMediaConstraints& constraints,
100 int expected_width, 95 int expected_width,
101 int expected_height, 96 int expected_height,
102 int expected_frame_rate) { 97 int expected_frame_rate) {
103 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); 98 blink::WebMediaStreamTrack track = CreateTrack("123", constraints);
104 99
105 mock_source_->CompleteGetSupportedFormats(); 100 mock_source_->CompleteGetSupportedFormats();
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 int number_of_failed_constraints_applied_; 139 int number_of_failed_constraints_applied_;
145 MockMediaStreamDependencyFactory factory_; 140 MockMediaStreamDependencyFactory factory_;
146 blink::WebMediaStreamSource webkit_source_; 141 blink::WebMediaStreamSource webkit_source_;
147 // |mock_source_| is owned by |webkit_source_|. 142 // |mock_source_| is owned by |webkit_source_|.
148 MockMediaStreamVideoSource* mock_source_; 143 MockMediaStreamVideoSource* mock_source_;
149 }; 144 };
150 145
151 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { 146 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) {
152 blink::WebMediaConstraints constraints; 147 blink::WebMediaConstraints constraints;
153 constraints.initialize(); 148 constraints.initialize();
154 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); 149 CreateTrack("123", constraints);
155 mock_source()->CompleteGetSupportedFormats(); 150 mock_source()->CompleteGetSupportedFormats();
156 mock_source()->StartMockedSource(); 151 mock_source()->StartMockedSource();
157 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 152 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
158 } 153 }
159 154
160 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { 155 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) {
161 blink::WebMediaConstraints constraints; 156 blink::WebMediaConstraints constraints;
162 constraints.initialize(); 157 constraints.initialize();
163 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); 158 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints);
164 mock_source()->CompleteGetSupportedFormats(); 159 mock_source()->CompleteGetSupportedFormats();
165 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); 160 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints);
166 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); 161 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks());
167 mock_source()->StartMockedSource(); 162 mock_source()->StartMockedSource();
168 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); 163 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
169 } 164 }
170 165
171 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { 166 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) {
172 blink::WebMediaConstraints constraints; 167 blink::WebMediaConstraints constraints;
173 constraints.initialize(); 168 constraints.initialize();
174 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); 169 CreateTrack("123", constraints);
175 mock_source()->CompleteGetSupportedFormats(); 170 mock_source()->CompleteGetSupportedFormats();
176 mock_source()->StartMockedSource(); 171 mock_source()->StartMockedSource();
177 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); 172 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks());
178 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); 173 CreateTrack("123", constraints);
179 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); 174 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
180 } 175 }
181 176
182 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { 177 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) {
183 blink::WebMediaConstraints constraints; 178 blink::WebMediaConstraints constraints;
184 constraints.initialize(); 179 constraints.initialize();
185 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); 180 CreateTrack("123", constraints);
186 mock_source()->CompleteGetSupportedFormats(); 181 mock_source()->CompleteGetSupportedFormats();
187 mock_source()->FailToStartMockedSource(); 182 mock_source()->FailToStartMockedSource();
188 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 183 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
189 } 184 }
190 185
191 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) { 186 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) {
192 blink::WebMediaConstraints constraints; 187 blink::WebMediaConstraints constraints;
193 constraints.initialize(); 188 constraints.initialize();
194 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); 189 CreateTrack("123", constraints);
195 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); 190 CreateTrack("123", constraints);
196 mock_source()->CompleteGetSupportedFormats(); 191 mock_source()->CompleteGetSupportedFormats();
197 mock_source()->StartMockedSource(); 192 mock_source()->StartMockedSource();
198 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); 193 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks());
199 } 194 }
200 195
201 // Test that the capture output is CIF if we set max constraints to CIF. 196 // Test that the capture output is CIF if we set max constraints to CIF.
202 // and the capture device support CIF. 197 // and the capture device support CIF.
203 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) { 198 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) {
204 ConstraintsFactory factory; 199 ConstraintsFactory factory;
205 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 352); 200 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 352);
(...skipping 23 matching lines...) Expand all
229 ConstraintsFactory factory; 224 ConstraintsFactory factory;
230 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); 225 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640);
231 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); 226 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480);
232 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, 227 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio,
233 640.0 / 480); 228 640.0 / 480);
234 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); 229 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280);
235 230
236 CreateTrackAndStartSource(factory.CreateConstraints(), 640, 480, 30); 231 CreateTrackAndStartSource(factory.CreateConstraints(), 640, 480, 30);
237 } 232 }
238 233
239 // Test that ApplyConstraints fail if the mandatory aspect ratio 234 // Test that AddTrack fail if the mandatory aspect ratio
240 // is set higher than supported. 235 // is set higher than supported.
241 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) { 236 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) {
242 ConstraintsFactory factory; 237 ConstraintsFactory factory;
243 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2); 238 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2);
244 CreateTrack("123", factory.CreateConstraints()); 239 CreateTrack("123", factory.CreateConstraints());
245 mock_source()->CompleteGetSupportedFormats(); 240 mock_source()->CompleteGetSupportedFormats();
246 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 241 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
247 } 242 }
248 243
249 // Test that the source ignores an optional aspect ratio that is higher than 244 // Test that the source ignores an optional aspect ratio that is higher than
(...skipping 26 matching lines...) Expand all
276 constraints.initialize(); 271 constraints.initialize();
277 CreateTrackAndStartSource(constraints, 272 CreateTrackAndStartSource(constraints,
278 MediaStreamVideoSource::kDefaultWidth, 273 MediaStreamVideoSource::kDefaultWidth,
279 MediaStreamVideoSource::kDefaultHeight, 274 MediaStreamVideoSource::kDefaultHeight,
280 30); 275 30);
281 } 276 }
282 277
283 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { 278 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) {
284 ConstraintsFactory factory; 279 ConstraintsFactory factory;
285 factory.AddMandatory("weird key", 640); 280 factory.AddMandatory("weird key", 640);
286
287 CreateTrack("123", factory.CreateConstraints()); 281 CreateTrack("123", factory.CreateConstraints());
288 mock_source()->CompleteGetSupportedFormats(); 282 mock_source()->CompleteGetSupportedFormats();
289 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); 283 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks());
290 } 284 }
291 285
292 // Test that the source ignores an unknown optional constraint. 286 // Test that the source ignores an unknown optional constraint.
293 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { 287 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) {
294 ConstraintsFactory factory; 288 ConstraintsFactory factory;
295 factory.AddOptional("weird key", 640); 289 factory.AddOptional("weird key", 640);
296 290
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 mock_source()->DeliverVideoFrame(frame); 341 mock_source()->DeliverVideoFrame(frame);
348 EXPECT_EQ(1, adapter->GetFrameNum()); 342 EXPECT_EQ(1, adapter->GetFrameNum());
349 EXPECT_EQ(MediaStreamVideoSource::kDefaultWidth, 343 EXPECT_EQ(MediaStreamVideoSource::kDefaultWidth,
350 adapter->GetLastFrameWidth()); 344 adapter->GetLastFrameWidth());
351 EXPECT_EQ(MediaStreamVideoSource::kDefaultHeight, 345 EXPECT_EQ(MediaStreamVideoSource::kDefaultHeight,
352 adapter->GetLastFrameHeight()); 346 adapter->GetLastFrameHeight());
353 } 347 }
354 348
355 349
356 } // namespace content 350 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698