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

Unified Diff: remoting/host/differ.h

Issue 2714007: Initial code for screen differ that divides screen into blocks and calculate... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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 | « no previous file | remoting/host/differ.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/host/differ.h
===================================================================
--- remoting/host/differ.h (revision 0)
+++ remoting/host/differ.h (revision 0)
@@ -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.
+
+#ifndef REMOTING_HOST_DIFFER_H_
+#define REMOTING_HOST_DIFFER_H_
+
+#include <vector>
+
+#include "base/basictypes.h"
+#include "base/scoped_ptr.h"
+#include "gfx/rect.h"
+
+namespace remoting {
+
+typedef std::vector<gfx::Rect> DirtyRects;
+typedef uint8 DiffInfo;
+
+// Size (in pixels) of each square block used for diffing.
+// This must be a multiple of sizeof(uint64).
+static const int kBlockSize = 32;
+
+class Differ {
+ public:
+ // Create a differ that operates on bitmaps with the specified width, height
+ // and bytes_per_pixel.
+ Differ(int width, int height, int bytes_per_pixel);
+
+ // Given the previous and current screen buffer, calculate the set of
+ // rectangles that enclose all the changed pixels in the new screen.
+ void CalcDirtyRects(const void* prev_buffer, const void* curr_buffer,
+ DirtyRects* rects);
+
+ // Identify all of the blocks that contain changed pixels.
+ void MarkDirtyBlocks(const void* prev_buffer, const void* curr_buffer);
+
+ // Diff a small block of image and return non-zero if there is a diff.
+ // Currently, this just returns 0 or 1, but this may change in the future
+ // to return the number of pixels changed.
+ DiffInfo DiffBlock(const uint8* prev_buffer, const uint8* curr_buffer,
+ int stride);
+
+ // Diff a small block of image and return non-zero if there is a diff.
+ // This checks only the part of the block specified by the width and
+ // height parameters.
+ // This is much slower than DiffBlock() since it cannot assume that the
+ // full block is being checked.
+ // If we force the capturer to always return images whose width/height are
+ // multiples of kBlockSize, then this will never be called.
+ DiffInfo DiffPartialBlock(const uint8* prev_buffer, const uint8* curr_buffer,
+ int stride, int width, int height);
+
+ // After the dirty blocks have been identified, this routine merges adjacent
+ // blocks into larger rectangular units.
+ // The goal is to minimize the number of rects that cover the dirty blocks,
+ // although it is not required to calc the absolute minimum of rects.
+ void MergeBlocks(DirtyRects* rects);
+
+ // Allow tests to access our private parts.
+ friend class DifferTest;
+
+ private:
+ // Dimensions of screen.
+ int width_;
+ int height_;
+
+ // Number of bytes for each pixel in source and dest bitmap.
+ int bytes_per_pixel_;
+
+ // Number of bytes in each row of the image.
+ int bytes_per_row_;
+
+ // Diff information for each block in the image.
+ scoped_ptr<DiffInfo> diff_info_;
+
+ // Dimensions and total size of diff info array.
+ int diff_info_width_;
+ int diff_info_height_;
+ int diff_info_size_;
+
+ DISALLOW_COPY_AND_ASSIGN(Differ);
+};
+
+} // namespace remoting
+
+#endif // REMOTING_HOST_DIFFER_H_
Property changes on: remoting/host/differ.h
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « no previous file | remoting/host/differ.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698