| Index: webrtc/media/base/videocapturer.h
|
| diff --git a/webrtc/media/base/videocapturer.h b/webrtc/media/base/videocapturer.h
|
| index 329ba086b90dfe1139c6f83cdd41b291af38540f..2b8d989b0c8036819f872fc07e00e0aa2bda2413 100644
|
| --- a/webrtc/media/base/videocapturer.h
|
| +++ b/webrtc/media/base/videocapturer.h
|
| @@ -225,15 +225,30 @@ class VideoCapturer : public sigslot::has_slots<>,
|
| // Reports the appropriate frame size after adaptation. Returns true
|
| // if a frame is wanted. Returns false if there are no interested
|
| // sinks, or if the VideoAdapter decides to drop the frame.
|
| +
|
| + // This function also implements timestamp translation/filtering.
|
| + // |camera_time_ns| is the camera's timestamp for the captured
|
| + // frame; it is expected to have good accuracy, but it may use an
|
| + // arbitrary epoch and a small possibly free-running with a frequency
|
| + // slightly different from the system clock. |system_time_us| is the
|
| + // monotonic system time (in the same scale as rtc::TimeMicros) when
|
| + // the frame was captured; the application is expected to read the
|
| + // system time as soon as possible after frame capture, but it may
|
| + // suffer scheduling jitter or poor system clock resolution. The
|
| + // output |translated_camera_time_us| is a combined timestamp,
|
| + // taking advantage of the supposedly higher accuracy in the camera
|
| + // timestamp, but using the same epoch and frequency as system time.
|
| bool AdaptFrame(int width,
|
| int height,
|
| - int64_t capture_time_ns,
|
| + int64_t camera_time_us,
|
| + int64_t system_time_us,
|
| int* out_width,
|
| int* out_height,
|
| int* crop_width,
|
| int* crop_height,
|
| int* crop_x,
|
| - int* crop_y);
|
| + int* crop_y,
|
| + int64_t* translated_camera_time_us);
|
|
|
| // Callback attached to SignalFrameCaptured where SignalVideoFrames is called.
|
| void OnFrameCaptured(VideoCapturer* video_capturer,
|
| @@ -284,6 +299,9 @@ class VideoCapturer : public sigslot::has_slots<>,
|
|
|
| void UpdateInputSize(int width, int height);
|
|
|
| + // Update the estimated offset between camera time and system monotonic time.
|
| + void UpdateOffset(int64_t camera_time_us, int64_t system_time_us);
|
| +
|
| rtc::ThreadChecker thread_checker_;
|
| std::string id_;
|
| CaptureState capture_state_;
|
| @@ -310,6 +328,13 @@ class VideoCapturer : public sigslot::has_slots<>,
|
| // Whether capturer should apply rotation to the frame before signaling it.
|
| bool apply_rotation_;
|
|
|
| + // State for the timestamp translation.
|
| + int frames_seen_;
|
| + // Previous camera time seen, used to detect jumps in camera time.
|
| + int64_t prev_camera_time_us_;
|
| + // Estimated offset between camera time and system monotonic time.
|
| + int64_t offset_us_;
|
| +
|
| RTC_DISALLOW_COPY_AND_ASSIGN(VideoCapturer);
|
| };
|
|
|
|
|