| Index: remoting/host/video_scheduler.cc
|
| diff --git a/remoting/host/video_scheduler.cc b/remoting/host/video_scheduler.cc
|
| index 883166b39ce5c4b1c8ad7c18775d2c302262a50a..3b2973314d7a4c613649a2a8c8fda91f8837b034 100644
|
| --- a/remoting/host/video_scheduler.cc
|
| +++ b/remoting/host/video_scheduler.cc
|
| @@ -295,19 +295,14 @@ void VideoScheduler::EncodeFrame(
|
| return;
|
| }
|
|
|
| - encoder_->Encode(
|
| - frame.get(), base::Bind(&VideoScheduler::EncodedDataAvailableCallback,
|
| - this, sequence_number));
|
| - capture_task_runner_->DeleteSoon(FROM_HERE, frame.release());
|
| -}
|
| -
|
| -void VideoScheduler::EncodedDataAvailableCallback(
|
| - int64 sequence_number,
|
| - scoped_ptr<VideoPacket> packet) {
|
| - DCHECK(encode_task_runner_->BelongsToCurrentThread());
|
| -
|
| + scoped_ptr<VideoPacket> packet = encoder_->Encode(*frame);
|
| packet->set_client_sequence_number(sequence_number);
|
|
|
| + // Destroy the frame before sending |packet| because SendVideoPacket() may
|
| + // trigger another frame to be captured, and the screen capturer expects the
|
| + // old frame to be freed by then.
|
| + frame.reset();
|
| +
|
| bool last = (packet->flags() & VideoPacket::LAST_PACKET) != 0;
|
| if (last) {
|
| scheduler_.RecordEncodeTime(
|
|
|