| Index: skia/ext/convolver.h
|
| diff --git a/skia/ext/convolver.h b/skia/ext/convolver.h
|
| index 3065338dcac75d05fc39cba5987916f4db1eb1d7..6da703c7ed3c4b3d2c6421535f5a6b362a94e956 100644
|
| --- a/skia/ext/convolver.h
|
| +++ b/skia/ext/convolver.h
|
| @@ -10,6 +10,7 @@
|
|
|
| #include "base/basictypes.h"
|
| #include "base/cpu.h"
|
| +#include "third_party/skia/include/core/SkSize.h"
|
| #include "third_party/skia/include/core/SkTypes.h"
|
|
|
| // We can build SSE2 optimized versions for all x86 CPUs
|
| @@ -99,13 +100,24 @@ class ConvolutionFilter1D {
|
| int* filter_length) const {
|
| const FilterInstance& filter = filters_[value_offset];
|
| *filter_offset = filter.offset;
|
| - *filter_length = filter.length;
|
| - if (filter.length == 0) {
|
| + *filter_length = filter.trimmed_length;
|
| + if (filter.trimmed_length == 0) {
|
| return NULL;
|
| }
|
| return &filter_values_[filter.data_location];
|
| }
|
|
|
| + // Retrieves the filter for the offset 0, presumed to be the one and only.
|
| + // The offset and length of the filter values are put into the corresponding
|
| + // out arguments (see AddFilter). Note that |filter_legth| and
|
| + // |specified_filter_length| may be different if leading/trailing zeros of the
|
| + // original floating point form were clipped.
|
| + // There will be |filter_length| values in the return array.
|
| + // Returns NULL if the filter is 0-length (for instance when all floating
|
| + // point values passed to AddFilter were clipped to 0).
|
| + const Fixed* GetSingleFilter(int* specified_filter_length,
|
| + int* filter_offset,
|
| + int* filter_length) const;
|
|
|
| inline void PaddingForSIMD() {
|
| // Padding |padding_count| of more dummy coefficients after the coefficients
|
| @@ -128,6 +140,11 @@ class ConvolutionFilter1D {
|
| int offset;
|
|
|
| // Number of values in this filter instance.
|
| + int trimmed_length;
|
| +
|
| + // Filter length as specified. Note that this may be different from
|
| + // 'trimmed_length' if leading/trailing zeros of the original floating
|
| + // point form were clipped differently on each tail.
|
| int length;
|
| };
|
|
|
| @@ -169,6 +186,39 @@ SK_API void BGRAConvolve2D(const unsigned char* source_data,
|
| int output_byte_row_stride,
|
| unsigned char* output,
|
| bool use_simd_if_possible);
|
| +
|
| +// Does a 1D convolution of the given source image along the X dimension on
|
| +// a single channel of the bitmap.
|
| +//
|
| +// The function uses the same convolution kernel for each pixel. That kernel
|
| +// must be added to |filter| at offset 0. This is a most straightforward
|
| +// implementation of convolution, intended chiefly for development purposes.
|
| +SK_API void SingleChannelConvolveX1D(const unsigned char* source_data,
|
| + int source_byte_row_stride,
|
| + int input_channel_index,
|
| + int input_channel_count,
|
| + const ConvolutionFilter1D& filter,
|
| + const SkISize& image_size,
|
| + unsigned char* output,
|
| + int output_byte_row_stride,
|
| + int output_channel_index,
|
| + int output_channel_count,
|
| + bool absolute_values);
|
| +
|
| +// Does a 1D convolution of the given source image along the Y dimension on
|
| +// a single channel of the bitmap.
|
| +SK_API void SingleChannelConvolveY1D(const unsigned char* source_data,
|
| + int source_byte_row_stride,
|
| + int input_channel_index,
|
| + int input_channel_count,
|
| + const ConvolutionFilter1D& filter,
|
| + const SkISize& image_size,
|
| + unsigned char* output,
|
| + int output_byte_row_stride,
|
| + int output_channel_index,
|
| + int output_channel_count,
|
| + bool absolute_values);
|
| +
|
| } // namespace skia
|
|
|
| #endif // SKIA_EXT_CONVOLVER_H_
|
|
|