| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "remoting/host/video_scheduler.h" | 5 #include "remoting/host/video_scheduler.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 271 if (!cursor_stub_) | 271 if (!cursor_stub_) |
| 272 return; | 272 return; |
| 273 | 273 |
| 274 cursor_stub_->SetCursorShape(*cursor_shape); | 274 cursor_stub_->SetCursorShape(*cursor_shape); |
| 275 } | 275 } |
| 276 | 276 |
| 277 // Encoder thread -------------------------------------------------------------- | 277 // Encoder thread -------------------------------------------------------------- |
| 278 | 278 |
| 279 void VideoScheduler::EncodeFrame( | 279 void VideoScheduler::EncodeFrame( |
| 280 scoped_ptr<webrtc::DesktopFrame> frame, | 280 scoped_ptr<webrtc::DesktopFrame> frame, |
| 281 int sequence_number) { | 281 int64 sequence_number) { |
| 282 DCHECK(encode_task_runner_->BelongsToCurrentThread()); | 282 DCHECK(encode_task_runner_->BelongsToCurrentThread()); |
| 283 | 283 |
| 284 // If there is nothing to encode then send an empty keep-alive packet. | 284 // If there is nothing to encode then send an empty keep-alive packet. |
| 285 if (!frame || frame->updated_region().is_empty()) { | 285 if (!frame || frame->updated_region().is_empty()) { |
| 286 scoped_ptr<VideoPacket> packet(new VideoPacket()); | 286 scoped_ptr<VideoPacket> packet(new VideoPacket()); |
| 287 packet->set_flags(VideoPacket::LAST_PARTITION); | 287 packet->set_flags(VideoPacket::LAST_PARTITION); |
| 288 packet->set_sequence_number(sequence_number); | 288 packet->set_client_sequence_number(sequence_number); |
| 289 network_task_runner_->PostTask( | 289 network_task_runner_->PostTask( |
| 290 FROM_HERE, base::Bind(&VideoScheduler::SendVideoPacket, this, | 290 FROM_HERE, base::Bind(&VideoScheduler::SendVideoPacket, this, |
| 291 base::Passed(&packet))); | 291 base::Passed(&packet))); |
| 292 capture_task_runner_->DeleteSoon(FROM_HERE, frame.release()); | 292 capture_task_runner_->DeleteSoon(FROM_HERE, frame.release()); |
| 293 return; | 293 return; |
| 294 } | 294 } |
| 295 | 295 |
| 296 encoder_->Encode( | 296 encoder_->Encode( |
| 297 frame.get(), base::Bind(&VideoScheduler::EncodedDataAvailableCallback, | 297 frame.get(), base::Bind(&VideoScheduler::EncodedDataAvailableCallback, |
| 298 this, sequence_number)); | 298 this, sequence_number)); |
| 299 capture_task_runner_->DeleteSoon(FROM_HERE, frame.release()); | 299 capture_task_runner_->DeleteSoon(FROM_HERE, frame.release()); |
| 300 } | 300 } |
| 301 | 301 |
| 302 void VideoScheduler::EncodedDataAvailableCallback( | 302 void VideoScheduler::EncodedDataAvailableCallback( |
| 303 int sequence_number, | 303 int64 sequence_number, |
| 304 scoped_ptr<VideoPacket> packet) { | 304 scoped_ptr<VideoPacket> packet) { |
| 305 DCHECK(encode_task_runner_->BelongsToCurrentThread()); | 305 DCHECK(encode_task_runner_->BelongsToCurrentThread()); |
| 306 | 306 |
| 307 packet->set_sequence_number(sequence_number); | 307 packet->set_client_sequence_number(sequence_number); |
| 308 | 308 |
| 309 bool last = (packet->flags() & VideoPacket::LAST_PACKET) != 0; | 309 bool last = (packet->flags() & VideoPacket::LAST_PACKET) != 0; |
| 310 if (last) { | 310 if (last) { |
| 311 scheduler_.RecordEncodeTime( | 311 scheduler_.RecordEncodeTime( |
| 312 base::TimeDelta::FromMilliseconds(packet->encode_time_ms())); | 312 base::TimeDelta::FromMilliseconds(packet->encode_time_ms())); |
| 313 } | 313 } |
| 314 | 314 |
| 315 network_task_runner_->PostTask( | 315 network_task_runner_->PostTask( |
| 316 FROM_HERE, base::Bind(&VideoScheduler::SendVideoPacket, this, | 316 FROM_HERE, base::Bind(&VideoScheduler::SendVideoPacket, this, |
| 317 base::Passed(&packet))); | 317 base::Passed(&packet))); |
| 318 } | 318 } |
| 319 | 319 |
| 320 } // namespace remoting | 320 } // namespace remoting |
| OLD | NEW |