Chromium Code Reviews| 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) { |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |