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

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

Issue 432903002: Change a disabled MediaStreamVideoTrack to output black video frames for each incoming frame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Tommis comments. Created 6 years, 4 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
11 #include "base/threading/thread_checker_impl.h" 11 #include "base/threading/thread_checker_impl.h"
12 #include "content/child/child_process.h" 12 #include "content/child/child_process.h"
13 #include "content/renderer/media/media_stream_video_track.h" 13 #include "content/renderer/media/media_stream_video_track.h"
14 #include "content/renderer/media/mock_media_stream_video_sink.h" 14 #include "content/renderer/media/mock_media_stream_video_sink.h"
15 #include "content/renderer/media/mock_media_stream_video_source.h" 15 #include "content/renderer/media/mock_media_stream_video_source.h"
16 #include "media/base/video_frame.h" 16 #include "media/base/video_frame.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 namespace content { 19 namespace content {
20 20
21 const uint8 kBlackValue = 0x00;
22 const uint8 kColorValue = 0xAB;
23
21 ACTION_P(RunClosure, closure) { 24 ACTION_P(RunClosure, closure) {
22 closure.Run(); 25 closure.Run();
23 } 26 }
24 27
25 class MediaStreamVideoTrackTest : public ::testing::Test { 28 class MediaStreamVideoTrackTest : public ::testing::Test {
26 public: 29 public:
27 MediaStreamVideoTrackTest() 30 MediaStreamVideoTrackTest()
28 : child_process_(new ChildProcess()), 31 : child_process_(new ChildProcess()),
29 mock_source_(new MockMediaStreamVideoSource(false)), 32 mock_source_(new MockMediaStreamVideoSource(false)),
30 source_started_(false) { 33 source_started_(false) {
31 blink_source_.initialize(base::UTF8ToUTF16("dummy_source_id"), 34 blink_source_.initialize(base::UTF8ToUTF16("dummy_source_id"),
32 blink::WebMediaStreamSource::TypeVideo, 35 blink::WebMediaStreamSource::TypeVideo,
33 base::UTF8ToUTF16("dummy_source_name")); 36 base::UTF8ToUTF16("dummy_source_name"));
34 blink_source_.setExtraData(mock_source_); 37 blink_source_.setExtraData(mock_source_);
35 } 38 }
36 39
37 virtual ~MediaStreamVideoTrackTest() { 40 virtual ~MediaStreamVideoTrackTest() {
38 } 41 }
39 42
40 void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) { 43 void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) {
41 base::RunLoop run_loop; 44 base::RunLoop run_loop;
42 base::Closure quit_closure = run_loop.QuitClosure(); 45 base::Closure quit_closure = run_loop.QuitClosure();
43 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce( 46 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(
44 RunClosure(quit_closure)); 47 RunClosure(quit_closure));
45 scoped_refptr<media::VideoFrame> frame = 48 scoped_refptr<media::VideoFrame> frame =
46 media::VideoFrame::CreateBlackFrame( 49 media::VideoFrame::CreateColorFrame(
47 gfx::Size(MediaStreamVideoSource::kDefaultWidth, 50 gfx::Size(MediaStreamVideoSource::kDefaultWidth,
48 MediaStreamVideoSource::kDefaultHeight)); 51 MediaStreamVideoSource::kDefaultHeight),
52 kColorValue, kColorValue, kColorValue, base::TimeDelta());
49 mock_source()->DeliverVideoFrame(frame); 53 mock_source()->DeliverVideoFrame(frame);
50 run_loop.Run(); 54 run_loop.Run();
51 } 55 }
52 56
53 protected: 57 protected:
54 base::MessageLoop* io_message_loop() const { 58 base::MessageLoop* io_message_loop() const {
55 return child_process_->io_message_loop(); 59 return child_process_->io_message_loop();
56 } 60 }
57 61
58 // Create a track that's associated with |mock_source_|. 62 // Create a track that's associated with |mock_source_|.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 MockMediaStreamVideoSink sink; 160 MockMediaStreamVideoSink sink;
157 blink::WebMediaStreamTrack track = CreateTrack(); 161 blink::WebMediaStreamTrack track = CreateTrack();
158 MediaStreamVideoSink::AddToVideoTrack( 162 MediaStreamVideoSink::AddToVideoTrack(
159 &sink, sink.GetDeliverFrameCB(), track); 163 &sink, sink.GetDeliverFrameCB(), track);
160 164
161 MediaStreamVideoTrack* video_track = 165 MediaStreamVideoTrack* video_track =
162 MediaStreamVideoTrack::GetVideoTrack(track); 166 MediaStreamVideoTrack::GetVideoTrack(track);
163 167
164 DeliverVideoFrameAndWaitForRenderer(&sink); 168 DeliverVideoFrameAndWaitForRenderer(&sink);
165 EXPECT_EQ(1, sink.number_of_frames()); 169 EXPECT_EQ(1, sink.number_of_frames());
170 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
166 171
167 video_track->SetEnabled(false); 172 video_track->SetEnabled(false);
168 EXPECT_FALSE(sink.enabled()); 173 EXPECT_FALSE(sink.enabled());
169 174
170 scoped_refptr<media::VideoFrame> frame = 175 DeliverVideoFrameAndWaitForRenderer(&sink);
171 media::VideoFrame::CreateBlackFrame( 176 EXPECT_EQ(2, sink.number_of_frames());
172 gfx::Size(MediaStreamVideoSource::kDefaultWidth, 177 EXPECT_EQ(kBlackValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
173 MediaStreamVideoSource::kDefaultHeight));
174 mock_source()->DeliverVideoFrame(frame);
175 // Wait for the IO thread to complete delivering frames.
176 io_message_loop()->RunUntilIdle();
177 EXPECT_EQ(1, sink.number_of_frames());
178 178
179 video_track->SetEnabled(true); 179 video_track->SetEnabled(true);
180 EXPECT_TRUE(sink.enabled()); 180 EXPECT_TRUE(sink.enabled());
181 mock_source()->DeliverVideoFrame(frame);
182 DeliverVideoFrameAndWaitForRenderer(&sink); 181 DeliverVideoFrameAndWaitForRenderer(&sink);
183 EXPECT_EQ(2, sink.number_of_frames()); 182 EXPECT_EQ(3, sink.number_of_frames());
183 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
184 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 184 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
185 } 185 }
186 186
187 TEST_F(MediaStreamVideoTrackTest, SourceStopped) { 187 TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
188 MockMediaStreamVideoSink sink; 188 MockMediaStreamVideoSink sink;
189 blink::WebMediaStreamTrack track = CreateTrack(); 189 blink::WebMediaStreamTrack track = CreateTrack();
190 MediaStreamVideoSink::AddToVideoTrack( 190 MediaStreamVideoSink::AddToVideoTrack(
191 &sink, sink.GetDeliverFrameCB(), track); 191 &sink, sink.GetDeliverFrameCB(), track);
192 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state()); 192 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
193 193
(...skipping 29 matching lines...) Expand all
223 MediaStreamVideoTrack* native_track2 = 223 MediaStreamVideoTrack* native_track2 =
224 MediaStreamVideoTrack::GetVideoTrack(track2); 224 MediaStreamVideoTrack::GetVideoTrack(track2);
225 native_track2->Stop(); 225 native_track2->Stop();
226 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink2.state()); 226 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink2.state());
227 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, 227 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
228 blink_source().readyState()); 228 blink_source().readyState());
229 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); 229 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2);
230 } 230 }
231 231
232 } // namespace content 232 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_track.cc ('k') | content/renderer/media/mock_media_stream_video_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698