| 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 blink::WebMediaStreamSource::TypeVideo, | 73 blink::WebMediaStreamSource::TypeVideo, |
| 73 base::UTF8ToUTF16("dummy_source_name")); | 74 base::UTF8ToUTF16("dummy_source_name")); |
| 74 webkit_source_.setExtraData(mock_source_); | 75 webkit_source_.setExtraData(mock_source_); |
| 75 } | 76 } |
| 76 | 77 |
| 77 protected: | 78 protected: |
| 78 // Create a track that's associated with |webkit_source_|. | 79 // Create a track that's associated with |webkit_source_|. |
| 79 blink::WebMediaStreamTrack CreateTrack( | 80 blink::WebMediaStreamTrack CreateTrack( |
| 80 const std::string& id, | 81 const std::string& id, |
| 81 const blink::WebMediaConstraints& constraints) { | 82 const blink::WebMediaConstraints& constraints) { |
| 82 blink::WebMediaStreamTrack track; | 83 bool enabled = true; |
| 83 track.initialize(base::UTF8ToUTF16(id), webkit_source_); | 84 MediaStreamDependencyFactory* factory = NULL; |
| 84 | 85 return MediaStreamVideoTrack::CreateVideoTrack( |
| 85 MediaStreamVideoSource* source = | 86 mock_source_, constraints, |
| 86 static_cast<MediaStreamVideoSource*>(track.source().extraData()); | 87 base::Bind( |
| 87 | 88 &MediaStreamVideoSourceTest::OnConstraintsApplied, |
| 88 source->AddTrack(track, | 89 base::Unretained(this)), |
| 89 constraints, | 90 enabled, factory); |
| 90 base::Bind( | |
| 91 &MediaStreamVideoSourceTest::OnConstraintsApplied, | |
| 92 base::Unretained(this))); | |
| 93 return track; | |
| 94 } | 91 } |
| 95 | 92 |
| 96 blink::WebMediaStreamTrack CreateTrackAndStartSource( | 93 blink::WebMediaStreamTrack CreateTrackAndStartSource( |
| 97 const blink::WebMediaConstraints& constraints, | 94 const blink::WebMediaConstraints& constraints, |
| 98 int expected_width, | 95 int expected_width, |
| 99 int expected_height, | 96 int expected_height, |
| 100 int expected_frame_rate) { | 97 int expected_frame_rate) { |
| 101 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 98 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); |
| 102 | 99 |
| 103 mock_source_->CompleteGetSupportedFormats(); | 100 mock_source_->CompleteGetSupportedFormats(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 int number_of_failed_constraints_applied_; | 167 int number_of_failed_constraints_applied_; |
| 171 MockMediaStreamDependencyFactory factory_; | 168 MockMediaStreamDependencyFactory factory_; |
| 172 blink::WebMediaStreamSource webkit_source_; | 169 blink::WebMediaStreamSource webkit_source_; |
| 173 // |mock_source_| is owned by |webkit_source_|. | 170 // |mock_source_| is owned by |webkit_source_|. |
| 174 MockMediaStreamVideoSource* mock_source_; | 171 MockMediaStreamVideoSource* mock_source_; |
| 175 }; | 172 }; |
| 176 | 173 |
| 177 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { | 174 TEST_F(MediaStreamVideoSourceTest, AddTrackAndStartSource) { |
| 178 blink::WebMediaConstraints constraints; | 175 blink::WebMediaConstraints constraints; |
| 179 constraints.initialize(); | 176 constraints.initialize(); |
| 180 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 177 CreateTrack("123", constraints); |
| 181 mock_source()->CompleteGetSupportedFormats(); | 178 mock_source()->CompleteGetSupportedFormats(); |
| 182 mock_source()->StartMockedSource(); | 179 mock_source()->StartMockedSource(); |
| 183 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 180 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 184 } | 181 } |
| 185 | 182 |
| 186 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { | 183 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeSourceStarts) { |
| 187 blink::WebMediaConstraints constraints; | 184 blink::WebMediaConstraints constraints; |
| 188 constraints.initialize(); | 185 constraints.initialize(); |
| 189 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 186 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); |
| 190 mock_source()->CompleteGetSupportedFormats(); | 187 mock_source()->CompleteGetSupportedFormats(); |
| 191 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 188 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); |
| 192 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); | 189 EXPECT_EQ(0, NumberOfSuccessConstraintsCallbacks()); |
| 193 mock_source()->StartMockedSource(); | 190 mock_source()->StartMockedSource(); |
| 194 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 191 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 195 } | 192 } |
| 196 | 193 |
| 197 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { | 194 TEST_F(MediaStreamVideoSourceTest, AddTrackAfterSourceStarts) { |
| 198 blink::WebMediaConstraints constraints; | 195 blink::WebMediaConstraints constraints; |
| 199 constraints.initialize(); | 196 constraints.initialize(); |
| 200 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 197 CreateTrack("123", constraints); |
| 201 mock_source()->CompleteGetSupportedFormats(); | 198 mock_source()->CompleteGetSupportedFormats(); |
| 202 mock_source()->StartMockedSource(); | 199 mock_source()->StartMockedSource(); |
| 203 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); | 200 EXPECT_EQ(1, NumberOfSuccessConstraintsCallbacks()); |
| 204 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 201 CreateTrack("123", constraints); |
| 205 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 202 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 206 } | 203 } |
| 207 | 204 |
| 208 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { | 205 TEST_F(MediaStreamVideoSourceTest, AddTrackAndFailToStartSource) { |
| 209 blink::WebMediaConstraints constraints; | 206 blink::WebMediaConstraints constraints; |
| 210 constraints.initialize(); | 207 constraints.initialize(); |
| 211 blink::WebMediaStreamTrack track = CreateTrack("123", constraints); | 208 CreateTrack("123", constraints); |
| 212 mock_source()->CompleteGetSupportedFormats(); | 209 mock_source()->CompleteGetSupportedFormats(); |
| 213 mock_source()->FailToStartMockedSource(); | 210 mock_source()->FailToStartMockedSource(); |
| 214 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 211 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 215 } | 212 } |
| 216 | 213 |
| 217 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) { | 214 TEST_F(MediaStreamVideoSourceTest, AddTwoTracksBeforeGetSupportedFormats) { |
| 218 blink::WebMediaConstraints constraints; | 215 blink::WebMediaConstraints constraints; |
| 219 constraints.initialize(); | 216 constraints.initialize(); |
| 220 blink::WebMediaStreamTrack track1 = CreateTrack("123", constraints); | 217 CreateTrack("123", constraints); |
| 221 blink::WebMediaStreamTrack track2 = CreateTrack("123", constraints); | 218 CreateTrack("123", constraints); |
| 222 mock_source()->CompleteGetSupportedFormats(); | 219 mock_source()->CompleteGetSupportedFormats(); |
| 223 mock_source()->StartMockedSource(); | 220 mock_source()->StartMockedSource(); |
| 224 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); | 221 EXPECT_EQ(2, NumberOfSuccessConstraintsCallbacks()); |
| 225 } | 222 } |
| 226 | 223 |
| 227 // Test that the capture output is CIF if we set max constraints to CIF. | 224 // Test that the capture output is CIF if we set max constraints to CIF. |
| 228 // and the capture device support CIF. | 225 // and the capture device support CIF. |
| 229 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) { | 226 TEST_F(MediaStreamVideoSourceTest, MandatoryConstraintCif5Fps) { |
| 230 ConstraintsFactory factory; | 227 ConstraintsFactory factory; |
| 231 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 352); | 228 factory.AddMandatory(MediaStreamVideoSource::kMaxWidth, 352); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 255 ConstraintsFactory factory; | 252 ConstraintsFactory factory; |
| 256 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); | 253 factory.AddMandatory(MediaStreamVideoSource::kMinWidth, 640); |
| 257 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); | 254 factory.AddMandatory(MediaStreamVideoSource::kMinHeight, 480); |
| 258 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, | 255 factory.AddMandatory(MediaStreamVideoSource::kMaxAspectRatio, |
| 259 640.0 / 480); | 256 640.0 / 480); |
| 260 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); | 257 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); |
| 261 | 258 |
| 262 CreateTrackAndStartSource(factory.CreateConstraints(), 640, 480, 30); | 259 CreateTrackAndStartSource(factory.CreateConstraints(), 640, 480, 30); |
| 263 } | 260 } |
| 264 | 261 |
| 265 // Test that ApplyConstraints fail if the mandatory aspect ratio | 262 // Test that AddTrack fail if the mandatory aspect ratio |
| 266 // is set higher than supported. | 263 // is set higher than supported. |
| 267 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) { | 264 TEST_F(MediaStreamVideoSourceTest, MandatoryAspectRatioTooHigh) { |
| 268 ConstraintsFactory factory; | 265 ConstraintsFactory factory; |
| 269 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2); | 266 factory.AddMandatory(MediaStreamVideoSource::kMinAspectRatio, 2); |
| 270 CreateTrack("123", factory.CreateConstraints()); | 267 CreateTrack("123", factory.CreateConstraints()); |
| 271 mock_source()->CompleteGetSupportedFormats(); | 268 mock_source()->CompleteGetSupportedFormats(); |
| 272 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 269 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 273 } | 270 } |
| 274 | 271 |
| 275 // Test that the source ignores an optional aspect ratio that is higher than | 272 // Test that the source ignores an optional aspect ratio that is higher than |
| (...skipping 26 matching lines...) Expand all Loading... |
| 302 constraints.initialize(); | 299 constraints.initialize(); |
| 303 CreateTrackAndStartSource(constraints, | 300 CreateTrackAndStartSource(constraints, |
| 304 MediaStreamVideoSource::kDefaultWidth, | 301 MediaStreamVideoSource::kDefaultWidth, |
| 305 MediaStreamVideoSource::kDefaultHeight, | 302 MediaStreamVideoSource::kDefaultHeight, |
| 306 30); | 303 30); |
| 307 } | 304 } |
| 308 | 305 |
| 309 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { | 306 TEST_F(MediaStreamVideoSourceTest, InvalidMandatoryConstraint) { |
| 310 ConstraintsFactory factory; | 307 ConstraintsFactory factory; |
| 311 factory.AddMandatory("weird key", 640); | 308 factory.AddMandatory("weird key", 640); |
| 312 | |
| 313 CreateTrack("123", factory.CreateConstraints()); | 309 CreateTrack("123", factory.CreateConstraints()); |
| 314 mock_source()->CompleteGetSupportedFormats(); | 310 mock_source()->CompleteGetSupportedFormats(); |
| 315 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); | 311 EXPECT_EQ(1, NumberOfFailedConstraintsCallbacks()); |
| 316 } | 312 } |
| 317 | 313 |
| 318 // Test that the source ignores an unknown optional constraint. | 314 // Test that the source ignores an unknown optional constraint. |
| 319 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { | 315 TEST_F(MediaStreamVideoSourceTest, InvalidOptionalConstraint) { |
| 320 ConstraintsFactory factory; | 316 ConstraintsFactory factory; |
| 321 factory.AddOptional("weird key", 640); | 317 factory.AddOptional("weird key", 640); |
| 322 | 318 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 TEST_F(MediaStreamVideoSourceTest, DeliverSmallerSizeWhenTooLargeMax) { | 411 TEST_F(MediaStreamVideoSourceTest, DeliverSmallerSizeWhenTooLargeMax) { |
| 416 ConstraintsFactory factory; | 412 ConstraintsFactory factory; |
| 417 factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 1920); | 413 factory.AddOptional(MediaStreamVideoSource::kMaxWidth, 1920); |
| 418 factory.AddOptional(MediaStreamVideoSource::kMaxHeight, 1080); | 414 factory.AddOptional(MediaStreamVideoSource::kMaxHeight, 1080); |
| 419 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); | 415 factory.AddOptional(MediaStreamVideoSource::kMinWidth, 1280); |
| 420 factory.AddOptional(MediaStreamVideoSource::kMinHeight, 720); | 416 factory.AddOptional(MediaStreamVideoSource::kMinHeight, 720); |
| 421 TestSourceCropFrame(1280, 720, factory.CreateConstraints(), 1280, 720); | 417 TestSourceCropFrame(1280, 720, factory.CreateConstraints(), 1280, 720); |
| 422 } | 418 } |
| 423 | 419 |
| 424 } // namespace content | 420 } // namespace content |
| OLD | NEW |