| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "media/capture/video/file_video_capture_device.h" | 5 #include "media/capture/video/file_video_capture_device.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 return file_parser; | 292 return file_parser; |
| 293 } | 293 } |
| 294 | 294 |
| 295 if (!file_parser->Initialize(video_format)) { | 295 if (!file_parser->Initialize(video_format)) { |
| 296 file_parser.reset(); | 296 file_parser.reset(); |
| 297 } | 297 } |
| 298 return file_parser; | 298 return file_parser; |
| 299 } | 299 } |
| 300 | 300 |
| 301 FileVideoCaptureDevice::FileVideoCaptureDevice(const base::FilePath& file_path) | 301 FileVideoCaptureDevice::FileVideoCaptureDevice(const base::FilePath& file_path) |
| 302 : capture_thread_("CaptureThread"), file_path_(file_path) {} | 302 : capture_thread_("CaptureThread"), file_path_(file_path), capture_(0) {} |
| 303 | 303 |
| 304 FileVideoCaptureDevice::~FileVideoCaptureDevice() { | 304 FileVideoCaptureDevice::~FileVideoCaptureDevice() { |
| 305 DCHECK(thread_checker_.CalledOnValidThread()); | 305 DCHECK(thread_checker_.CalledOnValidThread()); |
| 306 // Check if the thread is running. | 306 // Check if the thread is running. |
| 307 // This means that the device have not been DeAllocated properly. | 307 // This means that the device have not been DeAllocated properly. |
| 308 CHECK(!capture_thread_.IsRunning()); | 308 CHECK(!capture_thread_.IsRunning()); |
| 309 } | 309 } |
| 310 | 310 |
| 311 void FileVideoCaptureDevice::AllocateAndStart( | 311 void FileVideoCaptureDevice::AllocateAndStart( |
| 312 const VideoCaptureParams& params, | 312 const VideoCaptureParams& params, |
| (...skipping 27 matching lines...) Expand all Loading... |
| 340 | 340 |
| 341 DCHECK(!file_parser_); | 341 DCHECK(!file_parser_); |
| 342 file_parser_ = GetVideoFileParser(file_path_, &capture_format_); | 342 file_parser_ = GetVideoFileParser(file_path_, &capture_format_); |
| 343 if (!file_parser_) { | 343 if (!file_parser_) { |
| 344 client_->OnError(FROM_HERE, "Could not open Video file"); | 344 client_->OnError(FROM_HERE, "Could not open Video file"); |
| 345 return; | 345 return; |
| 346 } | 346 } |
| 347 | 347 |
| 348 DVLOG(1) << "Opened video file " << capture_format_.frame_size.ToString() | 348 DVLOG(1) << "Opened video file " << capture_format_.frame_size.ToString() |
| 349 << ", fps: " << capture_format_.frame_rate; | 349 << ", fps: " << capture_format_.frame_rate; |
| 350 client_->OnStarted(); |
| 351 capture_ = true; |
| 350 | 352 |
| 351 capture_thread_.task_runner()->PostTask( | 353 capture_thread_.task_runner()->PostTask( |
| 352 FROM_HERE, base::Bind(&FileVideoCaptureDevice::OnCaptureTask, | 354 FROM_HERE, base::Bind(&FileVideoCaptureDevice::OnCaptureTask, |
| 353 base::Unretained(this))); | 355 base::Unretained(this))); |
| 354 } | 356 } |
| 355 | 357 |
| 356 void FileVideoCaptureDevice::OnStopAndDeAllocate() { | 358 void FileVideoCaptureDevice::OnStopAndDeAllocate() { |
| 357 DCHECK(capture_thread_.task_runner()->BelongsToCurrentThread()); | 359 DCHECK(capture_thread_.task_runner()->BelongsToCurrentThread()); |
| 360 capture_ = false; |
| 358 file_parser_.reset(); | 361 file_parser_.reset(); |
| 359 client_.reset(); | 362 client_.reset(); |
| 360 next_frame_time_ = base::TimeTicks(); | 363 next_frame_time_ = base::TimeTicks(); |
| 361 } | 364 } |
| 362 | 365 |
| 363 void FileVideoCaptureDevice::OnCaptureTask() { | 366 void FileVideoCaptureDevice::OnCaptureTask() { |
| 364 DCHECK(capture_thread_.task_runner()->BelongsToCurrentThread()); | 367 DCHECK(capture_thread_.task_runner()->BelongsToCurrentThread()); |
| 365 if (!client_) | 368 if (!client_ || !capture_) |
| 366 return; | 369 return; |
| 367 | 370 |
| 368 // Give the captured frame to the client. | 371 // Give the captured frame to the client. |
| 369 int frame_size = 0; | 372 int frame_size = 0; |
| 370 const uint8_t* frame_ptr = file_parser_->GetNextFrame(&frame_size); | 373 const uint8_t* frame_ptr = file_parser_->GetNextFrame(&frame_size); |
| 371 DCHECK(frame_size); | 374 DCHECK(frame_size); |
| 372 CHECK(frame_ptr); | 375 CHECK(frame_ptr); |
| 373 const base::TimeTicks current_time = base::TimeTicks::Now(); | 376 const base::TimeTicks current_time = base::TimeTicks::Now(); |
| 374 if (first_ref_time_.is_null()) | 377 if (first_ref_time_.is_null()) |
| 375 first_ref_time_ = current_time; | 378 first_ref_time_ = current_time; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 387 if (next_frame_time_ < current_time) | 390 if (next_frame_time_ < current_time) |
| 388 next_frame_time_ = current_time; | 391 next_frame_time_ = current_time; |
| 389 } | 392 } |
| 390 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 393 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 391 FROM_HERE, base::Bind(&FileVideoCaptureDevice::OnCaptureTask, | 394 FROM_HERE, base::Bind(&FileVideoCaptureDevice::OnCaptureTask, |
| 392 base::Unretained(this)), | 395 base::Unretained(this)), |
| 393 next_frame_time_ - current_time); | 396 next_frame_time_ - current_time); |
| 394 } | 397 } |
| 395 | 398 |
| 396 } // namespace media | 399 } // namespace media |
| OLD | NEW |