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/bind.h" | 5 #include "base/bind.h" |
6 #include "base/macros.h" | 6 #include "base/macros.h" |
7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "content/child/child_process.h" | 9 #include "content/child/child_process.h" |
10 #include "content/renderer/media/media_stream_video_renderer_sink.h" | 10 #include "content/renderer/media/media_stream_video_renderer_sink.h" |
(...skipping 21 matching lines...) Expand all Loading... | |
32 static const std::string kTestStreamUrl = "stream_url"; | 32 static const std::string kTestStreamUrl = "stream_url"; |
33 static const std::string kTestVideoTrackId = "video_track_id"; | 33 static const std::string kTestVideoTrackId = "video_track_id"; |
34 | 34 |
35 class MediaStreamVideoRendererSinkTest : public testing::Test { | 35 class MediaStreamVideoRendererSinkTest : public testing::Test { |
36 public: | 36 public: |
37 MediaStreamVideoRendererSinkTest() { | 37 MediaStreamVideoRendererSinkTest() { |
38 registry_.Init(kTestStreamUrl); | 38 registry_.Init(kTestStreamUrl); |
39 registry_.AddVideoTrack(kTestVideoTrackId); | 39 registry_.AddVideoTrack(kTestVideoTrackId); |
40 | 40 |
41 // Extract the Blink Video Track for the MSVRSink. | 41 // Extract the Blink Video Track for the MSVRSink. |
42 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 42 registry_.test_stream().videoTracks(video_tracks_); |
43 registry_.test_stream().videoTracks(video_tracks); | 43 EXPECT_EQ(1u, video_tracks_.size()); |
44 EXPECT_EQ(1u, video_tracks.size()); | |
45 | 44 |
46 media_stream_video_renderer_sink_ = new MediaStreamVideoRendererSink( | 45 media_stream_video_renderer_sink_ = new MediaStreamVideoRendererSink( |
47 video_tracks[0], | 46 video_tracks_[0], |
48 base::Bind(&MediaStreamVideoRendererSinkTest::ErrorCallback, | 47 base::Bind(&MediaStreamVideoRendererSinkTest::ErrorCallback, |
49 base::Unretained(this)), | 48 base::Unretained(this)), |
50 base::Bind(&MediaStreamVideoRendererSinkTest::RepaintCallback, | 49 base::Bind(&MediaStreamVideoRendererSinkTest::RepaintCallback, |
51 base::Unretained(this)), | 50 base::Unretained(this)), |
52 message_loop_.task_runner(), message_loop_.task_runner().get(), | 51 message_loop_.task_runner(), message_loop_.task_runner().get(), |
53 nullptr /* gpu_factories */); | 52 nullptr /* gpu_factories */); |
54 | 53 |
55 EXPECT_TRUE(IsInStoppedState()); | 54 EXPECT_TRUE(IsInStoppedState()); |
56 } | 55 } |
57 | 56 |
(...skipping 26 matching lines...) Expand all Loading... | |
84 media_stream_video_renderer_sink_->OnVideoFrame(frame, | 83 media_stream_video_renderer_sink_->OnVideoFrame(frame, |
85 base::TimeTicks::Now()); | 84 base::TimeTicks::Now()); |
86 } | 85 } |
87 | 86 |
88 scoped_refptr<MediaStreamVideoRendererSink> media_stream_video_renderer_sink_; | 87 scoped_refptr<MediaStreamVideoRendererSink> media_stream_video_renderer_sink_; |
89 | 88 |
90 // A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks | 89 // A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks |
91 // and Sources in |registry_| into believing they are on the right threads. | 90 // and Sources in |registry_| into believing they are on the right threads. |
92 base::MessageLoopForUI message_loop_; | 91 base::MessageLoopForUI message_loop_; |
93 const ChildProcess child_process_; | 92 const ChildProcess child_process_; |
93 | |
94 blink::WebVector<blink::WebMediaStreamTrack> video_tracks_; | |
94 MockMediaStreamRegistry registry_; | 95 MockMediaStreamRegistry registry_; |
95 | 96 |
96 private: | 97 private: |
97 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSinkTest); | 98 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSinkTest); |
98 }; | 99 }; |
99 | 100 |
100 // Checks that the initialization-destruction sequence works fine. | 101 // Checks that the initialization-destruction sequence works fine. |
101 TEST_F(MediaStreamVideoRendererSinkTest, StartStop) { | 102 TEST_F(MediaStreamVideoRendererSinkTest, StartStop) { |
102 EXPECT_TRUE(IsInStoppedState()); | 103 EXPECT_TRUE(IsInStoppedState()); |
103 | 104 |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
151 message_loop_.RunUntilIdle(); | 152 message_loop_.RunUntilIdle(); |
152 ASSERT_EQ(1u, frame_ready_cbs_.size()); | 153 ASSERT_EQ(1u, frame_ready_cbs_.size()); |
153 | 154 |
154 EXPECT_CALL(*this, RepaintCallback(video_frame)).Times(1); | 155 EXPECT_CALL(*this, RepaintCallback(video_frame)).Times(1); |
155 frame_ready_cbs_[0].Run(); | 156 frame_ready_cbs_[0].Run(); |
156 message_loop_.RunUntilIdle(); | 157 message_loop_.RunUntilIdle(); |
157 | 158 |
158 media_stream_video_renderer_sink_->Stop(); | 159 media_stream_video_renderer_sink_->Stop(); |
159 } | 160 } |
160 | 161 |
162 class MediaStreamVideoRendererSinkTransparencyTest | |
163 : public MediaStreamVideoRendererSinkTest { | |
164 public: | |
165 MediaStreamVideoRendererSinkTransparencyTest() { | |
166 media_stream_video_renderer_sink_ = new MediaStreamVideoRendererSink( | |
167 video_tracks_[0], | |
168 base::Bind(&MediaStreamVideoRendererSinkTest::ErrorCallback, | |
169 base::Unretained(this)), | |
170 base::Bind(&MediaStreamVideoRendererSinkTransparencyTest:: | |
171 VerifyTransparentFrame, | |
172 base::Unretained(this)), | |
173 message_loop_.task_runner(), message_loop_.task_runner().get(), | |
174 nullptr /* gpu_factories */); | |
175 } | |
176 | |
177 void VerifyTransparentFrame(const scoped_refptr<media::VideoFrame>& frame) { | |
178 EXPECT_EQ(media::PIXEL_FORMAT_YV12A, frame->format()); | |
179 } | |
180 }; | |
181 | |
182 TEST_F(MediaStreamVideoRendererSinkTransparencyTest, | |
183 SendTransparentFrame) { | |
184 media_stream_video_renderer_sink_->Start(); | |
185 | |
186 InSequence s; | |
187 const gfx::Size size(10, 10); | |
mcasas
2016/02/29 23:48:01
mini nit: s/size/kSize/ ?
emircan
2016/03/01 20:07:55
Done.
| |
188 const base::TimeDelta kTimestamp = base::TimeDelta(); | |
189 const scoped_refptr<media::VideoFrame> video_frame = | |
190 media::VideoFrame::CreateFrame(media::PIXEL_FORMAT_YV12A, size, | |
191 gfx::Rect(size), size, kTimestamp); | |
192 OnVideoFrame(video_frame); | |
193 message_loop_.RunUntilIdle(); | |
194 | |
195 media_stream_video_renderer_sink_->Stop(); | |
196 | |
mcasas
2016/02/29 23:48:00
nit: remove l.196.
emircan
2016/03/01 20:07:55
Done.
| |
197 } | |
198 | |
161 } // namespace content | 199 } // namespace content |
OLD | NEW |