| 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/client/rectangle_update_decoder.h" | 5 #include "remoting/client/rectangle_update_decoder.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/callback.h" | 9 #include "base/callback.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 decoder_.reset(DecoderRowBased::CreateVerbatimDecoder()); | 45 decoder_.reset(DecoderRowBased::CreateVerbatimDecoder()); |
| 46 } else if (codec == ChannelConfig::CODEC_ZIP) { | 46 } else if (codec == ChannelConfig::CODEC_ZIP) { |
| 47 decoder_.reset(DecoderRowBased::CreateZlibDecoder()); | 47 decoder_.reset(DecoderRowBased::CreateZlibDecoder()); |
| 48 } else if (codec == ChannelConfig::CODEC_VP8) { | 48 } else if (codec == ChannelConfig::CODEC_VP8) { |
| 49 decoder_.reset(new DecoderVp8()); | 49 decoder_.reset(new DecoderVp8()); |
| 50 } else { | 50 } else { |
| 51 NOTREACHED() << "Invalid Encoding found: " << codec; | 51 NOTREACHED() << "Invalid Encoding found: " << codec; |
| 52 } | 52 } |
| 53 } | 53 } |
| 54 | 54 |
| 55 void RectangleUpdateDecoder::DecodePacket(const VideoPacket* packet, | 55 void RectangleUpdateDecoder::DecodePacket(scoped_ptr<VideoPacket> packet, |
| 56 const base::Closure& done) { | 56 const base::Closure& done) { |
| 57 if (!message_loop_->BelongsToCurrentThread()) { | 57 if (!message_loop_->BelongsToCurrentThread()) { |
| 58 message_loop_->PostTask( | 58 message_loop_->PostTask( |
| 59 FROM_HERE, base::Bind(&RectangleUpdateDecoder::DecodePacket, | 59 FROM_HERE, base::Bind(&RectangleUpdateDecoder::DecodePacket, |
| 60 this, packet, done)); | 60 this, base::Passed(&packet), done)); |
| 61 return; | 61 return; |
| 62 } | 62 } |
| 63 | 63 |
| 64 base::ScopedClosureRunner done_runner(done); | 64 base::ScopedClosureRunner done_runner(done); |
| 65 bool decoder_needs_reset = false; | 65 bool decoder_needs_reset = false; |
| 66 | 66 |
| 67 // If the packet includes a screen size, store it. | 67 // If the packet includes a screen size, store it. |
| 68 if (packet->format().has_screen_width() && | 68 if (packet->format().has_screen_width() && |
| 69 packet->format().has_screen_height()) { | 69 packet->format().has_screen_height()) { |
| 70 SkISize source_size = SkISize::Make(packet->format().screen_width(), | 70 SkISize source_size = SkISize::Make(packet->format().screen_width(), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 84 decoder_->Initialize(source_size_); | 84 decoder_->Initialize(source_size_); |
| 85 consumer_->SetSourceSize(source_size_); | 85 consumer_->SetSourceSize(source_size_); |
| 86 } | 86 } |
| 87 | 87 |
| 88 if (!decoder_->IsReadyForData()) { | 88 if (!decoder_->IsReadyForData()) { |
| 89 // TODO(ajwong): This whole thing should move into an invalid state. | 89 // TODO(ajwong): This whole thing should move into an invalid state. |
| 90 LOG(ERROR) << "Decoder is unable to process data. Dropping packet."; | 90 LOG(ERROR) << "Decoder is unable to process data. Dropping packet."; |
| 91 return; | 91 return; |
| 92 } | 92 } |
| 93 | 93 |
| 94 if (decoder_->DecodePacket(packet) == Decoder::DECODE_DONE) | 94 if (decoder_->DecodePacket(packet.get()) == Decoder::DECODE_DONE) |
| 95 SchedulePaint(); | 95 SchedulePaint(); |
| 96 } | 96 } |
| 97 | 97 |
| 98 void RectangleUpdateDecoder::SchedulePaint() { | 98 void RectangleUpdateDecoder::SchedulePaint() { |
| 99 if (paint_scheduled_) | 99 if (paint_scheduled_) |
| 100 return; | 100 return; |
| 101 paint_scheduled_ = true; | 101 paint_scheduled_ = true; |
| 102 message_loop_->PostTask( | 102 message_loop_->PostTask( |
| 103 FROM_HERE, base::Bind(&RectangleUpdateDecoder::DoPaint, this)); | 103 FROM_HERE, base::Bind(&RectangleUpdateDecoder::DoPaint, this)); |
| 104 } | 104 } |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 } else { | 209 } else { |
| 210 ++i; | 210 ++i; |
| 211 } | 211 } |
| 212 } | 212 } |
| 213 | 213 |
| 214 SchedulePaint(); | 214 SchedulePaint(); |
| 215 } | 215 } |
| 216 } | 216 } |
| 217 | 217 |
| 218 } // namespace remoting | 218 } // namespace remoting |
| OLD | NEW |