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

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

Issue 287313002: Pass a TimeTicks along video capture pipeline to represent capture time (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merged and land Created 6 years, 6 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/callback_helpers.h"
6 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/run_loop.h"
7 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
8 #include "content/child/child_process.h" 10 #include "content/child/child_process.h"
11 #include "content/public/renderer/media_stream_video_sink.h"
9 #include "content/renderer/media/media_stream_video_capturer_source.h" 12 #include "content/renderer/media/media_stream_video_capturer_source.h"
10 #include "content/renderer/media/media_stream_video_track.h" 13 #include "content/renderer/media/media_stream_video_track.h"
11 #include "content/renderer/media/mock_media_constraint_factory.h" 14 #include "content/renderer/media/mock_media_constraint_factory.h"
15 #include "media/base/bind_to_current_loop.h"
12 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
14 18
15 namespace content { 19 namespace content {
16 20
17 class MockVideoCapturerDelegate : public VideoCapturerDelegate { 21 class MockVideoCapturerDelegate : public VideoCapturerDelegate {
18 public: 22 public:
19 explicit MockVideoCapturerDelegate(const StreamDeviceInfo& device_info) 23 explicit MockVideoCapturerDelegate(const StreamDeviceInfo& device_info)
20 : VideoCapturerDelegate(device_info) {} 24 : VideoCapturerDelegate(device_info) {}
21 25
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 message_loop_.RunUntilIdle(); 128 message_loop_.RunUntilIdle();
125 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, 129 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive,
126 webkit_source_.readyState()); 130 webkit_source_.readyState());
127 131
128 delegate_->OnStateUpdateOnRenderThread(VIDEO_CAPTURE_STATE_ERROR); 132 delegate_->OnStateUpdateOnRenderThread(VIDEO_CAPTURE_STATE_ERROR);
129 message_loop_.RunUntilIdle(); 133 message_loop_.RunUntilIdle();
130 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded, 134 EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateEnded,
131 webkit_source_.readyState()); 135 webkit_source_.readyState());
132 } 136 }
133 137
138 class FakeMediaStreamVideoSink : public MediaStreamVideoSink {
139 public:
140 FakeMediaStreamVideoSink(base::TimeTicks* capture_time,
141 base::Closure got_frame_cb)
142 : capture_time_(capture_time),
143 got_frame_cb_(got_frame_cb) {
144 }
145
146 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame,
147 const media::VideoCaptureFormat& format,
148 const base::TimeTicks& capture_time) {
149 *capture_time_ = capture_time;
150 base::ResetAndReturn(&got_frame_cb_).Run();
151 }
152
153 private:
154 base::TimeTicks* capture_time_;
155 base::Closure got_frame_cb_;
156 };
157
158 TEST_F(MediaStreamVideoCapturerSourceTest, CaptureTime) {
159 StreamDeviceInfo device_info;
160 device_info.device.type = MEDIA_DESKTOP_VIDEO_CAPTURE;
161 InitWithDeviceInfo(device_info);
162
163 VideoCaptureDeliverFrameCB deliver_frame_cb;
164 VideoCapturerDelegate::RunningCallback running_cb;
165
166 EXPECT_CALL(mock_delegate(), StartCapture(
167 testing::_,
168 testing::_,
169 testing::_))
170 .Times(1)
171 .WillOnce(testing::DoAll(testing::SaveArg<1>(&deliver_frame_cb),
172 testing::SaveArg<2>(&running_cb)));
173 EXPECT_CALL(mock_delegate(), StopCapture());
174 blink::WebMediaStreamTrack track = StartSource();
175 running_cb.Run(true);
176
177 base::RunLoop run_loop;
178 base::TimeTicks reference_capture_time =
179 base::TimeTicks::FromInternalValue(60013);
180 base::TimeTicks capture_time;
181 FakeMediaStreamVideoSink fake_sink(
182 &capture_time,
183 media::BindToCurrentLoop(run_loop.QuitClosure()));
184 FakeMediaStreamVideoSink::AddToVideoTrack(
185 &fake_sink,
186 base::Bind(&FakeMediaStreamVideoSink::OnVideoFrame,
187 base::Unretained(&fake_sink)),
188 track);
189 child_process_->io_message_loop()->PostTask(
190 FROM_HERE,
191 base::Bind(deliver_frame_cb,
192 media::VideoFrame::CreateBlackFrame(gfx::Size(2, 2)),
193 media::VideoCaptureFormat(),
194 reference_capture_time));
195 run_loop.Run();
196 FakeMediaStreamVideoSink::RemoveFromVideoTrack(&fake_sink, track);
197 EXPECT_EQ(reference_capture_time, capture_time);
198 }
199
134 } // namespace content 200 } // namespace content
OLDNEW
« no previous file with comments | « content/public/renderer/media_stream_video_sink.cc ('k') | content/renderer/media/media_stream_video_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698