| Index: remoting/protocol/video_frame_pump.cc
|
| diff --git a/remoting/protocol/video_frame_pump.cc b/remoting/protocol/video_frame_pump.cc
|
| index c7c2c11b145e70e480359c2e6ccb6205949b0295..b9a94baf22f23d6bab7c9e3b90da453d4aed7c53 100644
|
| --- a/remoting/protocol/video_frame_pump.cc
|
| +++ b/remoting/protocol/video_frame_pump.cc
|
| @@ -69,19 +69,17 @@ VideoFramePump::~VideoFramePump() {
|
| encode_task_runner_->DeleteSoon(FROM_HERE, encoder_.release());
|
| }
|
|
|
| -void VideoFramePump::Pause(bool pause) {
|
| +void VideoFramePump::SetEventTimestampsSource(
|
| + scoped_refptr<InputEventTimestampsSource> event_timestamps_source) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - capture_scheduler_.Pause(pause);
|
| + event_timestamps_source_ = event_timestamps_source;
|
| }
|
|
|
| -void VideoFramePump::OnInputEventReceived(int64_t event_timestamp) {
|
| +void VideoFramePump::Pause(bool pause) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - if (!next_frame_timestamps_)
|
| - next_frame_timestamps_.reset(new FrameTimestamps());
|
| - next_frame_timestamps_->input_event_client_timestamp = event_timestamp;
|
| - next_frame_timestamps_->input_event_received_time = base::TimeTicks::Now();
|
| + capture_scheduler_.Pause(pause);
|
| }
|
|
|
| void VideoFramePump::SetLosslessEncode(bool want_lossless) {
|
| @@ -140,15 +138,14 @@ void VideoFramePump::OnCaptureResult(
|
| void VideoFramePump::CaptureNextFrame() {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - // |next_frame_timestamps_| is not set if no input events were received since
|
| - // the previous frame. In that case create FrameTimestamps instance without
|
| - // setting |input_event_client_timestamp| and |input_event_received_time|.
|
| - if (!next_frame_timestamps_)
|
| - next_frame_timestamps_.reset(new FrameTimestamps());
|
| -
|
| - captured_frame_timestamps_ = std::move(next_frame_timestamps_);
|
| + captured_frame_timestamps_.reset(new FrameTimestamps());
|
| captured_frame_timestamps_->capture_started_time = base::TimeTicks::Now();
|
|
|
| + if (event_timestamps_source_) {
|
| + captured_frame_timestamps_->input_event_timestamps =
|
| + event_timestamps_source_->TakeLastEventTimestamps();
|
| + }
|
| +
|
| capturer_->Capture(webrtc::DesktopRegion());
|
| }
|
|
|
| @@ -209,12 +206,13 @@ void VideoFramePump::SendPacket(std::unique_ptr<PacketWithTimestamps> packet) {
|
|
|
| void VideoFramePump::UpdateFrameTimers(VideoPacket* packet,
|
| FrameTimestamps* timestamps) {
|
| - if (!timestamps->input_event_received_time.is_null()) {
|
| - packet->set_capture_pending_time_ms((timestamps->capture_started_time -
|
| - timestamps->input_event_received_time)
|
| - .InMilliseconds());
|
| + if (!timestamps->input_event_timestamps.is_null()) {
|
| + packet->set_capture_pending_time_ms(
|
| + (timestamps->capture_started_time -
|
| + timestamps->input_event_timestamps.host_timestamp)
|
| + .InMilliseconds());
|
| packet->set_latest_event_timestamp(
|
| - timestamps->input_event_client_timestamp);
|
| + timestamps->input_event_timestamps.client_timestamp.ToInternalValue());
|
| }
|
|
|
| packet->set_capture_overhead_time_ms(
|
|
|