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

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

Issue 1233033002: MediaStream: Adding VideoTrackRecorder class and unittests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved |track_index| and timestamp mgmt from VideoTrackRecorder into WebmMuxer Created 5 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
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"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 ~MediaStreamVideoTrackTest() override {} 42 ~MediaStreamVideoTrackTest() override {}
43 43
44 void TearDown() override { 44 void TearDown() override {
45 blink_source_.reset(); 45 blink_source_.reset();
46 blink::WebHeap::collectAllGarbageForTesting(); 46 blink::WebHeap::collectAllGarbageForTesting();
47 } 47 }
48 48
49 void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) { 49 void DeliverVideoFrameAndWaitForRenderer(MockMediaStreamVideoSink* sink) {
50 base::RunLoop run_loop; 50 base::RunLoop run_loop;
51 base::Closure quit_closure = run_loop.QuitClosure(); 51 base::Closure quit_closure = run_loop.QuitClosure();
52 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce( 52 EXPECT_CALL(*sink, OnVideoFrame()).WillOnce(RunClosure(quit_closure));
53 RunClosure(quit_closure)); 53 const scoped_refptr<media::VideoFrame> frame =
54 scoped_refptr<media::VideoFrame> frame =
55 media::VideoFrame::CreateColorFrame( 54 media::VideoFrame::CreateColorFrame(
56 gfx::Size(MediaStreamVideoSource::kDefaultWidth, 55 gfx::Size(MediaStreamVideoSource::kDefaultWidth,
57 MediaStreamVideoSource::kDefaultHeight), 56 MediaStreamVideoSource::kDefaultHeight),
58 kColorValue, kColorValue, kColorValue, base::TimeDelta()); 57 kColorValue, kColorValue, kColorValue, base::TimeDelta());
59 mock_source()->DeliverVideoFrame(frame); 58 mock_source()->DeliverVideoFrame(frame);
60 run_loop.Run(); 59 run_loop.Run();
61 } 60 }
62 61
63 protected: 62 protected:
64 base::MessageLoop* io_message_loop() const { 63 base::MessageLoop* io_message_loop() const {
65 return child_process_->io_message_loop(); 64 return child_process_->io_message_loop();
66 } 65 }
67 66
68 // Create a track that's associated with |mock_source_|. 67 // Create a track that's associated with |mock_source_|.
69 blink::WebMediaStreamTrack CreateTrack() { 68 blink::WebMediaStreamTrack CreateTrack() {
70 blink::WebMediaConstraints constraints; 69 blink::WebMediaConstraints constraints;
71 constraints.initialize(); 70 constraints.initialize();
72 bool enabled = true; 71 const bool enabled = true;
73 blink::WebMediaStreamTrack track = 72 blink::WebMediaStreamTrack track =
74 MediaStreamVideoTrack::CreateVideoTrack( 73 MediaStreamVideoTrack::CreateVideoTrack(
75 mock_source_, constraints, 74 mock_source_, constraints,
76 MediaStreamSource::ConstraintsCallback(), enabled); 75 MediaStreamSource::ConstraintsCallback(), enabled);
77 if (!source_started_) { 76 if (!source_started_) {
78 mock_source_->StartMockedSource(); 77 mock_source_->StartMockedSource();
79 source_started_ = true; 78 source_started_ = true;
80 } 79 }
81 return track; 80 return track;
82 } 81 }
83 82
84 MockMediaStreamVideoSource* mock_source() { return mock_source_; } 83 MockMediaStreamVideoSource* mock_source() { return mock_source_; }
85 const blink::WebMediaStreamSource& blink_source() const { 84 const blink::WebMediaStreamSource& blink_source() const {
86 return blink_source_; 85 return blink_source_;
87 } 86 }
88 87
89 private: 88 private:
90 base::MessageLoopForUI message_loop_; 89 const base::MessageLoopForUI message_loop_;
91 scoped_ptr<ChildProcess> child_process_; 90 const scoped_ptr<ChildProcess> child_process_;
92 blink::WebMediaStreamSource blink_source_; 91 blink::WebMediaStreamSource blink_source_;
93 // |mock_source_| is owned by |webkit_source_|. 92 // |mock_source_| is owned by |webkit_source_|.
94 MockMediaStreamVideoSource* mock_source_; 93 MockMediaStreamVideoSource* mock_source_;
95 bool source_started_; 94 bool source_started_;
96 }; 95 };
97 96
98 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) { 97 TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) {
99 MockMediaStreamVideoSink sink; 98 MockMediaStreamVideoSink sink;
100 blink::WebMediaStreamTrack track = CreateTrack(); 99 blink::WebMediaStreamTrack track = CreateTrack();
101 MediaStreamVideoSink::AddToVideoTrack( 100 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track);
102 &sink, sink.GetDeliverFrameCB(), track);
103 101
104 DeliverVideoFrameAndWaitForRenderer(&sink); 102 DeliverVideoFrameAndWaitForRenderer(&sink);
105 EXPECT_EQ(1, sink.number_of_frames()); 103 EXPECT_EQ(1, sink.number_of_frames());
106 104
107 DeliverVideoFrameAndWaitForRenderer(&sink); 105 DeliverVideoFrameAndWaitForRenderer(&sink);
108 106
109 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 107 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
110 108
111 scoped_refptr<media::VideoFrame> frame = 109 scoped_refptr<media::VideoFrame> frame =
112 media::VideoFrame::CreateBlackFrame( 110 media::VideoFrame::CreateBlackFrame(
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 base::Owned(new CheckThreadHelper(run_loop.QuitClosure(), &correct))), 155 base::Owned(new CheckThreadHelper(run_loop.QuitClosure(), &correct))),
158 track); 156 track);
159 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 157 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
160 run_loop.Run(); 158 run_loop.Run();
161 EXPECT_TRUE(correct) << "Not called on correct thread."; 159 EXPECT_TRUE(correct) << "Not called on correct thread.";
162 } 160 }
163 161
164 TEST_F(MediaStreamVideoTrackTest, SetEnabled) { 162 TEST_F(MediaStreamVideoTrackTest, SetEnabled) {
165 MockMediaStreamVideoSink sink; 163 MockMediaStreamVideoSink sink;
166 blink::WebMediaStreamTrack track = CreateTrack(); 164 blink::WebMediaStreamTrack track = CreateTrack();
167 MediaStreamVideoSink::AddToVideoTrack( 165 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track);
168 &sink, sink.GetDeliverFrameCB(), track);
169 166
170 MediaStreamVideoTrack* video_track = 167 MediaStreamVideoTrack* video_track =
171 MediaStreamVideoTrack::GetVideoTrack(track); 168 MediaStreamVideoTrack::GetVideoTrack(track);
172 169
173 DeliverVideoFrameAndWaitForRenderer(&sink); 170 DeliverVideoFrameAndWaitForRenderer(&sink);
174 EXPECT_EQ(1, sink.number_of_frames()); 171 EXPECT_EQ(1, sink.number_of_frames());
175 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane)); 172 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
176 173
177 video_track->SetEnabled(false); 174 video_track->SetEnabled(false);
178 EXPECT_FALSE(sink.enabled()); 175 EXPECT_FALSE(sink.enabled());
179 176
180 DeliverVideoFrameAndWaitForRenderer(&sink); 177 DeliverVideoFrameAndWaitForRenderer(&sink);
181 EXPECT_EQ(2, sink.number_of_frames()); 178 EXPECT_EQ(2, sink.number_of_frames());
182 EXPECT_EQ(kBlackValue, *sink.last_frame()->data(media::VideoFrame::kYPlane)); 179 EXPECT_EQ(kBlackValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
183 180
184 video_track->SetEnabled(true); 181 video_track->SetEnabled(true);
185 EXPECT_TRUE(sink.enabled()); 182 EXPECT_TRUE(sink.enabled());
186 DeliverVideoFrameAndWaitForRenderer(&sink); 183 DeliverVideoFrameAndWaitForRenderer(&sink);
187 EXPECT_EQ(3, sink.number_of_frames()); 184 EXPECT_EQ(3, sink.number_of_frames());
188 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane)); 185 EXPECT_EQ(kColorValue, *sink.last_frame()->data(media::VideoFrame::kYPlane));
189 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 186 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
190 } 187 }
191 188
192 TEST_F(MediaStreamVideoTrackTest, SourceStopped) { 189 TEST_F(MediaStreamVideoTrackTest, SourceStopped) {
193 MockMediaStreamVideoSink sink; 190 MockMediaStreamVideoSink sink;
194 blink::WebMediaStreamTrack track = CreateTrack(); 191 blink::WebMediaStreamTrack track = CreateTrack();
195 MediaStreamVideoSink::AddToVideoTrack( 192 MediaStreamVideoSink::AddToVideoTrack(&sink, sink.GetDeliverFrameCB(), track);
196 &sink, sink.GetDeliverFrameCB(), track);
197 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state()); 193 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state());
198 194
199 mock_source()->StopSource(); 195 mock_source()->StopSource();
200 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state()); 196 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink.state());
201 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); 197 MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track);
202 } 198 }
203 199
204 TEST_F(MediaStreamVideoTrackTest, StopLastTrack) { 200 TEST_F(MediaStreamVideoTrackTest, StopLastTrack) {
205 MockMediaStreamVideoSink sink1; 201 MockMediaStreamVideoSink sink1;
206 blink::WebMediaStreamTrack track1 = CreateTrack(); 202 blink::WebMediaStreamTrack track1 = CreateTrack();
207 MediaStreamVideoSink::AddToVideoTrack( 203 MediaStreamVideoSink::AddToVideoTrack(
208 &sink1, sink1.GetDeliverFrameCB(), track1); 204 &sink1, sink1.GetDeliverFrameCB(), track1);
209 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state()); 205 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state());
210 206
211 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, 207 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
212 blink_source().readyState()); 208 blink_source().readyState());
213 209
214 MockMediaStreamVideoSink sink2; 210 MockMediaStreamVideoSink sink2;
215 blink::WebMediaStreamTrack track2 = CreateTrack(); 211 blink::WebMediaStreamTrack track2 = CreateTrack();
216 MediaStreamVideoSink::AddToVideoTrack( 212 MediaStreamVideoSink::AddToVideoTrack(
217 &sink2, sink2.GetDeliverFrameCB(), track2); 213 &sink2, sink2.GetDeliverFrameCB(), track2);
218 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state()); 214 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state());
219 215
220 MediaStreamVideoTrack* native_track1 = 216 MediaStreamVideoTrack* const native_track1 =
221 MediaStreamVideoTrack::GetVideoTrack(track1); 217 MediaStreamVideoTrack::GetVideoTrack(track1);
222 native_track1->Stop(); 218 native_track1->Stop();
223 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink1.state()); 219 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink1.state());
224 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, 220 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
225 blink_source().readyState()); 221 blink_source().readyState());
226 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1); 222 MediaStreamVideoSink::RemoveFromVideoTrack(&sink1, track1);
227 223
228 MediaStreamVideoTrack* native_track2 = 224 MediaStreamVideoTrack* const native_track2 =
229 MediaStreamVideoTrack::GetVideoTrack(track2); 225 MediaStreamVideoTrack::GetVideoTrack(track2);
230 native_track2->Stop(); 226 native_track2->Stop();
231 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink2.state()); 227 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, sink2.state());
232 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, 228 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
233 blink_source().readyState()); 229 blink_source().readyState());
234 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2); 230 MediaStreamVideoSink::RemoveFromVideoTrack(&sink2, track2);
235 } 231 }
236 232
237 } // namespace content 233 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698