From ae615162135445eb0b94365b1a1cfa511e7f4be4 Mon Sep 17 00:00:00 2001 From: "brettw@google.com" Date: Wed, 3 Dec 2008 01:11:58 +0000 Subject: Revert my skia file moves because of layout test failures. Review URL: http://codereview.chromium.org/12892 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@6266 0039d316-1c4b-4281-b951-d872f2087c98 --- skia/ext/convolver.h | 137 --------------------------------------------------- 1 file changed, 137 deletions(-) delete mode 100644 skia/ext/convolver.h (limited to 'skia/ext/convolver.h') diff --git a/skia/ext/convolver.h b/skia/ext/convolver.h deleted file mode 100644 index 62c1e30..0000000 --- a/skia/ext/convolver.h +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright (c) 2006-2008 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 SKIA_EXT_CONVOLVER_H_ -#define SKIA_EXT_CONVOLVER_H_ - -#include - -#include "base/basictypes.h" - -// avoid confusion with Mac OS X's math library (Carbon) -#if defined(OS_MACOSX) -#undef FloatToFixed -#endif - -namespace skia { - -// Represents a filter in one dimension. Each output pixel has one entry in this -// object for the filter values contributing to it. You build up the filter -// list by calling AddFilter for each output pixel (in order). -// -// We do 2-dimensional convolusion by first convolving each row by one -// ConvolusionFilter1D, then convolving each column by another one. -// -// Entries are stored in fixed point, shifted left by kShiftBits. -class ConvolusionFilter1D { - public: - // The number of bits that fixed point values are shifted by. - enum { kShiftBits = 14 }; - - ConvolusionFilter1D() : max_filter_(0) { - } - - // Convert between floating point and our fixed point representation. - static inline int16 FloatToFixed(float f) { - return static_cast(f * (1 << kShiftBits)); - } - static inline unsigned char FixedToChar(int16 x) { - return static_cast(x >> kShiftBits); - } - - // Returns the maximum pixel span of a filter. - int max_filter() const { return max_filter_; } - - // Returns the number of filters in this filter. This is the dimension of the - // output image. - int num_values() const { return static_cast(filters_.size()); } - - // Appends the given list of scaling values for generating a given output - // pixel. |filter_offset| is the distance from the edge of the image to where - // the scaling factors start. The scaling factors apply to the source pixels - // starting from this position, and going for the next |filter_length| pixels. - // - // You will probably want to make sure your input is normalized (that is, - // all entries in |filter_values| sub to one) to prevent affecting the overall - // brighness of the image. - // - // The filter_length must be > 0. - // - // This version will automatically convert your input to fixed point. - void AddFilter(int filter_offset, - const float* filter_values, - int filter_length); - - // Same as the above version, but the input is already fixed point. - void AddFilter(int filter_offset, - const int16* filter_values, - int filter_length); - - // Retrieves a filter for the given |value_offset|, a position in the output - // image in the direction we're convolving. The offset and length of the - // filter values are put into the corresponding out arguments (see AddFilter - // above for what these mean), and a pointer to the first scaling factor is - // returned. There will be |filter_length| values in this array. - inline const int16* FilterForValue(int value_offset, - int* filter_offset, - int* filter_length) const { - const FilterInstance& filter = filters_[value_offset]; - *filter_offset = filter.offset; - *filter_length = filter.length; - return &filter_values_[filter.data_location]; - } - - private: - struct FilterInstance { - // Offset within filter_values for this instance of the filter. - int data_location; - - // Distance from the left of the filter to the center. IN PIXELS - int offset; - - // Number of values in this filter instance. - int length; - }; - - // Stores the information for each filter added to this class. - std::vector filters_; - - // We store all the filter values in this flat list, indexed by - // |FilterInstance.data_location| to avoid the mallocs required for storing - // each one separately. - std::vector filter_values_; - - // The maximum size of any filter we've added. - int max_filter_; -}; - -// Does a two-dimensional convolusion on the given source image. -// -// It is assumed the source pixel offsets referenced in the input filters -// reference only valid pixels, so the source image size is not required. Each -// row of the source image starts |source_byte_row_stride| after the previous -// one (this allows you to have rows with some padding at the end). -// -// The result will be put into the given output buffer. The destination image -// size will be xfilter.num_values() * yfilter.num_values() pixels. It will be -// in rows of exactly xfilter.num_values() * 4 bytes. -// -// |source_has_alpha| is a hint that allows us to avoid doing computations on -// the alpha channel if the image is opaque. If you don't know, set this to -// true and it will work properly, but setting this to false will be a few -// percent faster if you know the image is opaque. -// -// The layout in memory is assumed to be 4-bytes per pixel in B-G-R-A order -// (this is ARGB when loaded into 32-bit words on a little-endian machine). -void BGRAConvolve2D(const uint8* source_data, - int source_byte_row_stride, - bool source_has_alpha, - const ConvolusionFilter1D& xfilter, - const ConvolusionFilter1D& yfilter, - uint8* output); - -} // namespace skia - -#endif // SKIA_EXT_CONVOLVER_H_ - -- cgit v1.1