Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(920)

Unified Diff: remoting/client/chromoting_view.cc

Issue 3124005: Move UpdateStreamEncoding value into the BeginUpdateStreamMessage since we... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/client/chromoting_view.h ('k') | remoting/client/chromoting_view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/client/chromoting_view.cc
===================================================================
--- remoting/client/chromoting_view.cc (revision 0)
+++ remoting/client/chromoting_view.cc (revision 0)
@@ -0,0 +1,103 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "remoting/client/chromoting_view.h"
+
+#include "remoting/base/decoder_verbatim.h"
+#include "remoting/base/decoder_zlib.h"
+
+namespace remoting {
+
+ChromotingView::ChromotingView()
+ : frame_width_(0),
+ frame_height_(0) {
+}
+
+bool ChromotingView::SetupDecoder(UpdateStreamEncoding encoding) {
+ if (encoding == EncodingInvalid) {
+ LOG(ERROR) << "Cannot create encoder for EncodingInvalid";
+ return false;
+ }
+
+ // If we're in the middle of decoding a stream, then we need to make sure
+ // that that all packets in that stream match the encoding of the first
+ // packet.
+ //
+ // If we decide to relax this constraint in the future, we'll need to
+ // update this to keep a set of decoders around.
+ if (decoder_.get() && decoder_->IsStarted()) {
+ // Verify that the encoding matches the decoder. Once we've started
+ // decoding, we can't switch to another decoder.
+ if (decoder_->Encoding() != encoding) {
+ LOG(ERROR) << "Encoding mismatch: Set up to handle "
+ << "UpdateStreamEncoding=" << decoder_->Encoding()
+ << " but received request for "
+ << encoding;
+ return false;
+ }
+ return true;
+ }
+
+ // Lazily initialize a new decoder.
+ // We create a new decoder if we don't currently have a decoder or if the
+ // decoder doesn't match the desired encoding.
+ if (!decoder_.get() || decoder_->Encoding() != encoding) {
+ // Initialize a new decoder based on this message encoding.
+ if (encoding == EncodingNone) {
+ decoder_.reset(new DecoderVerbatim());
+ } else if (encoding == EncodingZlib) {
+ decoder_.reset(new DecoderZlib());
+ }
+ // Make sure we successfully allocated a decoder of the correct type.
+ DCHECK(decoder_.get());
+ DCHECK(decoder_->Encoding() == encoding);
+ }
+
+ return true;
+}
+
+bool ChromotingView::BeginDecoding(Task* partial_decode_done,
+ Task* decode_done) {
+ if (decoder_->IsStarted()) {
+ LOG(ERROR) << "BeginDecoding called without ending previous decode.";
+ return false;
+ }
+
+ decoder_->BeginDecode(frame_, &update_rects_,
+ partial_decode_done, decode_done);
+
+ if (!decoder_->IsStarted()) {
+ LOG(ERROR) << "Unable to start decoding.";
+ return false;
+ }
+
+ return true;
+}
+
+bool ChromotingView::Decode(HostMessage* msg) {
+ if (!decoder_->IsStarted()) {
+ LOG(ERROR) << "Attempt to decode payload before calling BeginDecode.";
+ return false;
+ }
+
+ return decoder_->PartialDecode(msg);
+}
+
+bool ChromotingView::EndDecoding() {
+ if (!decoder_->IsStarted()) {
+ LOG(ERROR) << "Attempt to end decode when none has been started.";
+ return false;
+ }
+
+ decoder_->EndDecode();
+
+ if (decoder_->IsStarted()) {
+ LOG(ERROR) << "Unable to properly end decoding.\n";
+ return false;
+ }
+
+ return true;
+}
+
+} // namespace remoting
Property changes on: remoting/client/chromoting_view.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « remoting/client/chromoting_view.h ('k') | remoting/client/chromoting_view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698