diff options
author | garykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-07 19:58:23 +0000 |
---|---|---|
committer | garykac@google.com <garykac@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-07 19:58:23 +0000 |
commit | cb3b1f93130040a150e7fcc57cd4d5a75569685a (patch) | |
tree | ff93665e3c1478c61663d1107cd42dc25b31448d /remoting/host/capturer_fake.cc | |
parent | b0110e822ac2b2db56d1b1542aad06da573cd544 (diff) | |
download | chromium_src-cb3b1f93130040a150e7fcc57cd4d5a75569685a.zip chromium_src-cb3b1f93130040a150e7fcc57cd4d5a75569685a.tar.gz chromium_src-cb3b1f93130040a150e7fcc57cd4d5a75569685a.tar.bz2 |
Copy the (early prototype of) remoting in Chrome into the public tree.
At the moment, this is a semi-functional demo.
BUG=none
TEST=build/run all unittests on linux
Review URL: http://codereview.chromium.org/2690003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49087 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/host/capturer_fake.cc')
-rw-r--r-- | remoting/host/capturer_fake.cc | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/remoting/host/capturer_fake.cc b/remoting/host/capturer_fake.cc new file mode 100644 index 0000000..5c087b39 --- /dev/null +++ b/remoting/host/capturer_fake.cc @@ -0,0 +1,86 @@ +// 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/host/capturer_fake.h" + +#include "gfx/rect.h" + +namespace remoting { + +static const int kWidth = 640; +static const int kHeight = 480; +static const int kBytesPerPixel = 3; // 24 bit RGB is 3 bytes per pixel. +static const int kMaxColorChannelValue = 255; + +CapturerFake::CapturerFake() + : seed_(0) { + // Dimensions of screen. + width_ = kWidth; + height_ = kHeight; + pixel_format_ = chromotocol_pb::PixelFormatRgb24; + bytes_per_pixel_ = kBytesPerPixel; + bytes_per_row_ = width_ * bytes_per_pixel_; + + // Create memory for the buffers. + int buffer_size = height_ * bytes_per_row_; + for (int i = 0; i < kNumBuffers; i++) { + buffers_[i].reset(new uint8[buffer_size]); + } +} + +CapturerFake::~CapturerFake() { +} + +void CapturerFake::CaptureFullScreen(Task* done_task) { + dirty_rects_.clear(); + + GenerateImage(); + dirty_rects_.push_back(gfx::Rect(width_, height_)); + + FinishCapture(done_task); +} + +void CapturerFake::CaptureDirtyRects(Task* done_task) { + dirty_rects_.clear(); + + GenerateImage(); + // TODO(garykac): Diff old/new images and generate |dirty_rects_|. + // Currently, this just marks the entire screen as dirty. + dirty_rects_.push_back(gfx::Rect(width_, height_)); + + FinishCapture(done_task); +} + +void CapturerFake::CaptureRect(const gfx::Rect& rect, Task* done_task) { + dirty_rects_.clear(); + + GenerateImage(); + dirty_rects_.push_back(rect); + + FinishCapture(done_task); +} + +void CapturerFake::GetData(const uint8* planes[]) const { + planes[0] = buffers_[current_buffer_].get(); + planes[1] = planes[2] = NULL; +} + +void CapturerFake::GetDataStride(int strides[]) const { + // Only the first plane has data. + strides[0] = bytes_per_row_; + strides[1] = strides[2] = 0; +} + +void CapturerFake::GenerateImage() { + uint8* row = buffers_[current_buffer_].get(); + for (int y = 0; y < height_; ++y) { + for (int x = 0; x < width_; ++x) { + row[x] = seed_++; + seed_ &= kMaxColorChannelValue; + } + row += bytes_per_row_; + } +} + +} // namespace remoting |