OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <map> | 5 #include <map> |
6 #include <string> | 6 #include <string> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "testing/gmock/include/gmock/gmock.h" | 24 #include "testing/gmock/include/gmock/gmock.h" |
25 #include "testing/gtest/include/gtest/gtest.h" | 25 #include "testing/gtest/include/gtest/gtest.h" |
26 | 26 |
27 using ::testing::_; | 27 using ::testing::_; |
28 using ::testing::AtLeast; | 28 using ::testing::AtLeast; |
29 using ::testing::AnyNumber; | 29 using ::testing::AnyNumber; |
30 using ::testing::DoAll; | 30 using ::testing::DoAll; |
31 using ::testing::InSequence; | 31 using ::testing::InSequence; |
32 using ::testing::Mock; | 32 using ::testing::Mock; |
33 using ::testing::Return; | 33 using ::testing::Return; |
34 using content::BrowserThread; | 34 |
35 using content::BrowserThreadImpl; | 35 namespace content { |
36 | 36 |
37 // Id used to identify the capture session between renderer and | 37 // Id used to identify the capture session between renderer and |
38 // video_capture_host. | 38 // video_capture_host. |
39 static const int kDeviceId = 1; | 39 static const int kDeviceId = 1; |
40 // Id of a video capture device | 40 // Id of a video capture device |
41 static const media::VideoCaptureSessionId kTestFakeDeviceId = | 41 static const media::VideoCaptureSessionId kTestFakeDeviceId = |
42 media_stream::VideoCaptureManager::kStartOpenSessionId; | 42 VideoCaptureManager::kStartOpenSessionId; |
43 | 43 |
44 // Define to enable test where video is dumped to file. | 44 // Define to enable test where video is dumped to file. |
45 // #define DUMP_VIDEO | 45 // #define DUMP_VIDEO |
46 | 46 |
47 // Define to use a real video capture device. | 47 // Define to use a real video capture device. |
48 // #define TEST_REAL_CAPTURE_DEVICE | 48 // #define TEST_REAL_CAPTURE_DEVICE |
49 | 49 |
50 // Simple class used for dumping video to a file. This can be used for | 50 // Simple class used for dumping video to a file. This can be used for |
51 // verifying the output. | 51 // verifying the output. |
52 class DumpVideo { | 52 class DumpVideo { |
(...skipping 11 matching lines...) Expand all Loading... |
64 } | 64 } |
65 } | 65 } |
66 | 66 |
67 private: | 67 private: |
68 file_util::ScopedFILE file_; | 68 file_util::ScopedFILE file_; |
69 int expected_size_; | 69 int expected_size_; |
70 }; | 70 }; |
71 | 71 |
72 class MockVideoCaptureHost : public VideoCaptureHost { | 72 class MockVideoCaptureHost : public VideoCaptureHost { |
73 public: | 73 public: |
74 MockVideoCaptureHost(media_stream::MediaStreamManager* manager) | 74 MockVideoCaptureHost(MediaStreamManager* manager) |
75 : VideoCaptureHost(), | 75 : VideoCaptureHost(), |
76 return_buffers_(false), | 76 return_buffers_(false), |
77 dump_video_(false), | 77 dump_video_(false), |
78 manager_(manager) {} | 78 manager_(manager) {} |
79 | 79 |
80 // A list of mock methods. | 80 // A list of mock methods. |
81 MOCK_METHOD4(OnNewBufferCreated, | 81 MOCK_METHOD4(OnNewBufferCreated, |
82 void(int device_id, base::SharedMemoryHandle handle, | 82 void(int device_id, base::SharedMemoryHandle handle, |
83 int length, int buffer_id)); | 83 int length, int buffer_id)); |
84 MOCK_METHOD3(OnBufferFilled, | 84 MOCK_METHOD3(OnBufferFilled, |
85 void(int device_id, int buffer_id, base::Time timestamp)); | 85 void(int device_id, int buffer_id, base::Time timestamp)); |
86 MOCK_METHOD2(OnStateChanged, | 86 MOCK_METHOD2(OnStateChanged, void(int device_id, VideoCaptureState state)); |
87 void(int device_id, video_capture::State state)); | |
88 MOCK_METHOD1(OnDeviceInfo, void(int device_id)); | 87 MOCK_METHOD1(OnDeviceInfo, void(int device_id)); |
89 | 88 |
90 // Use class DumpVideo to write I420 video to file. | 89 // Use class DumpVideo to write I420 video to file. |
91 void SetDumpVideo(bool enable) { | 90 void SetDumpVideo(bool enable) { |
92 dump_video_ = enable; | 91 dump_video_ = enable; |
93 } | 92 } |
94 | 93 |
95 void SetReturnReceviedDibs(bool enable) { | 94 void SetReturnReceviedDibs(bool enable) { |
96 return_buffers_ = enable; | 95 return_buffers_ = enable; |
97 } | 96 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 IPC_MESSAGE_HANDLER(VideoCaptureMsg_StateChanged, OnStateChangedDispatch) | 136 IPC_MESSAGE_HANDLER(VideoCaptureMsg_StateChanged, OnStateChangedDispatch) |
138 IPC_MESSAGE_HANDLER(VideoCaptureMsg_DeviceInfo, OnDeviceInfoDispatch) | 137 IPC_MESSAGE_HANDLER(VideoCaptureMsg_DeviceInfo, OnDeviceInfoDispatch) |
139 IPC_MESSAGE_UNHANDLED(handled = false) | 138 IPC_MESSAGE_UNHANDLED(handled = false) |
140 IPC_END_MESSAGE_MAP() | 139 IPC_END_MESSAGE_MAP() |
141 EXPECT_TRUE(handled); | 140 EXPECT_TRUE(handled); |
142 | 141 |
143 delete message; | 142 delete message; |
144 return true; | 143 return true; |
145 } | 144 } |
146 | 145 |
147 virtual media_stream::VideoCaptureManager* GetVideoCaptureManager() OVERRIDE { | 146 virtual VideoCaptureManager* GetVideoCaptureManager() OVERRIDE { |
148 return manager_->video_capture_manager(); | 147 return manager_->video_capture_manager(); |
149 } | 148 } |
150 | 149 |
151 // These handler methods do minimal things and delegate to the mock methods. | 150 // These handler methods do minimal things and delegate to the mock methods. |
152 void OnNewBufferCreatedDispatch(int device_id, | 151 void OnNewBufferCreatedDispatch(int device_id, |
153 base::SharedMemoryHandle handle, | 152 base::SharedMemoryHandle handle, |
154 int length, int buffer_id) { | 153 int length, int buffer_id) { |
155 OnNewBufferCreated(device_id, handle, length, buffer_id); | 154 OnNewBufferCreated(device_id, handle, length, buffer_id); |
156 base::SharedMemory* dib = new base::SharedMemory(handle, false); | 155 base::SharedMemory* dib = new base::SharedMemory(handle, false); |
157 dib->Map(length); | 156 dib->Map(length); |
158 filled_dib_[buffer_id] = dib; | 157 filled_dib_[buffer_id] = dib; |
159 } | 158 } |
160 | 159 |
161 void OnBufferFilledDispatch(int device_id, int buffer_id, | 160 void OnBufferFilledDispatch(int device_id, int buffer_id, |
162 base::Time timestamp) { | 161 base::Time timestamp) { |
163 if (dump_video_) { | 162 if (dump_video_) { |
164 base::SharedMemory* dib = filled_dib_[buffer_id]; | 163 base::SharedMemory* dib = filled_dib_[buffer_id]; |
165 ASSERT_TRUE(dib != NULL); | 164 ASSERT_TRUE(dib != NULL); |
166 dumper_.NewVideoFrame(dib->memory()); | 165 dumper_.NewVideoFrame(dib->memory()); |
167 } | 166 } |
168 | 167 |
169 OnBufferFilled(device_id, buffer_id, timestamp); | 168 OnBufferFilled(device_id, buffer_id, timestamp); |
170 if (return_buffers_) { | 169 if (return_buffers_) { |
171 VideoCaptureHost::OnReceiveEmptyBuffer(device_id, buffer_id); | 170 VideoCaptureHost::OnReceiveEmptyBuffer(device_id, buffer_id); |
172 } | 171 } |
173 } | 172 } |
174 | 173 |
175 void OnStateChangedDispatch(int device_id, | 174 void OnStateChangedDispatch(int device_id, VideoCaptureState state) { |
176 video_capture::State state) { | |
177 OnStateChanged(device_id, state); | 175 OnStateChanged(device_id, state); |
178 } | 176 } |
179 | 177 |
180 void OnDeviceInfoDispatch(int device_id, | 178 void OnDeviceInfoDispatch(int device_id, |
181 media::VideoCaptureParams params) { | 179 media::VideoCaptureParams params) { |
182 if (dump_video_) { | 180 if (dump_video_) { |
183 dumper_.StartDump(params.width, params.height); | 181 dumper_.StartDump(params.width, params.height); |
184 } | 182 } |
185 OnDeviceInfo(device_id); | 183 OnDeviceInfo(device_id); |
186 } | 184 } |
187 | 185 |
188 std::map<int, base::SharedMemory*> filled_dib_; | 186 std::map<int, base::SharedMemory*> filled_dib_; |
189 bool return_buffers_; | 187 bool return_buffers_; |
190 bool dump_video_; | 188 bool dump_video_; |
191 DumpVideo dumper_; | 189 DumpVideo dumper_; |
192 media_stream::MediaStreamManager* manager_; | 190 MediaStreamManager* manager_; |
193 }; | 191 }; |
194 | 192 |
195 ACTION_P(ExitMessageLoop, message_loop) { | 193 ACTION_P(ExitMessageLoop, message_loop) { |
196 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); | 194 message_loop->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
197 } | 195 } |
198 | 196 |
199 class VideoCaptureHostTest : public testing::Test { | 197 class VideoCaptureHostTest : public testing::Test { |
200 public: | 198 public: |
201 VideoCaptureHostTest() {} | 199 VideoCaptureHostTest() {} |
202 | 200 |
203 protected: | 201 protected: |
204 virtual void SetUp() OVERRIDE { | 202 virtual void SetUp() OVERRIDE { |
205 // Create a message loop so VideoCaptureHostTest can use it. | 203 // Create a message loop so VideoCaptureHostTest can use it. |
206 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); | 204 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); |
207 | 205 |
208 // MediaStreamManager must be created on the IO thread. | 206 // MediaStreamManager must be created on the IO thread. |
209 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, | 207 io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
210 message_loop_.get())); | 208 message_loop_.get())); |
211 | 209 |
212 // Create our own MediaStreamManager. | 210 // Create our own MediaStreamManager. |
213 audio_manager_.reset(media::AudioManager::Create()); | 211 audio_manager_.reset(media::AudioManager::Create()); |
214 media_stream_manager_.reset( | 212 media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get())); |
215 new media_stream::MediaStreamManager(audio_manager_.get())); | |
216 #ifndef TEST_REAL_CAPTURE_DEVICE | 213 #ifndef TEST_REAL_CAPTURE_DEVICE |
217 media_stream_manager_->UseFakeDevice(); | 214 media_stream_manager_->UseFakeDevice(); |
218 #endif | 215 #endif |
219 | 216 |
220 host_ = new MockVideoCaptureHost(media_stream_manager_.get()); | 217 host_ = new MockVideoCaptureHost(media_stream_manager_.get()); |
221 | 218 |
222 // Simulate IPC channel connected. | 219 // Simulate IPC channel connected. |
223 host_->OnChannelConnected(base::GetCurrentProcId()); | 220 host_->OnChannelConnected(base::GetCurrentProcId()); |
224 } | 221 } |
225 | 222 |
226 virtual void TearDown() OVERRIDE { | 223 virtual void TearDown() OVERRIDE { |
227 // Verifies and removes the expectations on host_ and | 224 // Verifies and removes the expectations on host_ and |
228 // returns true iff successful. | 225 // returns true iff successful. |
229 Mock::VerifyAndClearExpectations(host_); | 226 Mock::VerifyAndClearExpectations(host_); |
230 | 227 |
231 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, | 228 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, |
232 video_capture::kStopped)) | 229 VIDEO_CAPTURE_STATE_STOPPED)) |
233 .Times(AnyNumber()); | 230 .Times(AnyNumber()); |
234 | 231 |
235 // Simulate closing the IPC channel. | 232 // Simulate closing the IPC channel. |
236 host_->OnChannelClosing(); | 233 host_->OnChannelClosing(); |
237 | 234 |
238 // Release the reference to the mock object. The object will be destructed | 235 // Release the reference to the mock object. The object will be destructed |
239 // on message_loop_. | 236 // on message_loop_. |
240 host_ = NULL; | 237 host_ = NULL; |
241 | 238 |
242 // We need to continue running message_loop_ to complete all destructions. | 239 // We need to continue running message_loop_ to complete all destructions. |
243 message_loop_->RunAllPending(); | 240 message_loop_->RunAllPending(); |
244 | 241 |
245 // Delete the IO message loop. This will cause the MediaStreamManager to be | 242 // Delete the IO message loop. This will cause the MediaStreamManager to be |
246 // notified so it will stop its device thread and device managers. | 243 // notified so it will stop its device thread and device managers. |
247 message_loop_.reset(); | 244 message_loop_.reset(); |
248 } | 245 } |
249 | 246 |
250 void StartCapture() { | 247 void StartCapture() { |
251 InSequence s; | 248 InSequence s; |
252 // 1. First - get info about the new resolution | 249 // 1. First - get info about the new resolution |
253 EXPECT_CALL(*host_, OnDeviceInfo(kDeviceId)); | 250 EXPECT_CALL(*host_, OnDeviceInfo(kDeviceId)); |
254 | 251 |
255 // 2. Change state to started | 252 // 2. Change state to started |
256 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, | 253 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, |
257 video_capture::kStarted)); | 254 VIDEO_CAPTURE_STATE_STARTED)); |
258 | 255 |
259 // 3. Newly created buffers will arrive. | 256 // 3. Newly created buffers will arrive. |
260 EXPECT_CALL(*host_, OnNewBufferCreated(kDeviceId, _, _, _)) | 257 EXPECT_CALL(*host_, OnNewBufferCreated(kDeviceId, _, _, _)) |
261 .Times(AnyNumber()) | 258 .Times(AnyNumber()) |
262 .WillRepeatedly(Return()); | 259 .WillRepeatedly(Return()); |
263 | 260 |
264 // 4. First filled buffer will arrive. | 261 // 4. First filled buffer will arrive. |
265 EXPECT_CALL(*host_, OnBufferFilled(kDeviceId, _, _)) | 262 EXPECT_CALL(*host_, OnBufferFilled(kDeviceId, _, _)) |
266 .Times(AnyNumber()) | 263 .Times(AnyNumber()) |
267 .WillOnce(ExitMessageLoop(message_loop_.get())); | 264 .WillOnce(ExitMessageLoop(message_loop_.get())); |
268 | 265 |
269 media::VideoCaptureParams params; | 266 media::VideoCaptureParams params; |
270 params.width = 352; | 267 params.width = 352; |
271 params.height = 288; | 268 params.height = 288; |
272 params.frame_per_second = 30; | 269 params.frame_per_second = 30; |
273 params.session_id = kTestFakeDeviceId; | 270 params.session_id = kTestFakeDeviceId; |
274 host_->OnStartCapture(kDeviceId, params); | 271 host_->OnStartCapture(kDeviceId, params); |
275 message_loop_->Run(); | 272 message_loop_->Run(); |
276 } | 273 } |
277 | 274 |
278 #ifdef DUMP_VIDEO | 275 #ifdef DUMP_VIDEO |
279 void CaptureAndDumpVideo(int width, int heigt, int frame_rate) { | 276 void CaptureAndDumpVideo(int width, int heigt, int frame_rate) { |
280 InSequence s; | 277 InSequence s; |
281 // 1. First - get info about the new resolution | 278 // 1. First - get info about the new resolution |
282 EXPECT_CALL(*host_, OnDeviceInfo(kDeviceId)); | 279 EXPECT_CALL(*host_, OnDeviceInfo(kDeviceId)); |
283 | 280 |
284 // 2. Change state to started | 281 // 2. Change state to started |
285 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, | 282 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, VIDEO_CAPTURE_STATE_STARTED)); |
286 video_capture::kStarted)); | |
287 | 283 |
288 // 3. First filled buffer will arrive. | 284 // 3. First filled buffer will arrive. |
289 EXPECT_CALL(*host_, OnBufferFilled(kDeviceId, _, _)) | 285 EXPECT_CALL(*host_, OnBufferFilled(kDeviceId, _, _)) |
290 .Times(AnyNumber()) | 286 .Times(AnyNumber()) |
291 .WillOnce(ExitMessageLoop(message_loop_.get())); | 287 .WillOnce(ExitMessageLoop(message_loop_.get())); |
292 | 288 |
293 media::VideoCaptureParams params; | 289 media::VideoCaptureParams params; |
294 params.width = width; | 290 params.width = width; |
295 params.height = heigt; | 291 params.height = heigt; |
296 params.frame_per_second = frame_rate; | 292 params.frame_per_second = frame_rate; |
297 params.session_id = kTestFakeDeviceId; | 293 params.session_id = kTestFakeDeviceId; |
298 host_->SetDumpVideo(true); | 294 host_->SetDumpVideo(true); |
299 host_->OnStartCapture(kDeviceId, params); | 295 host_->OnStartCapture(kDeviceId, params); |
300 message_loop_->Run(); | 296 message_loop_->Run(); |
301 } | 297 } |
302 #endif | 298 #endif |
303 | 299 |
304 void StopCapture() { | 300 void StopCapture() { |
305 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, | 301 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, |
306 video_capture::kStopped)) | 302 VIDEO_CAPTURE_STATE_STOPPED)) |
307 .WillOnce(ExitMessageLoop(message_loop_.get())); | 303 .WillOnce(ExitMessageLoop(message_loop_.get())); |
308 | 304 |
309 host_->OnStopCapture(kDeviceId); | 305 host_->OnStopCapture(kDeviceId); |
310 host_->SetReturnReceviedDibs(true); | 306 host_->SetReturnReceviedDibs(true); |
311 host_->ReturnReceivedDibs(kDeviceId); | 307 host_->ReturnReceivedDibs(kDeviceId); |
312 | 308 |
313 message_loop_->Run(); | 309 message_loop_->Run(); |
314 | 310 |
315 host_->SetReturnReceviedDibs(false); | 311 host_->SetReturnReceviedDibs(false); |
316 // Expect the VideoCaptureDevice has been stopped | 312 // Expect the VideoCaptureDevice has been stopped |
317 EXPECT_EQ(0u, host_->entries_.size()); | 313 EXPECT_EQ(0u, host_->entries_.size()); |
318 } | 314 } |
319 | 315 |
320 void NotifyPacketReady() { | 316 void NotifyPacketReady() { |
321 EXPECT_CALL(*host_, OnBufferFilled(kDeviceId, _, _)) | 317 EXPECT_CALL(*host_, OnBufferFilled(kDeviceId, _, _)) |
322 .Times(AnyNumber()) | 318 .Times(AnyNumber()) |
323 .WillOnce(ExitMessageLoop(message_loop_.get())) | 319 .WillOnce(ExitMessageLoop(message_loop_.get())) |
324 .RetiresOnSaturation(); | 320 .RetiresOnSaturation(); |
325 message_loop_->Run(); | 321 message_loop_->Run(); |
326 } | 322 } |
327 | 323 |
328 void ReturnReceivedPackets() { | 324 void ReturnReceivedPackets() { |
329 host_->ReturnReceivedDibs(kDeviceId); | 325 host_->ReturnReceivedDibs(kDeviceId); |
330 } | 326 } |
331 | 327 |
332 void SimulateError() { | 328 void SimulateError() { |
333 // Expect a change state to error state sent through IPC. | 329 // Expect a change state to error state sent through IPC. |
334 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, | 330 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, VIDEO_CAPTURE_STATE_ERROR)) |
335 video_capture::kError)) | |
336 .Times(1); | 331 .Times(1); |
337 VideoCaptureControllerID id(kDeviceId); | 332 VideoCaptureControllerID id(kDeviceId); |
338 host_->OnError(id); | 333 host_->OnError(id); |
339 // Wait for the error callback. | 334 // Wait for the error callback. |
340 message_loop_->RunAllPending(); | 335 message_loop_->RunAllPending(); |
341 } | 336 } |
342 | 337 |
343 scoped_refptr<MockVideoCaptureHost> host_; | 338 scoped_refptr<MockVideoCaptureHost> host_; |
344 | 339 |
345 private: | 340 private: |
346 scoped_ptr<MessageLoop> message_loop_; | 341 scoped_ptr<MessageLoop> message_loop_; |
347 scoped_ptr<BrowserThreadImpl> io_thread_; | 342 scoped_ptr<BrowserThreadImpl> io_thread_; |
348 scoped_ptr<media::AudioManager> audio_manager_; | 343 scoped_ptr<media::AudioManager> audio_manager_; |
349 scoped_ptr<media_stream::MediaStreamManager> media_stream_manager_; | 344 scoped_ptr<MediaStreamManager> media_stream_manager_; |
350 | 345 |
351 DISALLOW_COPY_AND_ASSIGN(VideoCaptureHostTest); | 346 DISALLOW_COPY_AND_ASSIGN(VideoCaptureHostTest); |
352 }; | 347 }; |
353 | 348 |
354 TEST_F(VideoCaptureHostTest, StartCapture) { | 349 TEST_F(VideoCaptureHostTest, StartCapture) { |
355 StartCapture(); | 350 StartCapture(); |
356 } | 351 } |
357 | 352 |
358 TEST_F(VideoCaptureHostTest, StartCapturePlayStop) { | 353 TEST_F(VideoCaptureHostTest, StartCapturePlayStop) { |
359 StartCapture(); | 354 StartCapture(); |
360 NotifyPacketReady(); | 355 NotifyPacketReady(); |
361 NotifyPacketReady(); | 356 NotifyPacketReady(); |
362 ReturnReceivedPackets(); | 357 ReturnReceivedPackets(); |
363 StopCapture(); | 358 StopCapture(); |
364 } | 359 } |
365 | 360 |
366 TEST_F(VideoCaptureHostTest, StartCaptureErrorStop) { | 361 TEST_F(VideoCaptureHostTest, StartCaptureErrorStop) { |
367 StartCapture(); | 362 StartCapture(); |
368 SimulateError(); | 363 SimulateError(); |
369 StopCapture(); | 364 StopCapture(); |
370 } | 365 } |
371 | 366 |
372 TEST_F(VideoCaptureHostTest, StartCaptureError) { | 367 TEST_F(VideoCaptureHostTest, StartCaptureError) { |
373 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, | 368 EXPECT_CALL(*host_, OnStateChanged(kDeviceId, |
374 video_capture::kStopped)) | 369 VIDEO_CAPTURE_STATE_STOPPED)) |
375 .Times(0); | 370 .Times(0); |
376 StartCapture(); | 371 StartCapture(); |
377 NotifyPacketReady(); | 372 NotifyPacketReady(); |
378 SimulateError(); | 373 SimulateError(); |
379 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(200)); | 374 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(200)); |
380 } | 375 } |
381 | 376 |
382 #ifdef DUMP_VIDEO | 377 #ifdef DUMP_VIDEO |
383 TEST_F(VideoCaptureHostTest, CaptureAndDumpVideoVga) { | 378 TEST_F(VideoCaptureHostTest, CaptureAndDumpVideoVga) { |
384 CaptureAndDumpVideo(640, 480, 30); | 379 CaptureAndDumpVideo(640, 480, 30); |
385 } | 380 } |
386 TEST_F(VideoCaptureHostTest, CaptureAndDump720P) { | 381 TEST_F(VideoCaptureHostTest, CaptureAndDump720P) { |
387 CaptureAndDumpVideo(1280, 720, 30); | 382 CaptureAndDumpVideo(1280, 720, 30); |
388 } | 383 } |
389 #endif | 384 #endif |
| 385 |
| 386 } // namespace content |
OLD | NEW |