OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/message_loop/message_loop.h" | 5 #include "base/message_loop/message_loop.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "base/thread_task_runner_handle.h" | 7 #include "base/thread_task_runner_handle.h" |
8 #include "content/child/child_process.h" | 8 #include "content/child/child_process.h" |
9 #include "content/renderer/media/canvas_capture_handler.h" | 9 #include "content/renderer/media/canvas_capture_handler.h" |
10 #include "content/renderer/media/media_stream_video_capturer_source.h" | 10 #include "content/renderer/media/media_stream_video_capturer_source.h" |
11 #include "media/base/limits.h" | 11 #include "media/base/limits.h" |
12 #include "skia/ext/refptr.h" | 12 #include "skia/ext/refptr.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 13 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" | 15 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" |
16 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" | 16 #include "third_party/WebKit/public/platform/WebMediaStreamTrack.h" |
17 #include "third_party/WebKit/public/platform/WebSize.h" | 17 #include "third_party/WebKit/public/platform/WebSize.h" |
18 #include "third_party/WebKit/public/web/WebHeap.h" | 18 #include "third_party/WebKit/public/web/WebHeap.h" |
19 | 19 |
20 using ::testing::_; | 20 using ::testing::_; |
21 using ::testing::InSequence; | 21 using ::testing::InSequence; |
22 using ::testing::Mock; | 22 using ::testing::Mock; |
23 using ::testing::SaveArg; | 23 using ::testing::SaveArg; |
24 using ::testing::Test; | 24 using ::testing::Test; |
25 | 25 |
26 namespace content { | 26 namespace content { |
27 | 27 |
| 28 namespace { |
| 29 |
28 static const int kTestCanvasCaptureWidth = 320; | 30 static const int kTestCanvasCaptureWidth = 320; |
29 static const int kTestCanvasCaptureHeight = 240; | 31 static const int kTestCanvasCaptureHeight = 240; |
30 static const double kTestCanvasCaptureFramesPerSecond = 55.5; | 32 static const double kTestCanvasCaptureFramesPerSecond = 55.5; |
31 | 33 |
32 static const int kTestCanvasCaptureFrameWidth = 2; | 34 static const int kTestCanvasCaptureFrameWidth = 2; |
33 static const int kTestCanvasCaptureFrameHeight = 2; | 35 static const int kTestCanvasCaptureFrameHeight = 2; |
34 static const int kTestCanvasCaptureFrameErrorTolerance = 2; | 36 static const int kTestCanvasCaptureFrameErrorTolerance = 2; |
| 37 static const int kTestAlphaValue = 175; |
35 | 38 |
36 ACTION_P(RunClosure, closure) { | 39 ACTION_P(RunClosure, closure) { |
37 closure.Run(); | 40 closure.Run(); |
38 } | 41 } |
39 | 42 |
| 43 } // namespace |
| 44 |
40 class CanvasCaptureHandlerTest : public Test { | 45 class CanvasCaptureHandlerTest : public Test { |
41 public: | 46 public: |
42 CanvasCaptureHandlerTest() {} | 47 CanvasCaptureHandlerTest() {} |
43 | 48 |
44 void SetUp() override { | 49 void SetUp() override { |
45 canvas_capture_handler_.reset( | 50 canvas_capture_handler_.reset( |
46 CanvasCaptureHandler::CreateCanvasCaptureHandler( | 51 CanvasCaptureHandler::CreateCanvasCaptureHandler( |
47 blink::WebSize(kTestCanvasCaptureWidth, kTestCanvasCaptureHeight), | 52 blink::WebSize(kTestCanvasCaptureWidth, kTestCanvasCaptureHeight), |
48 kTestCanvasCaptureFramesPerSecond, message_loop_.task_runner(), | 53 kTestCanvasCaptureFramesPerSecond, message_loop_.task_runner(), |
49 &track_)); | 54 &track_)); |
(...skipping 23 matching lines...) Expand all Loading... |
73 } | 78 } |
74 | 79 |
75 MOCK_METHOD1(DoOnRunning, void(bool)); | 80 MOCK_METHOD1(DoOnRunning, void(bool)); |
76 void OnRunning(bool state) { DoOnRunning(state); } | 81 void OnRunning(bool state) { DoOnRunning(state); } |
77 | 82 |
78 // Verify returned frames. | 83 // Verify returned frames. |
79 static skia::RefPtr<SkImage> GenerateTestImage() { | 84 static skia::RefPtr<SkImage> GenerateTestImage() { |
80 SkBitmap testBitmap; | 85 SkBitmap testBitmap; |
81 testBitmap.allocN32Pixels(kTestCanvasCaptureFrameWidth, | 86 testBitmap.allocN32Pixels(kTestCanvasCaptureFrameWidth, |
82 kTestCanvasCaptureFrameHeight); | 87 kTestCanvasCaptureFrameHeight); |
83 testBitmap.eraseColor(SK_ColorBLUE); | 88 testBitmap.eraseARGB(kTestAlphaValue, 30, 60, 200); |
84 return skia::AdoptRef(SkImage::NewFromBitmap(testBitmap)); | 89 return skia::AdoptRef(SkImage::NewFromBitmap(testBitmap)); |
85 } | 90 } |
86 | 91 |
87 void OnVerifyDeliveredFrame( | 92 void OnVerifyDeliveredFrame( |
88 const scoped_refptr<media::VideoFrame>& video_frame, | 93 const scoped_refptr<media::VideoFrame>& video_frame, |
89 base::TimeTicks estimated_capture_time) { | 94 base::TimeTicks estimated_capture_time) { |
90 EXPECT_EQ(media::PIXEL_FORMAT_I420, video_frame->format()); | 95 EXPECT_EQ(media::PIXEL_FORMAT_YV12A, video_frame->format()); |
91 const gfx::Size& size = video_frame->coded_size(); | 96 const gfx::Size& size = video_frame->coded_size(); |
92 EXPECT_EQ(kTestCanvasCaptureFrameWidth, size.width()); | 97 EXPECT_EQ(kTestCanvasCaptureFrameWidth, size.width()); |
93 EXPECT_EQ(kTestCanvasCaptureFrameHeight, size.height()); | 98 EXPECT_EQ(kTestCanvasCaptureFrameHeight, size.height()); |
94 const uint8_t* y_plane = video_frame->data(0); | 99 const uint8_t* y_plane = video_frame->data(media::VideoFrame::kYPlane); |
95 EXPECT_NEAR(41, y_plane[0], kTestCanvasCaptureFrameErrorTolerance); | 100 EXPECT_NEAR(74, y_plane[0], kTestCanvasCaptureFrameErrorTolerance); |
96 const uint8_t* u_plane = video_frame->data(1); | 101 const uint8_t* u_plane = video_frame->data(media::VideoFrame::kUPlane); |
97 EXPECT_NEAR(239, u_plane[0], kTestCanvasCaptureFrameErrorTolerance); | 102 EXPECT_NEAR(193, u_plane[0], kTestCanvasCaptureFrameErrorTolerance); |
98 const uint8_t* v_plane = video_frame->data(2); | 103 const uint8_t* v_plane = video_frame->data(media::VideoFrame::kVPlane); |
99 EXPECT_NEAR(110, v_plane[0], kTestCanvasCaptureFrameErrorTolerance); | 104 EXPECT_NEAR(105, v_plane[0], kTestCanvasCaptureFrameErrorTolerance); |
| 105 const uint8_t* a_plane = video_frame->data(media::VideoFrame::kAPlane); |
| 106 EXPECT_EQ(kTestAlphaValue, a_plane[0]); |
100 } | 107 } |
101 | 108 |
102 blink::WebMediaStreamTrack track_; | 109 blink::WebMediaStreamTrack track_; |
103 // The Class under test. Needs to be scoped_ptr to force its destruction. | 110 // The Class under test. Needs to be scoped_ptr to force its destruction. |
104 scoped_ptr<CanvasCaptureHandler> canvas_capture_handler_; | 111 scoped_ptr<CanvasCaptureHandler> canvas_capture_handler_; |
105 | 112 |
106 protected: | 113 protected: |
107 media::VideoCapturerSource* GetVideoCapturerSource( | 114 media::VideoCapturerSource* GetVideoCapturerSource( |
108 MediaStreamVideoCapturerSource* ms_source) { | 115 MediaStreamVideoCapturerSource* ms_source) { |
109 return ms_source->source_.get(); | 116 return ms_source->source_.get(); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 media::VideoCapturerSource* source = | 200 media::VideoCapturerSource* source = |
194 GetVideoCapturerSource(static_cast<MediaStreamVideoCapturerSource*>( | 201 GetVideoCapturerSource(static_cast<MediaStreamVideoCapturerSource*>( |
195 track_.source().extraData())); | 202 track_.source().extraData())); |
196 EXPECT_TRUE(source != nullptr); | 203 EXPECT_TRUE(source != nullptr); |
197 EXPECT_TRUE(canvas_capture_handler_->needsNewFrame()); | 204 EXPECT_TRUE(canvas_capture_handler_->needsNewFrame()); |
198 source->StopCapture(); | 205 source->StopCapture(); |
199 EXPECT_FALSE(canvas_capture_handler_->needsNewFrame()); | 206 EXPECT_FALSE(canvas_capture_handler_->needsNewFrame()); |
200 } | 207 } |
201 | 208 |
202 } // namespace content | 209 } // namespace content |
OLD | NEW |