| Index: media/video/capture/file_video_capture_device.cc
 | 
| diff --git a/media/video/capture/file_video_capture_device.cc b/media/video/capture/file_video_capture_device.cc
 | 
| index 5584c0b20931b0d8ae10e23600627a838154cafd..5a45b4a065cb7f82a79a7c1999d8465834bd8af7 100644
 | 
| --- a/media/video/capture/file_video_capture_device.cc
 | 
| +++ b/media/video/capture/file_video_capture_device.cc
 | 
| @@ -210,6 +210,7 @@ void FileVideoCaptureDevice::OnStopAndDeAllocate() {
 | 
|    current_byte_index_ = 0;
 | 
|    first_frame_byte_index_ = 0;
 | 
|    frame_size_ = 0;
 | 
| +  next_frame_time_ = base::TimeTicks();
 | 
|    video_frame_.reset();
 | 
|  }
 | 
|  
 | 
| @@ -217,7 +218,6 @@ void FileVideoCaptureDevice::OnCaptureTask() {
 | 
|    DCHECK_EQ(capture_thread_.message_loop(), base::MessageLoop::current());
 | 
|    if (!client_)
 | 
|      return;
 | 
| -  const base::TimeTicks timestamp_before_reading = base::TimeTicks::Now();
 | 
|    int result = file_.Read(current_byte_index_,
 | 
|                            reinterpret_cast<char*>(video_frame_.get()),
 | 
|                            frame_size_);
 | 
| @@ -236,25 +236,25 @@ void FileVideoCaptureDevice::OnCaptureTask() {
 | 
|    }
 | 
|  
 | 
|    // Give the captured frame to the client.
 | 
| +  const base::TimeTicks current_time = base::TimeTicks::Now();
 | 
|    client_->OnIncomingCapturedData(video_frame_.get(),
 | 
|                                    frame_size_,
 | 
|                                    capture_format_,
 | 
|                                    0,
 | 
| -                                  base::TimeTicks::Now());
 | 
| +                                  current_time);
 | 
|    // Reschedule next CaptureTask.
 | 
|    const base::TimeDelta frame_interval =
 | 
|        base::TimeDelta::FromMicroseconds(1E6 / capture_format_.frame_rate);
 | 
| -  base::TimeDelta next_on_capture_timedelta = frame_interval -
 | 
| -      (base::TimeTicks::Now() - timestamp_before_reading);
 | 
| -  if (next_on_capture_timedelta.InMilliseconds() < 0) {
 | 
| -    DLOG(WARNING) << "Frame reading took longer than the frame interval.";
 | 
| -    next_on_capture_timedelta = frame_interval;
 | 
| +  if (next_frame_time_.is_null()) {
 | 
| +    next_frame_time_ = current_time + frame_interval;
 | 
| +  } else {
 | 
| +    next_frame_time_ += frame_interval;
 | 
|    }
 | 
|    base::MessageLoop::current()->PostDelayedTask(
 | 
|        FROM_HERE,
 | 
|        base::Bind(&FileVideoCaptureDevice::OnCaptureTask,
 | 
|                   base::Unretained(this)),
 | 
| -      next_on_capture_timedelta);
 | 
| +      next_frame_time_ - current_time);
 | 
|  }
 | 
|  
 | 
|  }  // namespace media
 | 
| 
 |