| Index: media/capture/video/linux/v4l2_capture_delegate.cc
|
| diff --git a/media/capture/video/linux/v4l2_capture_delegate.cc b/media/capture/video/linux/v4l2_capture_delegate.cc
|
| index aecebccdde8abefdf15175505500ff8d3247e8a0..9adeed35926aff42f4fdcfba19c5ba1ad035b00c 100644
|
| --- a/media/capture/video/linux/v4l2_capture_delegate.cc
|
| +++ b/media/capture/video/linux/v4l2_capture_delegate.cc
|
| @@ -563,12 +563,18 @@ void V4L2CaptureDelegate::DoCapture() {
|
| const scoped_refptr<BufferTracker>& buffer_tracker =
|
| buffer_tracker_pool_[buffer.index];
|
|
|
| - base::TimeDelta timestamp =
|
| - base::TimeDelta::FromSeconds(buffer.timestamp.tv_sec) +
|
| - base::TimeDelta::FromMicroseconds(buffer.timestamp.tv_usec);
|
| - client_->OnIncomingCapturedData(
|
| - buffer_tracker->start(), buffer_tracker->payload_size(),
|
| - capture_format_, rotation_, base::TimeTicks::Now(), timestamp);
|
| + // There's a wide-spread issue where the kernel does not report accurate,
|
| + // monotonically-increasing timestamps in the v4l2_buffer::timestamp
|
| + // field (goo.gl/Nlfamz).
|
| + // Until this issue is fixed, just use the reference clock as a source of
|
| + // media timestamps.
|
| + const base::TimeTicks now = base::TimeTicks::Now();
|
| + if (first_ref_time_.is_null())
|
| + first_ref_time_ = now;
|
| + const base::TimeDelta timestamp = now - first_ref_time_;
|
| + client_->OnIncomingCapturedData(buffer_tracker->start(),
|
| + buffer_tracker->payload_size(),
|
| + capture_format_, rotation_, now, timestamp);
|
|
|
| while (!take_photo_callbacks_.empty()) {
|
| VideoCaptureDevice::TakePhotoCallback cb =
|
|
|